| Index: src/objects.cc
|
| diff --git a/src/objects.cc b/src/objects.cc
|
| index 351fba81455d011fe3fe7df20b8672ba8395ec25..3f9a9ca1f7a4b164d905f17a3f2c5cba8c644ef4 100644
|
| --- a/src/objects.cc
|
| +++ b/src/objects.cc
|
| @@ -17,8 +17,6 @@
|
| #include "src/date.h"
|
| #include "src/elements.h"
|
| #include "src/execution.h"
|
| -#include "src/field-index.h"
|
| -#include "src/field-index-inl.h"
|
| #include "src/full-codegen.h"
|
| #include "src/hydrogen.h"
|
| #include "src/isolate-inl.h"
|
| @@ -849,7 +847,8 @@ MaybeHandle<Object> Object::GetProperty(Handle<Object> object,
|
| }
|
| case FIELD:
|
| value = JSObject::FastPropertyAt(handle(result->holder(), isolate),
|
| - result->representation(), FieldIndex::ForLookupResult(result));
|
| + result->representation(),
|
| + result->GetFieldIndex().field_index());
|
| break;
|
| case CONSTANT:
|
| return handle(result->GetConstant(), isolate);
|
| @@ -2281,7 +2280,7 @@ void JSObject::MigrateToMap(Handle<JSObject> object, Handle<Map> new_map) {
|
| old_details.type() == FIELD);
|
| Object* raw_value = old_details.type() == CONSTANT
|
| ? old_descriptors->GetValue(i)
|
| - : object->RawFastPropertyAt(FieldIndex::ForDescriptor(*old_map, i));
|
| + : object->RawFastPropertyAt(old_descriptors->GetFieldIndex(i));
|
| Handle<Object> value(raw_value, isolate);
|
| if (!old_details.representation().IsDouble() &&
|
| details.representation().IsDouble()) {
|
| @@ -2317,8 +2316,7 @@ void JSObject::MigrateToMap(Handle<JSObject> object, Handle<Map> new_map) {
|
| // avoid overwriting |one_pointer_filler_map|.
|
| int limit = Min(inobject, number_of_fields);
|
| for (int i = 0; i < limit; i++) {
|
| - FieldIndex index = FieldIndex::ForPropertyIndex(*new_map, i);
|
| - object->FastPropertyAtPut(index, array->get(external + i));
|
| + object->FastPropertyAtPut(i, array->get(external + i));
|
| }
|
|
|
| // Create filler object past the new instance size.
|
| @@ -3517,7 +3515,7 @@ void JSObject::LookupOwnRealNamedProperty(Handle<Name> name,
|
| // occur as fields.
|
| if (result->IsField() &&
|
| result->IsReadOnly() &&
|
| - RawFastPropertyAt(result->GetFieldIndex())->IsTheHole()) {
|
| + RawFastPropertyAt(result->GetFieldIndex().field_index())->IsTheHole()) {
|
| result->DisallowCaching();
|
| }
|
| return;
|
| @@ -4033,14 +4031,14 @@ void JSObject::WriteToField(int descriptor, Object* value) {
|
|
|
| ASSERT(details.type() == FIELD);
|
|
|
| - FieldIndex index = FieldIndex::ForDescriptor(map(), descriptor);
|
| + int field_index = desc->GetFieldIndex(descriptor);
|
| if (details.representation().IsDouble()) {
|
| // Nothing more to be done.
|
| if (value->IsUninitialized()) return;
|
| - HeapNumber* box = HeapNumber::cast(RawFastPropertyAt(index));
|
| + HeapNumber* box = HeapNumber::cast(RawFastPropertyAt(field_index));
|
| box->set_value(value->Number());
|
| } else {
|
| - FastPropertyAtPut(index, value);
|
| + FastPropertyAtPut(field_index, value);
|
| }
|
| }
|
|
|
| @@ -4729,9 +4727,8 @@ void JSObject::NormalizeProperties(Handle<JSObject> object,
|
| }
|
| case FIELD: {
|
| Handle<Name> key(descs->GetKey(i));
|
| - FieldIndex index = FieldIndex::ForDescriptor(*map, i);
|
| Handle<Object> value(
|
| - object->RawFastPropertyAt(index), isolate);
|
| + object->RawFastPropertyAt(descs->GetFieldIndex(i)), isolate);
|
| PropertyDetails d =
|
| PropertyDetails(details.attributes(), NORMAL, i + 1);
|
| dictionary = NameDictionary::Add(dictionary, key, value, d);
|
| @@ -5238,9 +5235,8 @@ Object* JSObject::GetHiddenPropertiesHashTable() {
|
| ASSERT(descriptors->GetType(sorted_index) == FIELD);
|
| ASSERT(descriptors->GetDetails(sorted_index).representation().
|
| IsCompatibleForLoad(Representation::Tagged()));
|
| - FieldIndex index = FieldIndex::ForDescriptor(this->map(),
|
| - sorted_index);
|
| - return this->RawFastPropertyAt(index);
|
| + return this->RawFastPropertyAt(
|
| + descriptors->GetFieldIndex(sorted_index));
|
| } else {
|
| return GetHeap()->undefined_value();
|
| }
|
| @@ -5920,7 +5916,7 @@ void JSObject::SetObserved(Handle<JSObject> object) {
|
|
|
| Handle<Object> JSObject::FastPropertyAt(Handle<JSObject> object,
|
| Representation representation,
|
| - FieldIndex index) {
|
| + int index) {
|
| Isolate* isolate = object->GetIsolate();
|
| Handle<Object> raw_value(object->RawFastPropertyAt(index), isolate);
|
| return Object::NewStorageFor(isolate, raw_value, representation);
|
| @@ -6011,7 +6007,7 @@ MaybeHandle<JSObject> JSObjectWalkVisitor<ContextObject>::StructureWalk(
|
| for (int i = 0; i < limit; i++) {
|
| PropertyDetails details = descriptors->GetDetails(i);
|
| if (details.type() != FIELD) continue;
|
| - FieldIndex index = FieldIndex::ForDescriptor(copy->map(), i);
|
| + int index = descriptors->GetFieldIndex(i);
|
| Handle<Object> value(object->RawFastPropertyAt(index), isolate);
|
| if (value->IsJSObject()) {
|
| ASSIGN_RETURN_ON_EXCEPTION(
|
| @@ -6178,7 +6174,7 @@ Handle<Object> JSObject::GetDataProperty(Handle<JSObject> object,
|
| case FIELD:
|
| result = FastPropertyAt(Handle<JSObject>(lookup.holder(), isolate),
|
| lookup.representation(),
|
| - lookup.GetFieldIndex());
|
| + lookup.GetFieldIndex().field_index());
|
| break;
|
| case CONSTANT:
|
| result = Handle<Object>(lookup.GetConstant(), isolate);
|
| @@ -6412,9 +6408,15 @@ static Handle<FixedArray> GetEnumPropertyKeys(Handle<JSObject> object,
|
| if (details.type() != FIELD) {
|
| indices = Handle<FixedArray>();
|
| } else {
|
| - FieldIndex field_index = FieldIndex::ForDescriptor(*map, i);
|
| - int load_by_field_index = field_index.GetLoadByFieldIndex();
|
| - indices->set(index, Smi::FromInt(load_by_field_index));
|
| + int field_index = descs->GetFieldIndex(i);
|
| + if (field_index >= map->inobject_properties()) {
|
| + field_index = -(field_index - map->inobject_properties() + 1);
|
| + }
|
| + field_index = field_index << 1;
|
| + if (details.representation().IsDouble()) {
|
| + field_index |= 1;
|
| + }
|
| + indices->set(index, Smi::FromInt(field_index));
|
| }
|
| }
|
| index++;
|
| @@ -7118,8 +7120,7 @@ Object* JSObject::SlowReverseLookup(Object* value) {
|
| DescriptorArray* descs = map()->instance_descriptors();
|
| for (int i = 0; i < number_of_own_descriptors; i++) {
|
| if (descs->GetType(i) == FIELD) {
|
| - Object* property =
|
| - RawFastPropertyAt(FieldIndex::ForDescriptor(map(), i));
|
| + Object* property = RawFastPropertyAt(descs->GetFieldIndex(i));
|
| if (descs->GetDetails(i).representation().IsDouble()) {
|
| ASSERT(property->IsHeapNumber());
|
| if (value->IsNumber() && property->Number() == value->Number()) {
|
|
|