working on if

This commit is contained in:
Torsten Ruger
2014-07-16 13:20:47 +03:00
parent 3a152c1295
commit 55cb6bd2d6
7 changed files with 42 additions and 14 deletions

View File

@ -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

View File

@ -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}"

View File

@ -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