Port literal float emitter to parser

Also simplify emitter for special float cases Nan, Inf, -Inf
This commit is contained in:
Markus Schirp 2013-06-12 19:19:06 +02:00
parent af8954cfdb
commit 02dee45458
4 changed files with 15 additions and 34 deletions

View file

@ -21,37 +21,6 @@ module Mutant
end
end
# Return AST representing NaN
#
# @return [Parser::AST::Node]
#
# @api private
#
def nan
zero_float = new_float(0)
new_send_with_arguments(zero_float, :/, zero_float)
end
# Return AST representing negative infinity
#
# @return [Parser::AST::Node]
#
# @api private
#
def negative_infinity
new_send_with_arguments(new_float(-1), :/, new_float(0))
end
# Return AST representing infinity
#
# @return [Parser::AST::Node]
#
# @api private
#
def infinity
new_send_with_arguments(new_float(1), :/, new_float(0))
end
end # Literal
end # Node
end # Mutator

View file

@ -28,7 +28,7 @@ module Mutant
# @api private
#
def values
[0, 1, -first_child]
[0, 1, -children.first]
end
end # Fixnuma

View file

@ -20,6 +20,12 @@ module Mutant
emit_new { new_self(Random.float) }
end
SPECIAL = [
NodeHelpers::NAN,
NodeHelpers::NEGATIVE_INFINITY,
NodeHelpers::INFINITY
].freeze
# Emit special cases
#
# @return [undefined]
@ -27,7 +33,7 @@ module Mutant
# @api private
#
def emit_special_cases
[infinity, negative_infinity, nan].each do |value|
SPECIAL.each do |value|
emit(value)
end
end
@ -39,7 +45,7 @@ module Mutant
# @api private
#
def values
[0.0, 1.0] << -node.value
[0.0, 1.0, -children.first]
end
end # Float

View file

@ -13,6 +13,12 @@ module Mutant
def s(type, *children)
Parser::AST::Node.new(type, children)
end
module_function :s
NAN = s(:send, s(:float, 0.0), :/, s(:args, s(:float, 0.0)))
NEGATIVE_INFINITY = s(:send, s(:float, -1.0), :/, s(:args, s(:float, 0.0)))
INFINITY = s(:send, s(:float, 1.0), :/, s(:args, s(:float, 0.0)))
end # NodeHelpers
end # Mutant