did return sequence

surprisingly easy. also some check polish
This commit is contained in:
2020-03-03 16:09:41 +02:00
parent fd43fc9e5c
commit a4c0b8e5f9
7 changed files with 65 additions and 26 deletions

View File

@ -19,7 +19,8 @@ module SlotMachine
def set_label(false_label)
@false_label = false_label
raise "Jump target must be a label #{false_label}" unless false_label.is_a?(Label) end
raise "Jump target must be a label #{false_label}" unless false_label.is_a?(Label)
end
end
end

View File

@ -20,16 +20,9 @@ module SlotMachine
#
class ReturnSequence < Instruction
def to_risc(compiler)
compiler.reset_regs
builder = compiler.builder(self)
builder.build do
object! << message[:return_value]
caller_reg! << message[:caller]
caller_reg[:return_value] << object
end
builder.build do
return_address! << message[:return_address]
return_address << return_address[ Parfait::Integer.integer_index]
compiler.build(to_s) do
message[:caller][:return_value] << message[:return_value]
return_address = message[:return_address].to_reg
message << message[:caller]
add_code Risc.function_return("return #{compiler.callable.name}", return_address)
end

View File

@ -21,7 +21,7 @@ module SlotMachine
def to_risc(compiler)
false_label = @false_label.risc_label(compiler)
condition_reg = @condition.to_register(compiler,self)
compiler.build(self.to_s) do
object = load_object Parfait.object_space.false_object
object.op :- , condition_reg