rubyx/test/support/compiling.rb

91 lines
2.0 KiB
Ruby
Raw Normal View History

2017-04-10 15:12:15 +02:00
module CompilerHelper
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 ; #{statements}; end")
end
2017-04-13 13:14:43 +02:00
def as_test_main( statements )
2017-09-07 07:16:37 +02:00
in_Test("def main(arg) ; #{statements}; end")
end
end
module MomCompile
include CompilerHelper
def compile_first_method input
2018-03-12 12:53:16 +01:00
lst = Vool::VoolCompiler.ruby_to_vool as_test_main( input )
assert_equal Parfait::Class , lst.clazz.class , lst
2017-09-07 07:16:37 +02:00
@method = lst.clazz.get_method(:main)
2017-12-10 19:47:26 +01:00
assert_equal Parfait::VoolMethod , @method.class
2017-09-07 07:16:37 +02:00
res = lst.to_mom( nil )
#puts "#{res.class}"
res.first
end
def compile_first_method_flat(input)
compile_first_method(input).flatten
2017-04-13 13:14:43 +02:00
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
2017-12-10 19:47:26 +01:00
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
"[#{res.join(',')}]"
end
2017-04-10 15:12:15 +02:00
end
module CleanCompile
def clean_compile(clazz_name , method_name , args , statements)
compiler = Vm::MethodCompiler.create_method(clazz_name,method_name,args ).init_method
compiler.process( Vm.ast_to_code( statements ) )
end
end
class Ignored
def == other
return false unless other.class == self.class
Sof::Util.attributes(self).each do |a|
begin
left = send(a)
rescue NoMethodError
next # not using instance variables that are not defined as attr_readers for equality
end
begin
right = other.send(a)
rescue NoMethodError
return false
end
return false unless left.class == right.class
return false unless left == right
end
return true
end
end