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:
parent
6366ede8ee
commit
f03f445652
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user