remove unknown type

This commit is contained in:
Torsten Ruger
2015-09-23 18:35:37 +03:00
parent 4b613fb632
commit 9fe01c7b31
15 changed files with 49 additions and 38 deletions

View File

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

View File

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

View File

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

View File

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