fix insertion and add assign send

must implement send conversion before this makes sense
This commit is contained in:
Torsten Ruger 2018-03-19 13:19:42 +05:30
parent 66a160d8ab
commit c0a7f1d284
3 changed files with 34 additions and 4 deletions

View File

@ -93,11 +93,12 @@ module Risc
# continue down the instruction chain unti depleted # continue down the instruction chain unti depleted
# (adding moves the insertion point so the whole mom chain is added as a risc chain) # (adding moves the insertion point so the whole mom chain is added as a risc chain)
def add_mom( instruction ) def add_mom( instruction )
raise "whats this a #{instruction}" unless instruction.is_a?(Mom::Instruction)
while( instruction ) while( instruction )
#puts "adding #{instruction.to_s}:#{instruction.next.to_s}" raise "whats this a #{instruction}" unless instruction.is_a?(Mom::Instruction)
#puts "adding mom #{instruction.to_s}:#{instruction.next.to_s}"
risc = instruction.to_risc( self ) risc = instruction.to_risc( self )
add_code(risc) add_code(risc)
#puts "adding risc #{risc.to_s}:#{risc.next.to_s}"
instruction = instruction.next instruction = instruction.next
end end
end end
@ -106,8 +107,9 @@ module Risc
def add_code( instruction ) def add_code( instruction )
raise "Not an instruction:#{instruction.to_s}" unless instruction.is_a?(Risc::Instruction) raise "Not an instruction:#{instruction.to_s}" unless instruction.is_a?(Risc::Instruction)
raise instruction.to_s if( instruction.class.name.split("::").first == "Arm") raise instruction.to_s if( instruction.class.name.split("::").first == "Arm")
new_current = instruction.last #after insertion this point is lost
@current.insert(instruction) #insert after current @current.insert(instruction) #insert after current
@current = instruction.last @current = new_current
self self
end end

View File

@ -1,7 +1,7 @@
require_relative 'helper' require_relative 'helper'
module Risc module Risc
class TestLocalAssign < MiniTest::Test class TestAssignLocalConst < MiniTest::Test
include Statements include Statements
def setup def setup

View File

@ -0,0 +1,28 @@
require_relative 'helper'
module Risc
class TestAssignLocalSend < MiniTest::Test
include Statements
def setup
super
@input = "r = 5.mod4"
@expect = [Label, LoadConstant, RegToSlot, Label, Label, SlotToReg ,
RegToSlot]
end
def test_local_assign_instructions
assert_nil msg = check_nil , msg
end
def ttest_constant_load
produced = produce_body
assert_equal 5 , produced.constant.known_object.value
end
def ttest_slot_move
produced = produce_body
assert_equal produced.next.register , produced.register
end
end
end