module ScopeHelper def in_Test(statements) "class Test ; #{statements} ; end" end def in_Space(statements) "class Space ; #{statements} ; end" end def as_main(statements) in_Space("def main(arg) ; #{statements}; end") end def as_test_main( statements ) in_Test("def main(arg) ; #{statements}; end") end def as_test_main_block( block_input = "return 5", method_input = "main_local = 5") as_test_main("#{method_input} ; self.main{|val| #{block_input}}") end end module VoolCompile include ScopeHelper include Mom def compile_first_method( input ) input = as_test_main( input ) collection = RubyX::RubyXCompiler.new(RubyX.default_test_options).ruby_to_mom(input) assert collection.is_a?(Mom::MomCollection) , collection.class.name compiler = collection.compilers.first assert compiler.is_a?(Mom::MethodCompiler) assert_equal Mom::MethodCompiler , compiler.class compiler end def compile_first_block( block_input , method_input = "main_local = 5") source = as_test_main("#{method_input} ; self.main{|val| #{block_input}}") mom_col = RubyX::RubyXCompiler.new(RubyX.default_test_options).ruby_to_mom( source ) compiler = mom_col.method_compilers.find{|c| c.get_method.name.to_s.start_with?("main") } block = compiler.block_compilers.first assert block block.mom_instructions.next end def check_array( should , is ) index = 0 test = is while(test) # 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 =[] while(is) res << is.class.name.split("::").last is = is.next end ret = "" res.to_s.split(",").each_slice(5).each do |line| ret += " " + line.join(",") + " ,\n" end ret.gsub('"' , '') end end module MomCompile include ScopeHelper def compile_mom(input) RubyX::RubyXCompiler.new(RubyX.default_test_options).ruby_to_mom(input) end end