getting the passes back and starting on send

This commit is contained in:
Torsten Ruger
2014-08-21 17:46:12 +03:00
parent b5792c155c
commit 2260c680b2
6 changed files with 53 additions and 17 deletions

View File

@ -5,7 +5,7 @@ module Ast
class IntegerExpression < Expression
# attr_reader :value
def compile method , message
to = Virtual::Return.new(Integer)
to = Virtual::Return.new(Virtual::Integer)
method.add_code Virtual::Set.new( to , Virtual::IntegerConstant.new(value))
to
end
@ -41,7 +41,7 @@ module Ast
message.compile_get(method , name )
else
raise "Unimplemented"
message.compile_send( method , name , Virtual::Self.new( Virtual::Mystery.new ) )
message.compile_send( method , name , Virtual::Self.new( Virtual::Mystery ) )
end
end
end
@ -99,7 +99,7 @@ module Ast
class VariableExpression < NameExpression
def compile method , message
method.add_code Virtual::ObjectGet.new(name)
Virtual::Return.new( Virtual::Mystery.new )
Virtual::Return.new( Virtual::Mystery )
end
end
end

View File

@ -6,7 +6,8 @@ module Ast
def compile method , message
me = receiver.compile( method, message )
method.add_code Virtual::Set.new(Virtual::NewSelf.new, me)
method.add_code Virtual::Set.new(Virtual::NewSelf.new(me.type), me)
method.add_code Virtual::Set.new(Virtual::NewName.new(), name)
args.each_with_index do |arg , i|
val = arg.compile( method, message) #compile in the running method, ie before passing control
method.add_code Virtual::Set.new(Virtual::NewMessageSlot.new(i ,val.type ) , val )