Revision: 12944
Author: [email protected]
Date: Tue Nov 13 03:07:04 2012
Log: Allow property indexes to refer to slots inside the object header.
BUG=
Review URL: https://chromiumcodereview.appspot.com/11365221
http://code.google.com/p/v8/source/detail?r=12944
Modified:
/branches/bleeding_edge/src/arm/stub-cache-arm.cc
/branches/bleeding_edge/src/bootstrapper.cc
/branches/bleeding_edge/src/ia32/stub-cache-ia32.cc
/branches/bleeding_edge/src/ic.cc
/branches/bleeding_edge/src/json-stringifier.h
/branches/bleeding_edge/src/mips/stub-cache-mips.cc
/branches/bleeding_edge/src/objects.cc
/branches/bleeding_edge/src/property.cc
/branches/bleeding_edge/src/property.h
/branches/bleeding_edge/src/runtime.cc
/branches/bleeding_edge/src/stub-cache.cc
/branches/bleeding_edge/src/stub-cache.h
/branches/bleeding_edge/src/x64/stub-cache-x64.cc
=======================================
--- /branches/bleeding_edge/src/arm/stub-cache-arm.cc Thu Nov 8 03:56:44
2012
+++ /branches/bleeding_edge/src/arm/stub-cache-arm.cc Tue Nov 13 03:07:04
2012
@@ -327,18 +327,23 @@
Register dst,
Register src,
Handle<JSObject> holder,
- int index) {
- // Adjust for the number of properties stored in the holder.
- index -= holder->map()->inobject_properties();
- if (index < 0) {
- // Get the property straight out of the holder.
- int offset = holder->map()->instance_size() + (index * kPointerSize);
+ PropertyIndex index) {
+ if (index.is_header_index()) {
+ int offset = index.header_index() * kPointerSize;
__ ldr(dst, FieldMemOperand(src, offset));
} else {
- // Calculate the offset into the properties array.
- int offset = index * kPointerSize + FixedArray::kHeaderSize;
- __ ldr(dst, FieldMemOperand(src, JSObject::kPropertiesOffset));
- __ ldr(dst, FieldMemOperand(dst, offset));
+ // Adjust for the number of properties stored in the holder.
+ int slot = index.field_index() - holder->map()->inobject_properties();
+ if (slot < 0) {
+ // Get the property straight out of the holder.
+ int offset = holder->map()->instance_size() + (slot * kPointerSize);
+ __ ldr(dst, FieldMemOperand(src, offset));
+ } else {
+ // Calculate the offset into the properties array.
+ int offset = slot * kPointerSize + FixedArray::kHeaderSize;
+ __ ldr(dst, FieldMemOperand(src, JSObject::kPropertiesOffset));
+ __ ldr(dst, FieldMemOperand(dst, offset));
+ }
}
}
@@ -1196,7 +1201,7 @@
Register scratch1,
Register scratch2,
Register scratch3,
- int index,
+ PropertyIndex index,
Handle<String> name,
Label* miss) {
// Check that the receiver isn't a smi.
@@ -1545,7 +1550,7 @@
Handle<Code> CallStubCompiler::CompileCallField(Handle<JSObject> object,
Handle<JSObject> holder,
- int index,
+ PropertyIndex index,
Handle<String> name) {
// ----------- S t a t e -------------
// -- r2 : name
@@ -2912,7 +2917,7 @@
Handle<Code> LoadStubCompiler::CompileLoadField(Handle<JSObject> object,
Handle<JSObject> holder,
- int index,
+ PropertyIndex index,
Handle<String> name) {
// ----------- S t a t e -------------
// -- r0 : receiver
@@ -3101,7 +3106,7 @@
Handle<Code> KeyedLoadStubCompiler::CompileLoadField(Handle<String> name,
Handle<JSObject>
receiver,
Handle<JSObject>
holder,
- int index) {
+ PropertyIndex index) {
// ----------- S t a t e -------------
// -- lr : return address
// -- r0 : key
=======================================
--- /branches/bleeding_edge/src/bootstrapper.cc Fri Nov 9 02:07:54 2012
+++ /branches/bleeding_edge/src/bootstrapper.cc Tue Nov 13 03:07:04 2012
@@ -1084,11 +1084,11 @@
LookupResult lookup(isolate);
result->LocalLookup(heap->callee_symbol(), &lookup);
ASSERT(lookup.IsField());
- ASSERT(lookup.GetFieldIndex() == Heap::kArgumentsCalleeIndex);
+ ASSERT(lookup.GetFieldIndex().field_index() ==
Heap::kArgumentsCalleeIndex);
result->LocalLookup(heap->length_symbol(), &lookup);
ASSERT(lookup.IsField());
- ASSERT(lookup.GetFieldIndex() == Heap::kArgumentsLengthIndex);
+ ASSERT(lookup.GetFieldIndex().field_index() ==
Heap::kArgumentsLengthIndex);
ASSERT(result->map()->inobject_properties() >
Heap::kArgumentsCalleeIndex);
ASSERT(result->map()->inobject_properties() >
Heap::kArgumentsLengthIndex);
@@ -1186,7 +1186,7 @@
LookupResult lookup(isolate);
result->LocalLookup(heap->length_symbol(), &lookup);
ASSERT(lookup.IsField());
- ASSERT(lookup.GetFieldIndex() == Heap::kArgumentsLengthIndex);
+ ASSERT(lookup.GetFieldIndex().field_index() ==
Heap::kArgumentsLengthIndex);
ASSERT(result->map()->inobject_properties() >
Heap::kArgumentsLengthIndex);
=======================================
--- /branches/bleeding_edge/src/ia32/stub-cache-ia32.cc Thu Nov 8 03:56:44
2012
+++ /branches/bleeding_edge/src/ia32/stub-cache-ia32.cc Tue Nov 13 03:07:04
2012
@@ -376,18 +376,23 @@
Register dst,
Register src,
Handle<JSObject> holder,
- int index) {
- // Adjust for the number of properties stored in the holder.
- index -= holder->map()->inobject_properties();
- if (index < 0) {
- // Get the property straight out of the holder.
- int offset = holder->map()->instance_size() + (index * kPointerSize);
+ PropertyIndex index) {
+ if (index.is_header_index()) {
+ int offset = index.header_index() * kPointerSize;
__ mov(dst, FieldOperand(src, offset));
} else {
- // Calculate the offset into the properties array.
- int offset = index * kPointerSize + FixedArray::kHeaderSize;
- __ mov(dst, FieldOperand(src, JSObject::kPropertiesOffset));
- __ mov(dst, FieldOperand(dst, offset));
+ // Adjust for the number of properties stored in the holder.
+ int slot = index.field_index() - holder->map()->inobject_properties();
+ if (slot < 0) {
+ // Get the property straight out of the holder.
+ int offset = holder->map()->instance_size() + (slot * kPointerSize);
+ __ mov(dst, FieldOperand(src, offset));
+ } else {
+ // Calculate the offset into the properties array.
+ int offset = slot * kPointerSize + FixedArray::kHeaderSize;
+ __ mov(dst, FieldOperand(src, JSObject::kPropertiesOffset));
+ __ mov(dst, FieldOperand(dst, offset));
+ }
}
}
@@ -1036,7 +1041,7 @@
Register scratch1,
Register scratch2,
Register scratch3,
- int index,
+ PropertyIndex index,
Handle<String> name,
Label* miss) {
// Check that the receiver isn't a smi.
@@ -1423,7 +1428,7 @@
Handle<Code> CallStubCompiler::CompileCallField(Handle<JSObject> object,
Handle<JSObject> holder,
- int index,
+ PropertyIndex index,
Handle<String> name) {
// ----------- S t a t e -------------
// -- ecx : name
@@ -2956,7 +2961,7 @@
Handle<Code> LoadStubCompiler::CompileLoadField(Handle<JSObject> object,
Handle<JSObject> holder,
- int index,
+ PropertyIndex index,
Handle<String> name) {
// ----------- S t a t e -------------
// -- ecx : name
@@ -3156,7 +3161,7 @@
Handle<Code> KeyedLoadStubCompiler::CompileLoadField(Handle<String> name,
Handle<JSObject>
receiver,
Handle<JSObject>
holder,
- int index) {
+ PropertyIndex index) {
// ----------- S t a t e -------------
// -- ecx : key
// -- edx : receiver
=======================================
--- /branches/bleeding_edge/src/ic.cc Thu Nov 8 05:15:54 2012
+++ /branches/bleeding_edge/src/ic.cc Tue Nov 13 03:07:04 2012
@@ -646,7 +646,7 @@
Handle<JSObject> holder(lookup->holder());
switch (lookup->type()) {
case FIELD: {
- int index = lookup->GetFieldIndex();
+ PropertyIndex index = lookup->GetFieldIndex();
return isolate()->stub_cache()->ComputeCallField(
argc, kind_, extra_state, name, object, holder, index);
}
@@ -1467,11 +1467,9 @@
Handle<Code> code;
switch (type) {
case FIELD:
- code = isolate()->stub_cache()->ComputeStoreField(name,
- receiver,
-
lookup->GetFieldIndex(),
-
Handle<Map>::null(),
- strict_mode);
+ code = isolate()->stub_cache()->ComputeStoreField(
+ name, receiver, lookup->GetFieldIndex().field_index(),
+ Handle<Map>::null(), strict_mode);
break;
case NORMAL:
if (receiver->IsGlobalObject()) {
@@ -1981,7 +1979,7 @@
switch (type) {
case FIELD:
code = isolate()->stub_cache()->ComputeKeyedStoreField(
- name, receiver, lookup->GetFieldIndex(),
+ name, receiver, lookup->GetFieldIndex().field_index(),
Handle<Map>::null(), strict_mode);
break;
case TRANSITION: {
=======================================
--- /branches/bleeding_edge/src/json-stringifier.h Mon Nov 12 02:20:07 2012
+++ /branches/bleeding_edge/src/json-stringifier.h Tue Nov 13 03:07:04 2012
@@ -274,7 +274,8 @@
return Handle<Object>(value, isolate_);
}
case FIELD: {
- Object* value =
lookup.holder()->FastPropertyAt(lookup.GetFieldIndex());
+ Object* value = lookup.holder()->FastPropertyAt(
+ lookup.GetFieldIndex().field_index());
ASSERT(!value->IsTheHole());
return Handle<Object>(value, isolate_);
}
=======================================
--- /branches/bleeding_edge/src/mips/stub-cache-mips.cc Thu Nov 8 03:56:44
2012
+++ /branches/bleeding_edge/src/mips/stub-cache-mips.cc Tue Nov 13 03:07:04
2012
@@ -314,18 +314,23 @@
Register dst,
Register src,
Handle<JSObject> holder,
- int index) {
- // Adjust for the number of properties stored in the holder.
- index -= holder->map()->inobject_properties();
- if (index < 0) {
- // Get the property straight out of the holder.
- int offset = holder->map()->instance_size() + (index * kPointerSize);
+ PropertyIndex index) {
+ if (index.is_header_index()) {
+ int offset = index.header_index() * kPointerSize;
__ lw(dst, FieldMemOperand(src, offset));
} else {
- // Calculate the offset into the properties array.
- int offset = index * kPointerSize + FixedArray::kHeaderSize;
- __ lw(dst, FieldMemOperand(src, JSObject::kPropertiesOffset));
- __ lw(dst, FieldMemOperand(dst, offset));
+ // Adjust for the number of properties stored in the holder.
+ int slot = index.field_index() - holder->map()->inobject_properties();
+ if (slot < 0) {
+ // Get the property straight out of the holder.
+ int offset = holder->map()->instance_size() + (slot * kPointerSize);
+ __ lw(dst, FieldMemOperand(src, offset));
+ } else {
+ // Calculate the offset into the properties array.
+ int offset = slot * kPointerSize + FixedArray::kHeaderSize;
+ __ lw(dst, FieldMemOperand(src, JSObject::kPropertiesOffset));
+ __ lw(dst, FieldMemOperand(dst, offset));
+ }
}
}
@@ -1200,7 +1205,7 @@
Register scratch1,
Register scratch2,
Register scratch3,
- int index,
+ PropertyIndex index,
Handle<String> name,
Label* miss) {
// Check that the receiver isn't a smi.
=======================================
--- /branches/bleeding_edge/src/objects.cc Mon Nov 12 05:27:36 2012
+++ /branches/bleeding_edge/src/objects.cc Tue Nov 13 03:07:04 2012
@@ -641,7 +641,8 @@
ASSERT(!value->IsTheHole() || result->IsReadOnly());
return value->IsTheHole() ? heap->undefined_value() : value;
case FIELD:
- value = result->holder()->FastPropertyAt(result->GetFieldIndex());
+ value = result->holder()->FastPropertyAt(
+ result->GetFieldIndex().field_index());
ASSERT(!value->IsTheHole() || result->IsReadOnly());
return value->IsTheHole() ? heap->undefined_value() : value;
case CONSTANT_FUNCTION:
@@ -2436,7 +2437,7 @@
// occur as fields.
if (result->IsField() &&
result->IsReadOnly() &&
- FastPropertyAt(result->GetFieldIndex())->IsTheHole()) {
+
FastPropertyAt(result->GetFieldIndex().field_index())->IsTheHole()) {
result->DisallowCaching();
}
return;
@@ -2929,7 +2930,8 @@
result = self->SetNormalizedProperty(lookup, *value);
break;
case FIELD:
- result = self->FastPropertyAtPut(lookup->GetFieldIndex(), *value);
+ result = self->FastPropertyAtPut(
+ lookup->GetFieldIndex().field_index(), *value);
break;
case CONSTANT_FUNCTION:
// Only replace the function if necessary.
@@ -3095,7 +3097,8 @@
break;
}
case FIELD:
- result = self->FastPropertyAtPut(lookup.GetFieldIndex(), *value);
+ result = self->FastPropertyAtPut(
+ lookup.GetFieldIndex().field_index(), *value);
break;
case CONSTANT_FUNCTION:
// Only replace the function if necessary.
=======================================
--- /branches/bleeding_edge/src/property.cc Mon Aug 27 06:47:34 2012
+++ /branches/bleeding_edge/src/property.cc Tue Nov 13 03:07:04 2012
@@ -63,7 +63,7 @@
break;
case FIELD:
PrintF(out, " -type = field\n");
- PrintF(out, " -index = %d", GetFieldIndex());
+ PrintF(out, " -index = %d", GetFieldIndex().field_index());
PrintF(out, "\n");
break;
case CALLBACKS:
=======================================
--- /branches/bleeding_edge/src/property.h Wed Nov 7 06:14:50 2012
+++ /branches/bleeding_edge/src/property.h Tue Nov 13 03:07:04 2012
@@ -132,6 +132,44 @@
};
+// Holds a property index value distinguishing if it is a field index or an
+// index inside the object header.
+class PropertyIndex {
+ 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();
+ }
+
+ 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 BASE_EMBEDDED {
public:
explicit LookupResult(Isolate* isolate)
@@ -278,7 +316,7 @@
Object* GetLazyValue() {
switch (type()) {
case FIELD:
- return holder()->FastPropertyAt(GetFieldIndex());
+ return holder()->FastPropertyAt(GetFieldIndex().field_index());
case NORMAL: {
Object* value;
value =
holder()->property_dictionary()->ValueAt(GetDictionaryEntry());
@@ -334,10 +372,11 @@
return number_;
}
- int GetFieldIndex() {
+ PropertyIndex GetFieldIndex() {
ASSERT(lookup_type_ == DESCRIPTOR_TYPE);
ASSERT(IsField());
- return Descriptor::IndexFromValue(GetValue());
+ return PropertyIndex::NewFieldIndex(
+ Descriptor::IndexFromValue(GetValue()));
}
int GetLocalFieldIndexFromMap(Map* map) {
=======================================
--- /branches/bleeding_edge/src/runtime.cc Mon Nov 12 06:54:29 2012
+++ /branches/bleeding_edge/src/runtime.cc Tue Nov 13 03:07:04 2012
@@ -1679,7 +1679,7 @@
// Strict mode handling not needed (const is disallowed in strict mode).
if (lookup.IsField()) {
FixedArray* properties = global->properties();
- int index = lookup.GetFieldIndex();
+ int index = lookup.GetFieldIndex().field_index();
if (properties->get(index)->IsTheHole() || !lookup.IsReadOnly()) {
properties->set(index, *value);
}
@@ -1769,7 +1769,7 @@
if (lookup.IsField()) {
FixedArray* properties = object->properties();
- int index = lookup.GetFieldIndex();
+ int index = lookup.GetFieldIndex().field_index();
if (properties->get(index)->IsTheHole()) {
properties->set(index, *value);
}
@@ -4076,7 +4076,7 @@
LookupResult result(isolate);
receiver->LocalLookup(key, &result);
if (result.IsField()) {
- int offset = result.GetFieldIndex();
+ int offset = result.GetFieldIndex().field_index();
keyed_lookup_cache->Update(receiver_map, key, offset);
return receiver->FastPropertyAt(offset);
}
@@ -4250,7 +4250,8 @@
case NORMAL:
return lookup.holder()->GetNormalizedProperty(&lookup);
case FIELD:
- return lookup.holder()->FastPropertyAt(lookup.GetFieldIndex());
+ return lookup.holder()->FastPropertyAt(
+ lookup.GetFieldIndex().field_index());
case CONSTANT_FUNCTION:
return lookup.GetConstantFunction();
case CALLBACKS:
@@ -10010,8 +10011,8 @@
return value;
case FIELD:
value =
- JSObject::cast(
- result->holder())->FastPropertyAt(result->GetFieldIndex());
+ JSObject::cast(result->holder())->FastPropertyAt(
+ result->GetFieldIndex().field_index());
if (value->IsTheHole()) {
return heap->undefined_value();
}
=======================================
--- /branches/bleeding_edge/src/stub-cache.cc Thu Oct 25 04:52:37 2012
+++ /branches/bleeding_edge/src/stub-cache.cc Tue Nov 13 03:07:04 2012
@@ -136,7 +136,7 @@
Handle<Code> StubCache::ComputeLoadField(Handle<String> name,
Handle<JSObject> receiver,
Handle<JSObject> holder,
- int field_index) {
+ PropertyIndex field_index) {
ASSERT(IC::GetCodeCacheForObject(*receiver, *holder) == OWN_MAP);
Code::Flags flags = Code::ComputeMonomorphicFlags(Code::LOAD_IC,
Code::FIELD);
Handle<Object> probe(receiver->map()->FindInCodeCache(*name, flags));
@@ -261,7 +261,7 @@
Handle<Code> StubCache::ComputeKeyedLoadField(Handle<String> name,
Handle<JSObject> receiver,
Handle<JSObject> holder,
- int field_index) {
+ PropertyIndex field_index) {
ASSERT(IC::GetCodeCacheForObject(*receiver, *holder) == OWN_MAP);
Code::Flags flags =
Code::ComputeMonomorphicFlags(Code::KEYED_LOAD_IC, Code::FIELD);
@@ -632,7 +632,7 @@
Handle<String> name,
Handle<Object> object,
Handle<JSObject> holder,
- int index) {
+ PropertyIndex index) {
// Compute the check type and the map.
InlineCacheHolderFlag cache_holder =
IC::GetCodeCacheForObject(*object, *holder);
=======================================
--- /branches/bleeding_edge/src/stub-cache.h Fri Sep 7 02:01:54 2012
+++ /branches/bleeding_edge/src/stub-cache.h Tue Nov 13 03:07:04 2012
@@ -83,7 +83,7 @@
Handle<Code> ComputeLoadField(Handle<String> name,
Handle<JSObject> receiver,
Handle<JSObject> holder,
- int field_index);
+ PropertyIndex field_index);
Handle<Code> ComputeLoadCallback(Handle<String> name,
Handle<JSObject> receiver,
@@ -117,7 +117,7 @@
Handle<Code> ComputeKeyedLoadField(Handle<String> name,
Handle<JSObject> receiver,
Handle<JSObject> holder,
- int field_index);
+ PropertyIndex field_index);
Handle<Code> ComputeKeyedLoadCallback(Handle<String> name,
Handle<JSObject> receiver,
@@ -193,7 +193,7 @@
Handle<String> name,
Handle<Object> object,
Handle<JSObject> holder,
- int index);
+ PropertyIndex index);
Handle<Code> ComputeCallConstant(int argc,
Code::Kind,
@@ -453,7 +453,7 @@
Register dst,
Register src,
Handle<JSObject> holder,
- int index);
+ PropertyIndex index);
static void GenerateLoadArrayLength(MacroAssembler* masm,
Register receiver,
@@ -540,7 +540,7 @@
Register scratch1,
Register scratch2,
Register scratch3,
- int index,
+ PropertyIndex index,
Handle<String> name,
Label* miss);
@@ -611,7 +611,7 @@
Handle<Code> CompileLoadField(Handle<JSObject> object,
Handle<JSObject> holder,
- int index,
+ PropertyIndex index,
Handle<String> name);
Handle<Code> CompileLoadCallback(Handle<String> name,
@@ -654,7 +654,7 @@
Handle<Code> CompileLoadField(Handle<String> name,
Handle<JSObject> object,
Handle<JSObject> holder,
- int index);
+ PropertyIndex index);
Handle<Code> CompileLoadCallback(Handle<String> name,
Handle<JSObject> object,
@@ -803,7 +803,7 @@
Handle<Code> CompileCallField(Handle<JSObject> object,
Handle<JSObject> holder,
- int index,
+ PropertyIndex index,
Handle<String> name);
Handle<Code> CompileCallConstant(Handle<Object> object,
=======================================
--- /branches/bleeding_edge/src/x64/stub-cache-x64.cc Thu Nov 8 03:56:44
2012
+++ /branches/bleeding_edge/src/x64/stub-cache-x64.cc Tue Nov 13 03:07:04
2012
@@ -350,18 +350,23 @@
Register dst,
Register src,
Handle<JSObject> holder,
- int index) {
- // Adjust for the number of properties stored in the holder.
- index -= holder->map()->inobject_properties();
- if (index < 0) {
- // Get the property straight out of the holder.
- int offset = holder->map()->instance_size() + (index * kPointerSize);
+ PropertyIndex index) {
+ if (index.is_header_index()) {
+ int offset = index.header_index() * kPointerSize;
__ movq(dst, FieldOperand(src, offset));
} else {
- // Calculate the offset into the properties array.
- int offset = index * kPointerSize + FixedArray::kHeaderSize;
- __ movq(dst, FieldOperand(src, JSObject::kPropertiesOffset));
- __ movq(dst, FieldOperand(dst, offset));
+ // Adjust for the number of properties stored in the holder.
+ int slot = index.field_index() - holder->map()->inobject_properties();
+ if (slot < 0) {
+ // Get the property straight out of the holder.
+ int offset = holder->map()->instance_size() + (slot * kPointerSize);
+ __ movq(dst, FieldOperand(src, offset));
+ } else {
+ // Calculate the offset into the properties array.
+ int offset = slot * kPointerSize + FixedArray::kHeaderSize;
+ __ movq(dst, FieldOperand(src, JSObject::kPropertiesOffset));
+ __ movq(dst, FieldOperand(dst, offset));
+ }
}
}
@@ -1013,7 +1018,7 @@
Register scratch1,
Register scratch2,
Register scratch3,
- int index,
+ PropertyIndex index,
Handle<String> name,
Label* miss) {
// Check that the receiver isn't a smi.
@@ -1388,7 +1393,7 @@
Handle<Code> CallStubCompiler::CompileCallField(Handle<JSObject> object,
Handle<JSObject> holder,
- int index,
+ PropertyIndex index,
Handle<String> name) {
// ----------- S t a t e -------------
// rcx : function name
@@ -2780,7 +2785,7 @@
Handle<Code> LoadStubCompiler::CompileLoadField(Handle<JSObject> object,
Handle<JSObject> holder,
- int index,
+ PropertyIndex index,
Handle<String> name) {
// ----------- S t a t e -------------
// -- rax : receiver
@@ -2973,7 +2978,7 @@
Handle<Code> KeyedLoadStubCompiler::CompileLoadField(Handle<String> name,
Handle<JSObject>
receiver,
Handle<JSObject>
holder,
- int index) {
+ PropertyIndex index) {
// ----------- S t a t e -------------
// -- rax : key
// -- rdx : receiver
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev