Index: src/objects.cc |
=================================================================== |
--- src/objects.cc (revision 7800) |
+++ src/objects.cc (working copy) |
@@ -152,6 +152,8 @@ |
} else if (heap_object->IsBoolean()) { |
Context* global_context = heap->isolate()->context()->global_context(); |
holder = global_context->boolean_function()->instance_prototype(); |
+ } else if (heap_object->IsJSProxy()) { |
+ return result->NotFound(); // For now... |
} |
} |
ASSERT(holder != NULL); // Cannot handle null or undefined. |
@@ -494,12 +496,13 @@ |
Heap* heap = name->GetHeap(); |
// Traverse the prototype chain from the current object (this) to |
- // the holder and check for access rights. This avoid traversing the |
+ // the holder and check for access rights. This avoids traversing the |
// objects more than once in case of interceptors, because the |
// holder will always be the interceptor holder and the search may |
// only continue with a current object just after the interceptor |
// holder in the prototype chain. |
Object* last = result->IsProperty() ? result->holder() : heap->null_value(); |
+ ASSERT(this != this->GetPrototype()); |
for (Object* current = this; true; current = current->GetPrototype()) { |
if (current->IsAccessCheckNeeded()) { |
// Check if we're allowed to read from the current object. Note |
@@ -575,6 +578,8 @@ |
holder = global_context->number_function()->instance_prototype(); |
} else if (heap_object->IsBoolean()) { |
holder = global_context->boolean_function()->instance_prototype(); |
+ } else if (heap_object->IsJSProxy()) { |
+ return heap->undefined_value(); // For now... |
} else { |
// Undefined and null have no indexed properties. |
ASSERT(heap_object->IsUndefined() || heap_object->IsNull()); |
@@ -595,9 +600,10 @@ |
HeapObject* heap_object = HeapObject::cast(this); |
- // The object is either a number, a string, a boolean, or a real JS object. |
- if (heap_object->IsJSObject()) { |
- return JSObject::cast(this)->map()->prototype(); |
+ // The object is either a number, a string, a boolean, |
+ // a real JS object, or a Harmony proxy. |
+ if (heap_object->IsJSObject() || heap_object->IsJSProxy()) { |
+ return heap_object->map()->prototype(); |
} |
Heap* heap = heap_object->GetHeap(); |
Context* context = heap->isolate()->context()->global_context(); |
@@ -1154,6 +1160,9 @@ |
case ODDBALL_TYPE: |
Oddball::BodyDescriptor::IterateBody(this, v); |
break; |
+ case JS_PROXY_TYPE: |
+ JSProxy::BodyDescriptor::IterateBody(this, v); |
+ break; |
case PROXY_TYPE: |
reinterpret_cast<Proxy*>(this)->ProxyIterateBody(v); |
break; |