Torsten Rüger
dced6b12e6
the "old" way of generating compilers is now obsolete we can use ruby code with mom macros to achieve the same Three step wip remove old builtin fix tests (including adding necessary methods) fixup and inclusion of builtin code to parfait
31 lines
942 B
Ruby
31 lines
942 B
Ruby
module Mom
|
|
class Comparison < Macro
|
|
attr_reader :operator
|
|
def initialize(name , operator)
|
|
super(name)
|
|
@operator = operator.value
|
|
end
|
|
def to_risc(compiler)
|
|
builder = compiler.builder(compiler.source)
|
|
operator = @operator # make accessible in block
|
|
builder.build do
|
|
integer! << message[:receiver]
|
|
integer.reduce_int
|
|
integer_reg! << message[:arg1] #"other"
|
|
integer_reg.reduce_int
|
|
swap_names(:integer , :integer_reg) if(operator.to_s.start_with?('<') )
|
|
integer.op :- , integer_reg
|
|
if_minus false_label
|
|
if_zero( false_label ) if operator.to_s.length == 1
|
|
object! << Parfait.object_space.true_object
|
|
branch merge_label
|
|
add_code false_label
|
|
object << Parfait.object_space.false_object
|
|
add_code merge_label
|
|
message[:return_value] << object
|
|
end
|
|
return compiler
|
|
end
|
|
end
|
|
end
|