Torsten Rüger
4bf23defc8
preloading, something akin to builtin, loads some very small predefined (macro) methods for the tests to work (ie call)
81 lines
2.2 KiB
Ruby
81 lines
2.2 KiB
Ruby
|
|
module ScopeHelper
|
|
|
|
def in_Test(statements)
|
|
"class Test ; #{statements} ; end"
|
|
end
|
|
|
|
def as_test_main(statements)
|
|
in_Test("def main(arg) ; #{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_main_block( block_input = "return 5", method_input = "main_local = 5")
|
|
as_main("#{method_input} ; self.main{|val| #{block_input}}")
|
|
end
|
|
|
|
end
|
|
module VoolCompile
|
|
include ScopeHelper
|
|
include Mom
|
|
include Preloader
|
|
|
|
def compile_main( input , preload = nil)
|
|
input = get_preload(preload) + as_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.find{|comp| comp.callable.name == :main}
|
|
assert compiler.is_a?(Mom::MethodCompiler)
|
|
assert_equal Mom::MethodCompiler , compiler.class
|
|
compiler
|
|
end
|
|
def compile_main_block( block_input , method_input = "main_local = 5" , preload = nil)
|
|
source = get_preload(preload) + as_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
|