module Vm
  module FieldAccess

    def on_FieldAccess statement
#      receiver_ast , field_ast = *statement
      receiver = process(statement.receiver)

      type = receiver.type
      if(type.is_a?(Symbol))
        type = Parfait.object_space.get_class_by_name(type).instance_type
      end
      field_name = statement.field.name

      index = type.variable_index(field_name)
      raise "no such field:#{field_name} for class #{type.inspect}" unless index
      value = use_reg(type.type_at(index))

      add_slot_to_reg(statement , receiver , index, value)

      value
    end

    def on_receiver expression
      process expression.first
    end
  end
end