expanded the send a bit
This commit is contained in:
parent
ce3505710a
commit
9a197ff7c1
@ -2,18 +2,35 @@
|
||||
# instead it is parsed by salama to define part of the program that runs
|
||||
|
||||
class Message
|
||||
|
||||
def get_type_for name
|
||||
index = @layout.get_index name
|
||||
get_at index
|
||||
end
|
||||
|
||||
def send
|
||||
typ = get_type_for( :receiver )
|
||||
# TODO: this will obviously be recoded as case, once that is done :-)
|
||||
# depending on value type get method
|
||||
if( typ == Integer )
|
||||
method = Integer.get_method @method_name
|
||||
else
|
||||
if( typ != ObjectReference )
|
||||
raise "unimplemented case"
|
||||
else
|
||||
method = @receiver.get_singeton_method @method_name
|
||||
# Find the method for the given object (receiver) according to ruby dispatch rules:
|
||||
# - see if the receiver object has a (singleton) method by the name
|
||||
# - get receivers class and look for instance methods of the name
|
||||
# - go up inheritance tree
|
||||
# - start over with method_missing instead
|
||||
# -> guaranteed to end at object.method_missing
|
||||
method = @receiver.get_singeton_method @method_name
|
||||
unless method
|
||||
cl = @receiver.layout.object_class
|
||||
method = cl.get_instance_or_super_method @method_name
|
||||
end
|
||||
end
|
||||
end
|
||||
unless method
|
||||
message = Message.new( @receiver , :method_missing , [@method_name] + @args)
|
||||
message.send
|
||||
|
@ -3,4 +3,7 @@
|
||||
|
||||
class Object
|
||||
|
||||
def get_class
|
||||
@layout.get_class
|
||||
end
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user