rubyx/test/support/compiling.rb
Torsten Rüger 5a43cbff15 Fixing tests for implicit return
previous commit affected rather many test, as the implicit returns add extra instructions
Also added some explicit returns, so as not to test the return logic too much. return (ie return nl) is a knonwn 3 risc operation.
2019-08-17 23:29:42 +03:00

80 lines
2.1 KiB
Ruby

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