diff --git a/lib/ast/basic_expressions.rb b/lib/ast/basic_expressions.rb index 75d4978e..84b4fee4 100644 --- a/lib/ast/basic_expressions.rb +++ b/lib/ast/basic_expressions.rb @@ -49,7 +49,7 @@ module Ast class ModuleName < NameExpression def compile method , message - clazz = ::Virtual::Object.space.get_or_create_class name + clazz = ::Virtual::BootSpace.space.get_or_create_class name raise "uups #{clazz}.#{name}" unless clazz #class qualifier, means call from metaclass #clazz = clazz.meta_class @@ -61,7 +61,7 @@ module Ast # attr_reader :string def compile method , message value = Virtual::StringConstant.new(string) - ::Virtual::Object.space.add_object value + ::Virtual::BootSpace.space.add_object value value end end diff --git a/lib/ast/function_expression.rb b/lib/ast/function_expression.rb index 40fc605c..78666771 100644 --- a/lib/ast/function_expression.rb +++ b/lib/ast/function_expression.rb @@ -9,7 +9,7 @@ module Ast r = receiver ? receiver.compile(method,message) : Virtual::Self.new() new_method = Virtual::MethodDefinition.new(name , args , r ) new_method.class_name = r.is_a?(BootClass) ? r.name : method.class_name - clazz = Virtual::Object.space.get_or_create_class(new_method.class_name) + clazz = Virtual::BootSpace.space.get_or_create_class(new_method.class_name) clazz.add_instance_method new_method #frame = frame.new_frame diff --git a/lib/ast/module_expression.rb b/lib/ast/module_expression.rb index c1835414..9d164b4c 100644 --- a/lib/ast/module_expression.rb +++ b/lib/ast/module_expression.rb @@ -20,7 +20,7 @@ module Ast class ClassExpression < ModuleExpression def compile method , message - clazz = ::Virtual::Object.space.get_or_create_class name + clazz = ::Virtual::BootSpace.space.get_or_create_class name puts "Created class #{clazz.name.inspect}" # context.current_class = clazz expressions.each do |expression| diff --git a/lib/register/call_implementation.rb b/lib/register/call_implementation.rb index 8d2f879e..bd1c937d 100644 --- a/lib/register/call_implementation.rb +++ b/lib/register/call_implementation.rb @@ -18,5 +18,5 @@ module Register end end end - Virtual::Object.space.add_pass_after CallImplementation , SetImplementation + Virtual::BootSpace.space.add_pass_after CallImplementation , SetImplementation end diff --git a/lib/register/get_implementation.rb b/lib/register/get_implementation.rb index fdea7f3b..069d94a1 100644 --- a/lib/register/get_implementation.rb +++ b/lib/register/get_implementation.rb @@ -11,5 +11,5 @@ module Register end end end - Virtual::Object.space.add_pass_after GetImplementation, Virtual::SendImplementation + Virtual::BootSpace.space.add_pass_after GetImplementation, Virtual::SendImplementation end diff --git a/lib/register/set_implementation.rb b/lib/register/set_implementation.rb index 5750fc59..0e9d71e2 100644 --- a/lib/register/set_implementation.rb +++ b/lib/register/set_implementation.rb @@ -17,5 +17,5 @@ module Register end end end - Virtual::Object.space.add_pass_after SetImplementation , GetImplementation + Virtual::BootSpace.space.add_pass_after SetImplementation , GetImplementation end diff --git a/lib/virtual/boot_space.rb b/lib/virtual/boot_space.rb index 34ed442b..403c7088 100644 --- a/lib/virtual/boot_space.rb +++ b/lib/virtual/boot_space.rb @@ -39,6 +39,14 @@ module Virtual end end + def self.space + if defined? @@space + @@space + else + @@space = BootSpace.new + end + end + # Passes are initiated empty and added to by anyone who want (basically) # Even linking and assembly are passes and so there are quite a few system passes neccesary to result in a # working binary. Other than that, this is intentionally quite flexible diff --git a/lib/virtual/constants.rb b/lib/virtual/constants.rb index 6b91bc01..1f1dc5fe 100644 --- a/lib/virtual/constants.rb +++ b/lib/virtual/constants.rb @@ -44,7 +44,7 @@ module Virtual class_for(MoveInstruction).new(value , self , :opcode => :mov) end def clazz - Object.space.get_or_create_class(:String) + BootSpace.space.get_or_create_class(:String) end end diff --git a/lib/virtual/object.rb b/lib/virtual/object.rb index 60e67301..07d21bb2 100644 --- a/lib/virtual/object.rb +++ b/lib/virtual/object.rb @@ -28,13 +28,6 @@ module Virtual Sof::Writer.write(self) end - def self.space - if defined? @@space - @@space - else - @@space = BootSpace.new - end - end end class Layout < Object diff --git a/test/virtual/hello.rb b/test/virtual/hello.rb index 4559bc2e..f416784d 100644 --- a/test/virtual/hello.rb +++ b/test/virtual/hello.rb @@ -7,9 +7,9 @@ class HelloTest < MiniTest::Test machine = Virtual::Machine.boot expressions = machine.compile_main @string_input puts "" - Virtual::Object.space.run_passes + Virtual::BootSpace.space.run_passes puts Sof::Writer.write(expressions) -# puts Sof::Writer.write(Virtual::Object.space) +# puts Sof::Writer.write(Virtual::BootSpace.space) end def qtest_simplest_function