rubyx/lib/phisol/compiler/field_access.rb
Torsten Ruger f506f95cbf fixing basic and field access to return register
as that is the new way, drop a layer, code to registers
2015-10-13 16:42:53 +03:00

30 lines
819 B
Ruby

module Phisol
Compiler.class_eval do
def on_field_access statement
#puts statement.inspect
receiver_ast , field_ast = *statement
receiver = receiver_ast.first_from(:name)
field_name = field_ast.first_from(:name)
case receiver
when :self
index = @clazz.object_layout.variable_index(field_name)
raise "field access, but no such field:#{field_name} for class #{@clazz.name}" unless index
value = use_reg(:int) #TODO, need types in layout
move = Register.get_slot(statement, :self , index , value )
@method.source.add_code move
return value
when :message
#message Slot
raise "message not yet"
else
#arg / frame Slot
raise "frame not implemented"
end
value
end
end
end