| Index: src/property.h
 | 
| diff --git a/src/property.h b/src/property.h
 | 
| index ebb43430a04b6920f8aec27ae35f9f64f4cb470a..093285c94e77c7c5df7b2eeed336abd038652ede 100644
 | 
| --- a/src/property.h
 | 
| +++ b/src/property.h
 | 
| @@ -7,8 +7,6 @@
 | 
|  
 | 
|  #include "src/isolate.h"
 | 
|  #include "src/factory.h"
 | 
| -#include "src/field-index.h"
 | 
| -#include "src/field-index-inl.h"
 | 
|  #include "src/types.h"
 | 
|  
 | 
|  namespace v8 {
 | 
| @@ -110,6 +108,56 @@ class CallbacksDescriptor V8_FINAL : public Descriptor {
 | 
|  };
 | 
|  
 | 
|  
 | 
| +// Holds a property index value distinguishing if it is a field index or an
 | 
| +// index inside the object header.
 | 
| +class PropertyIndex V8_FINAL {
 | 
| + public:
 | 
| +  static PropertyIndex NewFieldIndex(int index) {
 | 
| +    return PropertyIndex(index, false);
 | 
| +  }
 | 
| +  static PropertyIndex NewHeaderIndex(int index) {
 | 
| +    return PropertyIndex(index, true);
 | 
| +  }
 | 
| +
 | 
| +  bool is_field_index() { return (index_ & kHeaderIndexBit) == 0; }
 | 
| +  bool is_header_index() { return (index_ & kHeaderIndexBit) != 0; }
 | 
| +
 | 
| +  int field_index() {
 | 
| +    ASSERT(is_field_index());
 | 
| +    return value();
 | 
| +  }
 | 
| +  int header_index() {
 | 
| +    ASSERT(is_header_index());
 | 
| +    return value();
 | 
| +  }
 | 
| +
 | 
| +  bool is_inobject(Handle<JSObject> holder) {
 | 
| +    if (is_header_index()) return true;
 | 
| +    return field_index() < holder->map()->inobject_properties();
 | 
| +  }
 | 
| +
 | 
| +  int translate(Handle<JSObject> holder) {
 | 
| +    if (is_header_index()) return header_index();
 | 
| +    int index = field_index() - holder->map()->inobject_properties();
 | 
| +    if (index >= 0) return index;
 | 
| +    return index + holder->map()->instance_size() / kPointerSize;
 | 
| +  }
 | 
| +
 | 
| + private:
 | 
| +  static const int kHeaderIndexBit = 1 << 31;
 | 
| +  static const int kIndexMask = ~kHeaderIndexBit;
 | 
| +
 | 
| +  int value() { return index_ & kIndexMask; }
 | 
| +
 | 
| +  PropertyIndex(int index, bool is_header_based)
 | 
| +      : index_(index | (is_header_based ? kHeaderIndexBit : 0)) {
 | 
| +    ASSERT(index <= kIndexMask);
 | 
| +  }
 | 
| +
 | 
| +  int index_;
 | 
| +};
 | 
| +
 | 
| +
 | 
|  class LookupResult V8_FINAL BASE_EMBEDDED {
 | 
|   public:
 | 
|    explicit LookupResult(Isolate* isolate)
 | 
| @@ -326,7 +374,7 @@ class LookupResult V8_FINAL BASE_EMBEDDED {
 | 
|        case DICTIONARY_TYPE:
 | 
|          switch (type()) {
 | 
|            case FIELD:
 | 
| -            return holder()->RawFastPropertyAt(GetFieldIndex());
 | 
| +            return holder()->RawFastPropertyAt(GetFieldIndex().field_index());
 | 
|            case NORMAL: {
 | 
|              Object* value = holder()->property_dictionary()->ValueAt(
 | 
|                  GetDictionaryEntry());
 | 
| @@ -368,10 +416,10 @@ class LookupResult V8_FINAL BASE_EMBEDDED {
 | 
|      return number_;
 | 
|    }
 | 
|  
 | 
| -  FieldIndex GetFieldIndex() const {
 | 
| +  PropertyIndex GetFieldIndex() const {
 | 
|      ASSERT(lookup_type_ == DESCRIPTOR_TYPE ||
 | 
|             lookup_type_ == TRANSITION_TYPE);
 | 
| -    return FieldIndex::ForLookupResult(this);
 | 
| +    return PropertyIndex::NewFieldIndex(GetFieldIndexFromMap(holder()->map()));
 | 
|    }
 | 
|  
 | 
|    int GetLocalFieldIndexFromMap(Map* map) const {
 | 
| 
 |