working on if
This commit is contained in:
@ -40,6 +40,7 @@ module Virtual
|
||||
end
|
||||
|
||||
def compile_set method , name , val
|
||||
method.set_var(name,val)
|
||||
method.add FrameSet.new(name , val )
|
||||
method.get_var(name)
|
||||
end
|
||||
|
@ -40,12 +40,29 @@ module Virtual
|
||||
# variables are locals and and arguments
|
||||
# used to determine if a send must be issued
|
||||
def has_var name
|
||||
var = @args.find {|a| a == name }
|
||||
var = @locals.find {|a| a == name } unless var
|
||||
var = @tmps.find {|a| a == name } unless var
|
||||
name = name.to_sym
|
||||
var = @args.find {|a| a.name == name }
|
||||
var = @locals.find {|a| a.name == name } unless var
|
||||
var = @tmps.find {|a| a.name == name } unless var
|
||||
var
|
||||
end
|
||||
|
||||
def set_var name , var
|
||||
v = has_var name
|
||||
if( v )
|
||||
puts "resetting local #{v}"
|
||||
else
|
||||
v = Local.new(name , var)
|
||||
@locals << v
|
||||
end
|
||||
v
|
||||
end
|
||||
|
||||
def get_var name
|
||||
var = has_var name
|
||||
raise "no var #{name} in method #{self.name} , #{@locals} #{@args}" unless var
|
||||
var
|
||||
end
|
||||
alias :get_var :has_var
|
||||
|
||||
def get_tmp
|
||||
name = "__tmp__#{@tmps.length}"
|
||||
|
@ -36,7 +36,7 @@ module Virtual
|
||||
class Variable < Value
|
||||
|
||||
def initialize name , type
|
||||
@name = name
|
||||
@name = name.to_sym
|
||||
@type = type
|
||||
end
|
||||
attr_accessor :name , :type
|
||||
|
Reference in New Issue
Block a user