passing values to macros

conceptually still a bit open, leaving the hack in for now
passing values to the macro instead of sol instances
This commit is contained in:
Torsten 2020-03-17 11:01:37 +02:00
parent 6366ede8ee
commit f03f445652
2 changed files with 20 additions and 5 deletions

View File

@ -9,7 +9,22 @@ module Sol
def to_slot(compiler)
parts = name.to_s.split("_")
class_name = "SlotMachine::#{parts.collect{|s| s.capitalize}.join}"
eval(class_name).new( self , *arguments)
# Hmm, slightly open issue how to pass args from sol to macro
# WIP, hack for comparison
args = arguments.collect {|arg|
case arg
when Sol::SymbolConstant
arg.value
when Sol::IntegerConstant
arg.value
when Sol::LocalVariable
arg.name
else
puts "unhandled #{arg}:#{arg.class}"
arg
end
}
eval(class_name).new( self , *args)
end
# When used as right hand side, this tells what data to move to get the result into

View File

@ -26,12 +26,12 @@ module Sol
assert_equal SlotMachine::PlusEquals , @ins.class , @ins
end
def test_arg1
assert_equal Sol::LocalVariable , @ins.a.class
assert_equal :arg , @ins.a.name
assert_equal Symbol , @ins.a.class
assert_equal :arg , @ins.a
end
def test_arg2
assert_equal Sol::IntegerConstant , @ins.b.class
assert_equal 1 , @ins.b.value
assert_equal Integer , @ins.b.class
assert_equal 1 , @ins.b
end
def test_to_risc
comp = @compiler.to_risc