remove unknown type
This commit is contained in:
@ -8,13 +8,13 @@ module Bosl
|
||||
if receiver
|
||||
me = process( receiver.to_a.first )
|
||||
else
|
||||
me = Virtual::Self.new
|
||||
me = Virtual::Self.new :int
|
||||
end
|
||||
## need two step process, compile and save to frame
|
||||
# then move from frame to new message
|
||||
method.source.add_code Virtual::NewMessage.new
|
||||
method.source.add_code Virtual::Set.new( me , Virtual::NewSelf.new(me.type))
|
||||
method.source.add_code Virtual::Set.new( name.to_sym , Virtual::NewMessageName.new())
|
||||
method.source.add_code Virtual::Set.new( name.to_sym , Virtual::NewMessageName.new(:int))
|
||||
compiled_args = []
|
||||
arguments.to_a.each_with_index do |arg , i|
|
||||
#compile in the running method, ie before passing control
|
||||
|
@ -24,10 +24,10 @@ module Bosl
|
||||
end
|
||||
end
|
||||
else
|
||||
r = Virtual::Self.new()
|
||||
r = Virtual::Self.new(:int)
|
||||
class_name = method.for_class.name
|
||||
end
|
||||
new_method = Virtual::MethodSource.create_method(class_name, name , args )
|
||||
new_method = Virtual::MethodSource.create_method(class_name, return_type, name , args )
|
||||
new_method.source.receiver = r
|
||||
new_method.for_class.add_instance_method new_method
|
||||
|
||||
|
@ -9,12 +9,12 @@ module Bosl
|
||||
name = expression.to_a.first
|
||||
return Virtual::Self.new( Virtual::Reference.new(method.for_class)) if name == :self
|
||||
# either an argument, so it's stored in message
|
||||
ret = Virtual::Return.new
|
||||
ret = Virtual::Return.new :int
|
||||
if( index = method.has_arg(name))
|
||||
method.source.add_code Virtual::Set.new( Virtual::ArgSlot.new(index ) , ret)
|
||||
method.source.add_code Virtual::Set.new( Virtual::ArgSlot.new(:int,index ) , ret)
|
||||
else # or a local so it is in the frame
|
||||
index = method.ensure_local( name )
|
||||
method.source.add_code Virtual::Set.new(Virtual::FrameSlot.new(index ) , ret )
|
||||
method.source.add_code Virtual::Set.new(Virtual::FrameSlot.new(:int,index ) , ret )
|
||||
end
|
||||
return ret
|
||||
end
|
||||
|
@ -3,7 +3,7 @@ module Bosl
|
||||
# operator attr_reader :operator, :left, :right
|
||||
def on_operator expression
|
||||
operator , left , right = *expression
|
||||
Virtual::Return.new()
|
||||
Virtual::Return.new(:int)
|
||||
end
|
||||
|
||||
def on_assign expression
|
||||
@ -11,7 +11,7 @@ module Bosl
|
||||
name = name.to_a.first
|
||||
v = process(value)
|
||||
index = method.ensure_local( name )
|
||||
method.source.add_code Virtual::Set.new(Virtual::FrameSlot.new(index ) , v )
|
||||
method.source.add_code Virtual::Set.new(Virtual::FrameSlot.new(:int,index ) , v )
|
||||
end
|
||||
|
||||
end
|
||||
|
Reference in New Issue
Block a user