From 66901eeb5b1eb4d850c5efe7301cdcdf5b0f372d Mon Sep 17 00:00:00 2001 From: Torsten Ruger Date: Sun, 10 Sep 2017 12:57:25 +0300 Subject: [PATCH] fix use of slot_constant vs slot_move wip --- lib/mom/slot_load.rb | 6 +++++ lib/vool/statements/basic_values.rb | 23 ++++++++++++++----- lib/vool/statements/return_statement.rb | 4 ++-- test/mom/test_if_statement.rb | 2 +- test/mom/test_while_statement.rb | 2 +- test/support/compiling.rb | 4 +++- test/vool/to_mom/send/test_send_self.rb | 4 ++-- test/vool/to_mom/send/test_send_simple.rb | 4 ++-- .../vool/to_mom/send/test_send_simple_args.rb | 4 ++-- .../to_mom/send/test_send_simple_string.rb | 4 ++-- test/vool/to_mom/test_assign.rb | 4 ++-- test/vool/to_mom/test_if_condition.rb | 2 +- test/vool/to_mom/test_local.rb | 2 +- test/vool/to_mom/test_while_condition.rb | 2 +- 14 files changed, 43 insertions(+), 24 deletions(-) diff --git a/lib/mom/slot_load.rb b/lib/mom/slot_load.rb index 6ff157d9..c834d20d 100644 --- a/lib/mom/slot_load.rb +++ b/lib/mom/slot_load.rb @@ -39,6 +39,12 @@ module Mom # @left: See SlotLoad, and array of symbols # @right: A Constant from parse, ie an instance of classes in basc_value, like TrueStatement class SlotConstant < SlotLoad + + def initialize(left , right) + super + raise "right not constant, #{right}" unless right.is_a? Vool::ConstantStatement + end + end class SlotMove < SlotLoad diff --git a/lib/vool/statements/basic_values.rb b/lib/vool/statements/basic_values.rb index 3d0238f4..c61eb3f1 100644 --- a/lib/vool/statements/basic_values.rb +++ b/lib/vool/statements/basic_values.rb @@ -1,5 +1,16 @@ module Vool - class IntegerStatement < Statement + class Statement + def slot_class + Mom::SlotMove + end + end + class ConstantStatement < Statement + def slot_class + Mom::SlotConstant + end + end + + class IntegerStatement < ConstantStatement attr_reader :value def initialize(value) @value = value @@ -8,7 +19,7 @@ module Vool Parfait.object_space.get_class_by_name(:Integer).instance_type end end - class FloatStatement < Statement + class FloatStatement < ConstantStatement attr_reader :value def initialize(value) @value = value @@ -17,17 +28,17 @@ module Vool true end end - class TrueStatement < Statement + class TrueStatement < ConstantStatement def ct_type Parfait.object_space.get_class_by_name(:True).instance_type end end - class FalseStatement < Statement + class FalseStatement < ConstantStatement def ct_type Parfait.object_space.get_class_by_name(:False).instance_type end end - class NilStatement < Statement + class NilStatement < ConstantStatement def ct_type Parfait.object_space.get_class_by_name(:Nil).instance_type end @@ -44,7 +55,7 @@ module Vool end class SuperStatement < Statement end - class StringStatement < Statement + class StringStatement < ConstantStatement attr_reader :value def initialize(value) @value = value diff --git a/lib/vool/statements/return_statement.rb b/lib/vool/statements/return_statement.rb index b3b71dd2..6b5ce28e 100644 --- a/lib/vool/statements/return_statement.rb +++ b/lib/vool/statements/return_statement.rb @@ -15,8 +15,8 @@ module Vool # - store the given return value, this is a SlotMove / SlotConstant # - activate return sequence (reinstantiate old message and jump to return address) def to_mom( method ) - Mom::Statements.new [Mom::SlotConstant.new([:message , :return_value] , @return_value) , - Mom::ReturnSequence.new] + move = @return_value.slot_class.new( [:message , :return_value] , @return_value) + Mom::Statements.new [move , Mom::ReturnSequence.new] end end diff --git a/test/mom/test_if_statement.rb b/test/mom/test_if_statement.rb index 8ae01a2d..64df4506 100644 --- a/test/mom/test_if_statement.rb +++ b/test/mom/test_if_statement.rb @@ -24,7 +24,7 @@ module Mom assert_equal 9 , @stats.length end def test_array - check_array [SlotConstant,TruthCheck,Label,SimpleCall,SlotConstant,Label,SimpleCall,SlotConstant,Label] , @stats + check_array [SlotMove,TruthCheck,Label,SimpleCall,SlotMove,Label,SimpleCall,SlotMove,Label] , @stats end end end diff --git a/test/mom/test_while_statement.rb b/test/mom/test_while_statement.rb index 6babbd93..2a363dc9 100644 --- a/test/mom/test_while_statement.rb +++ b/test/mom/test_while_statement.rb @@ -24,7 +24,7 @@ module Mom assert_equal 4 , @stats.length end def test_array - check_array [Label,SlotConstant,TruthCheck,Label] , @stats + check_array [Label,SlotMove,TruthCheck,Label] , @stats end end end diff --git a/test/support/compiling.rb b/test/support/compiling.rb index 87a00903..740a2f45 100644 --- a/test/support/compiling.rb +++ b/test/support/compiling.rb @@ -39,10 +39,12 @@ module MomCompile index = 0 test = is while(test) - assert_equal should[index] , test.class , "Wrong class for #{index+1}, #{dump(is)}" + # if we assert here, we get output pointing here. Without stack, not useful + raise "Wrong class for #{index+1}, #{dump(is)}" if should[index] != test.class index += 1 test = test.next end + assert 1 #just to get an assertion in the output. end def dump(is) res =[] diff --git a/test/vool/to_mom/send/test_send_self.rb b/test/vool/to_mom/send/test_send_self.rb index ebfd5c72..5e295f65 100644 --- a/test/vool/to_mom/send/test_send_self.rb +++ b/test/vool/to_mom/send/test_send_self.rb @@ -10,7 +10,7 @@ module Vool end def test_class_compiles - assert_equal Mom::SlotConstant , @stats.first.class , @stats + assert_equal Mom::SlotMove , @stats.first.class , @stats end def test_slot_is_set assert @stats.first.left @@ -19,7 +19,7 @@ module Vool assert_equal 3 , @stats.length end def test_receiver_move_class - assert_equal Mom::SlotConstant, @stats.first.class + assert_equal Mom::SlotMove, @stats.first.class end def test_receiver_move assert_equal :receiver, @stats.first.left[2] diff --git a/test/vool/to_mom/send/test_send_simple.rb b/test/vool/to_mom/send/test_send_simple.rb index 0676ee8b..b084360e 100644 --- a/test/vool/to_mom/send/test_send_simple.rb +++ b/test/vool/to_mom/send/test_send_simple.rb @@ -13,7 +13,7 @@ module Vool assert Array != @stats.class , @stats end def test_class_compiles - assert_equal Mom::SlotConstant , @stats.first.class , @stats + assert_equal Mom::SlotMove , @stats.first.class , @stats end def test_slot_is_set assert @stats.first.left @@ -22,7 +22,7 @@ module Vool assert_equal 2 , @stats.length end def test_receiver_move_class - assert_equal Mom::SlotConstant, @stats.first.class + assert_equal Mom::SlotMove, @stats.first.class end def test_receiver_move assert_equal :receiver, @stats.first.left[2] diff --git a/test/vool/to_mom/send/test_send_simple_args.rb b/test/vool/to_mom/send/test_send_simple_args.rb index 9e96ec9e..e22641c0 100644 --- a/test/vool/to_mom/send/test_send_simple_args.rb +++ b/test/vool/to_mom/send/test_send_simple_args.rb @@ -13,13 +13,13 @@ module Vool assert_equal Mom::Statements , @stats.class end def test_class_compiles - assert_equal Mom::SlotConstant , @stats.first.class , @stats + assert_equal Mom::SlotMove , @stats.first.class , @stats end def test_four_instructions_are_returned assert_equal 4 , @stats.length end def test_receiver_move - assert_equal Mom::SlotConstant, @stats[0].class + assert_equal Mom::SlotMove, @stats[0].class assert_equal :receiver, @stats[0].left[2] end def test_receiver diff --git a/test/vool/to_mom/send/test_send_simple_string.rb b/test/vool/to_mom/send/test_send_simple_string.rb index df54e6d3..d4f054d8 100644 --- a/test/vool/to_mom/send/test_send_simple_string.rb +++ b/test/vool/to_mom/send/test_send_simple_string.rb @@ -13,13 +13,13 @@ module Vool assert Array != @stats.class , @stats end def test_class_compiles - assert_equal Mom::SlotConstant , @stats.first.class , @stats + assert_equal Mom::SlotMove , @stats.first.class , @stats end def test_four_instructions_are_returned assert_equal 3 , @stats.length end def test_receiver_move - assert_equal Mom::SlotConstant, @stats.first.class + assert_equal Mom::SlotMove, @stats.first.class assert_equal :receiver, @stats[0].left[2] end def test_receiver diff --git a/test/vool/to_mom/test_assign.rb b/test/vool/to_mom/test_assign.rb index 17fc93f1..b8ba2fc6 100644 --- a/test/vool/to_mom/test_assign.rb +++ b/test/vool/to_mom/test_assign.rb @@ -11,7 +11,7 @@ module Vool end def test_class_compiles - assert_equal Mom::SlotConstant , @first.class , @stats + assert_equal Mom::SlotMove , @first.class , @stats end def test_slot_is_set assert @first.left @@ -44,7 +44,7 @@ module Vool end def test_class_compiles - assert_equal Mom::SlotConstant , @first.class , @stats + assert_equal Mom::SlotMove , @first.class , @stats end def test_slot_is_set assert @first.left diff --git a/test/vool/to_mom/test_if_condition.rb b/test/vool/to_mom/test_if_condition.rb index a5f4a5a8..66e06d25 100644 --- a/test/vool/to_mom/test_if_condition.rb +++ b/test/vool/to_mom/test_if_condition.rb @@ -21,7 +21,7 @@ module Vool assert_equal Mom::SlotDefinition , @first.condition.condition.class , @stats end def test_hoisetd - assert_equal Mom::SlotConstant , @first.hoisted.class + assert_equal Mom::SlotMove , @first.hoisted.class end end end diff --git a/test/vool/to_mom/test_local.rb b/test/vool/to_mom/test_local.rb index 8e4da0d5..4678b37c 100644 --- a/test/vool/to_mom/test_local.rb +++ b/test/vool/to_mom/test_local.rb @@ -14,7 +14,7 @@ module Vool assert Array != @stats.class , @stats end def test_class_compiles - assert_equal Mom::SlotConstant , @first.class , @stats + assert_equal Mom::SlotMove , @first.class , @stats end def test_slot_is_set assert @first.left diff --git a/test/vool/to_mom/test_while_condition.rb b/test/vool/to_mom/test_while_condition.rb index efeae75b..aded5477 100644 --- a/test/vool/to_mom/test_while_condition.rb +++ b/test/vool/to_mom/test_while_condition.rb @@ -21,7 +21,7 @@ module Vool assert_equal Mom::SlotDefinition , @first.condition.condition.class , @stats end def test_hoisetd - assert_equal Mom::SlotConstant , @first.hoisted.class + assert_equal Mom::SlotMove , @first.hoisted.class end end end