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
|
||||||
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 # Literal
|
||||||
end # Node
|
end # Node
|
||||||
end # Mutator
|
end # Mutator
|
||||||
|
|
|
@ -28,7 +28,7 @@ module Mutant
|
||||||
# @api private
|
# @api private
|
||||||
#
|
#
|
||||||
def values
|
def values
|
||||||
[0, 1, -first_child]
|
[0, 1, -children.first]
|
||||||
end
|
end
|
||||||
|
|
||||||
end # Fixnuma
|
end # Fixnuma
|
||||||
|
|
|
@ -20,6 +20,12 @@ module Mutant
|
||||||
emit_new { new_self(Random.float) }
|
emit_new { new_self(Random.float) }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
SPECIAL = [
|
||||||
|
NodeHelpers::NAN,
|
||||||
|
NodeHelpers::NEGATIVE_INFINITY,
|
||||||
|
NodeHelpers::INFINITY
|
||||||
|
].freeze
|
||||||
|
|
||||||
# Emit special cases
|
# Emit special cases
|
||||||
#
|
#
|
||||||
# @return [undefined]
|
# @return [undefined]
|
||||||
|
@ -27,7 +33,7 @@ module Mutant
|
||||||
# @api private
|
# @api private
|
||||||
#
|
#
|
||||||
def emit_special_cases
|
def emit_special_cases
|
||||||
[infinity, negative_infinity, nan].each do |value|
|
SPECIAL.each do |value|
|
||||||
emit(value)
|
emit(value)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -39,7 +45,7 @@ module Mutant
|
||||||
# @api private
|
# @api private
|
||||||
#
|
#
|
||||||
def values
|
def values
|
||||||
[0.0, 1.0] << -node.value
|
[0.0, 1.0, -children.first]
|
||||||
end
|
end
|
||||||
|
|
||||||
end # Float
|
end # Float
|
||||||
|
|
|
@ -13,6 +13,12 @@ module Mutant
|
||||||
def s(type, *children)
|
def s(type, *children)
|
||||||
Parser::AST::Node.new(type, children)
|
Parser::AST::Node.new(type, children)
|
||||||
end
|
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 # NodeHelpers
|
||||||
end # Mutant
|
end # Mutant
|
||||||
|
|
Loading…
Add table
Reference in a new issue