Torsten Rüger
56398e1127
support files were loaded different locally than travis probably time stamp, vs abc Anyway, don't rely on dir order, make requires explicit
87 lines
2.5 KiB
Ruby
87 lines
2.5 KiB
Ruby
require_relative "preloader"
|
|
|
|
module ScopeHelper
|
|
|
|
def compiler_with_main(options = {})
|
|
compiler = RubyX::RubyXCompiler.new(RubyX.default_test_options.merge(options))
|
|
compiler.ruby_to_vool( "class Space;def main(arg);return;end;end" )
|
|
compiler
|
|
end
|
|
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
|