diff --git a/lib/vm/parfait/class.rb b/lib/vm/parfait/class.rb index fd06bd97..d6dfcd34 100644 --- a/lib/vm/parfait/class.rb +++ b/lib/vm/parfait/class.rb @@ -42,7 +42,12 @@ module Parfait def get_method(name) @methods[name] end - + + # adding an instance changes the instance_type to include that variable + def add_instance_variable( name , type) + @instance_type = @instance_type.add_instance_variable( name , type ) + end + # setting the type generates all methods for this type # (or will do, once we store the methods code to do that) def set_instance_type( type ) diff --git a/test/vm/parfait/test_class.rb b/test/vm/parfait/test_class.rb index 4e27ead5..80b2a654 100644 --- a/test/vm/parfait/test_class.rb +++ b/test/vm/parfait/test_class.rb @@ -34,4 +34,15 @@ class TestClass < MiniTest::Test def test_add_method assert_raises{ @try.add_instance_method(nil)} end + def test_add_instance_variable_changes_type + before = @space.get_class.instance_type + @space.get_class.add_instance_variable(:counter , :Integer) + assert before != @space.get_class.instance_type + end + def test_add_instance_variable_changes_type_hash + before = @space.get_class.instance_type.hash + @space.get_class.add_instance_variable(:counter , :Integer) + assert before != @space.get_class.instance_type.hash + end + end