From 2df13c73103d4bd95a5f4fec741e0ed2f17852f1 Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Wed, 23 Sep 2009 14:49:51 +0200 Subject: Upgrade v8 to 1.3.13 --- deps/v8/src/handles.cc | 85 +++++++++++++++++++++++++------------------------- 1 file changed, 42 insertions(+), 43 deletions(-) (limited to 'deps/v8/src/handles.cc') diff --git a/deps/v8/src/handles.cc b/deps/v8/src/handles.cc index fae006a4d0..931e3b9bf0 100644 --- a/deps/v8/src/handles.cc +++ b/deps/v8/src/handles.cc @@ -527,55 +527,53 @@ v8::Handle GetKeysForIndexedInterceptor(Handle receiver, } -Handle GetKeysInFixedArrayFor(Handle object) { +Handle GetKeysInFixedArrayFor(Handle object, + KeyCollectionType type) { Handle content = Factory::empty_fixed_array(); - JSObject* arguments_boilerplate = - Top::context()->global_context()->arguments_boilerplate(); - JSFunction* arguments_function = - JSFunction::cast(arguments_boilerplate->map()->constructor()); - bool allow_enumeration = (object->map()->constructor() != arguments_function); - // Only collect keys if access is permitted. - if (allow_enumeration) { - for (Handle p = object; - *p != Heap::null_value(); - p = Handle(p->GetPrototype())) { - Handle current(JSObject::cast(*p)); - - // Check access rights if required. - if (current->IsAccessCheckNeeded() && - !Top::MayNamedAccess(*current, Heap::undefined_value(), - v8::ACCESS_KEYS)) { - Top::ReportFailedAccessCheck(*current, v8::ACCESS_KEYS); - break; - } + for (Handle p = object; + *p != Heap::null_value(); + p = Handle(p->GetPrototype())) { + Handle current(JSObject::cast(*p)); + + // Check access rights if required. + if (current->IsAccessCheckNeeded() && + !Top::MayNamedAccess(*current, Heap::undefined_value(), + v8::ACCESS_KEYS)) { + Top::ReportFailedAccessCheck(*current, v8::ACCESS_KEYS); + break; + } - // Compute the element keys. - Handle element_keys = - Factory::NewFixedArray(current->NumberOfEnumElements()); - current->GetEnumElementKeys(*element_keys); - content = UnionOfKeys(content, element_keys); - - // Add the element keys from the interceptor. - if (current->HasIndexedInterceptor()) { - v8::Handle result = - GetKeysForIndexedInterceptor(object, current); - if (!result.IsEmpty()) - content = AddKeysFromJSArray(content, v8::Utils::OpenHandle(*result)); - } + // Compute the element keys. + Handle element_keys = + Factory::NewFixedArray(current->NumberOfEnumElements()); + current->GetEnumElementKeys(*element_keys); + content = UnionOfKeys(content, element_keys); + + // Add the element keys from the interceptor. + if (current->HasIndexedInterceptor()) { + v8::Handle result = + GetKeysForIndexedInterceptor(object, current); + if (!result.IsEmpty()) + content = AddKeysFromJSArray(content, v8::Utils::OpenHandle(*result)); + } - // Compute the property keys. - content = UnionOfKeys(content, GetEnumPropertyKeys(current)); + // Compute the property keys. + content = UnionOfKeys(content, GetEnumPropertyKeys(current)); - // Add the property keys from the interceptor. - if (current->HasNamedInterceptor()) { - v8::Handle result = - GetKeysForNamedInterceptor(object, current); - if (!result.IsEmpty()) - content = AddKeysFromJSArray(content, v8::Utils::OpenHandle(*result)); - } + // Add the property keys from the interceptor. + if (current->HasNamedInterceptor()) { + v8::Handle result = + GetKeysForNamedInterceptor(object, current); + if (!result.IsEmpty()) + content = AddKeysFromJSArray(content, v8::Utils::OpenHandle(*result)); } + + // If we only want local properties we bail out after the first + // iteration. + if (type == LOCAL_ONLY) + break; } return content; } @@ -583,7 +581,8 @@ Handle GetKeysInFixedArrayFor(Handle object) { Handle GetKeysFor(Handle object) { Counters::for_in.Increment(); - Handle elements = GetKeysInFixedArrayFor(object); + Handle elements = GetKeysInFixedArrayFor(object, + INCLUDE_PROTOS); return Factory::NewJSArrayWithElements(elements); } -- cgit v1.2.1