rubyx/lib/soml/compiler/field_access.rb
Torsten Ruger a8b815117f rename object_type to instance_type
for better distinction that it is not every object
but only instances of the class
2016-02-25 12:16:13 -08:00

27 lines
664 B
Ruby

module Soml
Compiler.class_eval do
def on_field_access statement
receiver_ast , field_ast = *statement
receiver = process(receiver_ast)
clazz = Register.machine.space.get_class_by_name receiver.type
field_name = field_ast.first_from(:name)
index = clazz.instance_type.variable_index(field_name)
raise "field access, but no such field:#{field_name} for class #{clazz.name}" unless index
value = use_reg(clazz.instance_type.type_at(index))
add_code Register.get_slot(statement , receiver , index, value)
value
end
def on_receiver expression
process expression.first
end
end
end