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.object_layout.variable_index(field_name)
      raise "field access, but no such field:#{field_name} for class #{clazz.name}" unless index
      value = use_reg(clazz.object_layout.type_at(index))

      add_code Register.get_slot(statement , receiver , index, value)

      value
    end

    def on_receiver expression
      process expression.first
    end
  end
end