Splitting NameExpression into three, Known,Local,Argument
The decision which to use can be made higher up, in ruby, and so it should.
This commit is contained in:
@ -14,7 +14,7 @@ module Melon
|
||||
def on_ivasgn(statement)
|
||||
name , value = *statement
|
||||
w = Vm::Tree::Assignment.new()
|
||||
w.name = Vm::Tree::NameExpression.new( name[1..-1].to_sym)
|
||||
w.name = Vm::Tree::InstanceName.new( name[1..-1].to_sym)
|
||||
w.value = process(value)
|
||||
w
|
||||
end
|
||||
@ -22,8 +22,8 @@ module Melon
|
||||
def on_ivar( var )
|
||||
name = var.children.first
|
||||
w = Vm::Tree::FieldAccess.new()
|
||||
w.receiver = Vm::Tree::NameExpression.new(:self)
|
||||
w.field = Vm::Tree::NameExpression.new( name[1..-1].to_sym)
|
||||
w.receiver = Vm::Tree::KnownName.new(:self)
|
||||
w.field = Vm::Tree::InstanceName.new( name[1..-1].to_sym)
|
||||
w
|
||||
end
|
||||
|
||||
@ -31,12 +31,20 @@ module Melon
|
||||
receiver , name , args = *statement
|
||||
w = Vm::Tree::CallSite.new()
|
||||
puts "receiver #{statement}"
|
||||
w.name = process(receiver)
|
||||
w.name = name
|
||||
w.arguments = process(args)
|
||||
w.receiver = nil
|
||||
w.receiver = process(receiver)
|
||||
w
|
||||
end
|
||||
|
||||
def on_lvar(statement)
|
||||
name = statement.children.first.to_sym
|
||||
if(@ruby_method.args_type.variable_index(name))
|
||||
return Vm::Tree::ArgumentName.new(name)
|
||||
end
|
||||
raise "Not found #{name}"
|
||||
end
|
||||
|
||||
def on_str( string )
|
||||
Vm::Tree::StringExpression.new(string.children.first)
|
||||
end
|
||||
|
Reference in New Issue
Block a user