add reduce_int and fix bug

hardcoded operator, buh
reduce_int to avoid that long constant
This commit is contained in:
Torsten Ruger 2018-08-08 15:49:07 +03:00
parent f5ea51c4d0
commit 78466090b3
3 changed files with 14 additions and 1 deletions

View File

@ -52,6 +52,13 @@ module Risc
return index
end
# reduce integer to fixnum and add instruction if builder is used
def reduce_int
reduce = Risc.slot_to_reg( "int -> fix" , self , Parfait::Integer.integer_index , self)
builder.add_code(reduce) if builder
reduce
end
# when following variables in resolve_and_add, get a new RegisterValue
# that represents the new value.
# Ie in "normal case" a the same register, with the type of the slot
@ -151,7 +158,7 @@ module Risc
# create operator instruction for self and add
# doesn't read quite as smoothly as one would like, but better than the compiler version
def op( operator , right)
ret = Risc.op( "operator #{operator}" , :>> , self , right)
ret = Risc.op( "operator #{operator}" , operator , self , right)
builder.add_code(ret) if builder
ret
end

View File

@ -57,6 +57,7 @@ module Risc
assert_equal OperatorInstruction , ret.class
assert_equal @r0 , ret.left
assert_equal @r1 , ret.right
assert_equal :<< , ret.operator
end
def test_slot_to_reg
instr = @r0 << @r1[:next_message]

View File

@ -16,6 +16,11 @@ module Risc
def test_resolves_index_fail
assert_raises {@r0.resolve_index(:something)}
end
def test_reduce_int
ins = @r0.reduce_int
assert_equal SlotToReg , ins.class
assert_equal Parfait::Integer.integer_index , ins.index
end
def test_get_new_left_0
assert_equal RegisterValue , @r0.get_new_left(:caller , @compiler).class
end