diff --git a/lib/risc/callable_compiler.rb b/lib/risc/callable_compiler.rb index 458e5897..26f59e81 100644 --- a/lib/risc/callable_compiler.rb +++ b/lib/risc/callable_compiler.rb @@ -51,12 +51,6 @@ module Risc self end - # require a (temporary) register. code must give this back with release_reg - # Second extra parameter may give extra info about the value, see RegisterValue - def use_reg( type , extra = {} ) - @allocator.use_reg(type, extra) - end - # resolve the type of the slot, by inferring from it's name, using the type # scope related slots are resolved by the compiler by method/block def slot_type( slot , type) diff --git a/lib/risc/instructions/load_constant.rb b/lib/risc/instructions/load_constant.rb index 572d10fa..a166f02a 100644 --- a/lib/risc/instructions/load_constant.rb +++ b/lib/risc/instructions/load_constant.rb @@ -10,7 +10,7 @@ module Risc @register = register @constant = constant raise "Not Constant #{constant}" if constant.is_a?(SlotMachine::Slot) - raise "Not register #{register}" unless RegisterValue.look_like_reg(register) + raise "Not register #{register}" unless register.is_a?(RegisterValue) end attr_accessor :register , :constant @@ -32,7 +32,15 @@ module Risc end end end - def self.load_constant( source , constant , register ) + def self.load_constant( source , constant ) + if(constant.is_a?(Parfait::Object)) + type = constant.get_type + value = constant + else + type = constant.ct_type + value = constant.value + end + register = RegisterValue.new( "id_#{value.object_id}".to_sym , type ) LoadConstant.new( source , constant , register ) end end diff --git a/test/risc/instructions/test_load_constant.rb b/test/risc/instructions/test_load_constant.rb new file mode 100644 index 00000000..ba6a7d59 --- /dev/null +++ b/test/risc/instructions/test_load_constant.rb @@ -0,0 +1,32 @@ +require_relative "../helper" + +module Risc + class TestLoadConstant < MiniTest::Test + def setup + Parfait.boot!({}) + end + def load(const = SlotMachine::StringConstant.new("hi") ) + Risc.load_constant("source" , const) + end + def test_const + assert_equal LoadConstant , load.class + end + def test_const_reg + assert load.register.is_object? + end + end + class TestLoadConstant1 < MiniTest::Test + def setup + Parfait.boot!({}) + end + def load(const = Parfait.new_word("hi") ) + Risc.load_constant("source" , const) + end + def test_parf + assert_equal LoadConstant , load.class + end + def test_parf_reg + assert load.register.is_object? + end + end +end