Port literal float emitter to parser
Also simplify emitter for special float cases Nan, Inf, -Inf
This commit is contained in:
parent
af8954cfdb
commit
02dee45458
4 changed files with 15 additions and 34 deletions
|
@ -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
|
||||
|
|
|
@ -28,7 +28,7 @@ module Mutant
|
|||
# @api private
|
||||
#
|
||||
def values
|
||||
[0, 1, -first_child]
|
||||
[0, 1, -children.first]
|
||||
end
|
||||
|
||||
end # Fixnuma
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue