| Index: src/contexts.cc
|
| diff --git a/src/contexts.cc b/src/contexts.cc
|
| index 3ad72a16b50c3a81d06e777300dc2630549c6512..3a3a6ebfe3778b4b2760ee100440508ac956a009 100644
|
| --- a/src/contexts.cc
|
| +++ b/src/contexts.cc
|
| @@ -74,8 +74,10 @@ void Context::set_global_proxy(JSObject* object) {
|
| }
|
|
|
|
|
| -Handle<Object> Context::Lookup(Handle<String> name, ContextLookupFlags flags,
|
| - int* index_, PropertyAttributes* attributes) {
|
| +Handle<Object> Context::Lookup(Handle<String> name,
|
| + ContextLookupFlags flags,
|
| + int* index_,
|
| + PropertyAttributes* attributes) {
|
| Handle<Context> context(this);
|
|
|
| bool follow_context_chain = (flags & FOLLOW_CONTEXT_CHAIN) != 0;
|
| @@ -95,7 +97,7 @@ Handle<Object> Context::Lookup(Handle<String> name, ContextLookupFlags flags,
|
| PrintF("\n");
|
| }
|
|
|
| - // check extension/with object
|
| + // Check the context extension object.
|
| if (context->has_extension()) {
|
| Handle<JSObject> extension = Handle<JSObject>(context->extension());
|
| // Context extension objects needs to behave as if they have no
|
| @@ -108,7 +110,6 @@ Handle<Object> Context::Lookup(Handle<String> name, ContextLookupFlags flags,
|
| *attributes = extension->GetPropertyAttribute(*name);
|
| }
|
| if (*attributes != ABSENT) {
|
| - // property found
|
| if (FLAG_trace_contexts) {
|
| PrintF("=> found property in context object %p\n",
|
| reinterpret_cast<void*>(*extension));
|
| @@ -118,16 +119,13 @@ Handle<Object> Context::Lookup(Handle<String> name, ContextLookupFlags flags,
|
| }
|
|
|
| if (context->is_function_context()) {
|
| - // we have context-local slots
|
| -
|
| - // check non-parameter locals in context
|
| + // We may have context-local slots. Check locals in the context.
|
| Handle<SerializedScopeInfo> scope_info(
|
| context->closure()->shared()->scope_info());
|
| Variable::Mode mode;
|
| int index = scope_info->ContextSlotIndex(*name, &mode);
|
| ASSERT(index < 0 || index >= MIN_CONTEXT_SLOTS);
|
| if (index >= 0) {
|
| - // slot found
|
| if (FLAG_trace_contexts) {
|
| PrintF("=> found local in context slot %d (mode = %d)\n",
|
| index, mode);
|
| @@ -140,39 +138,28 @@ Handle<Object> Context::Lookup(Handle<String> name, ContextLookupFlags flags,
|
| // declared variables that were introduced through declaration nodes)
|
| // must not appear here.
|
| switch (mode) {
|
| - case Variable::INTERNAL: // fall through
|
| - case Variable::VAR: *attributes = NONE; break;
|
| - case Variable::CONST: *attributes = READ_ONLY; break;
|
| - case Variable::DYNAMIC: UNREACHABLE(); break;
|
| - case Variable::DYNAMIC_GLOBAL: UNREACHABLE(); break;
|
| - case Variable::DYNAMIC_LOCAL: UNREACHABLE(); break;
|
| - case Variable::TEMPORARY: UNREACHABLE(); break;
|
| + case Variable::INTERNAL: // Fall through.
|
| + case Variable::VAR:
|
| + *attributes = NONE;
|
| + break;
|
| + case Variable::CONST:
|
| + *attributes = READ_ONLY;
|
| + break;
|
| + case Variable::DYNAMIC:
|
| + case Variable::DYNAMIC_GLOBAL:
|
| + case Variable::DYNAMIC_LOCAL:
|
| + case Variable::TEMPORARY:
|
| + UNREACHABLE();
|
| + break;
|
| }
|
| return context;
|
| }
|
|
|
| - // check parameter locals in context
|
| - int param_index = scope_info->ParameterIndex(*name);
|
| - if (param_index >= 0) {
|
| - // slot found.
|
| - int index =
|
| - scope_info->ContextSlotIndex(Heap::arguments_shadow_symbol(), NULL);
|
| - ASSERT(index >= 0); // arguments must exist and be in the heap context
|
| - Handle<JSObject> arguments(JSObject::cast(context->get(index)));
|
| - ASSERT(arguments->HasLocalProperty(Heap::length_symbol()));
|
| - if (FLAG_trace_contexts) {
|
| - PrintF("=> found parameter %d in arguments object\n", param_index);
|
| - }
|
| - *index_ = param_index;
|
| - *attributes = NONE;
|
| - return arguments;
|
| - }
|
| -
|
| - // check intermediate context (holding only the function name variable)
|
| + // Check the slot corresponding to the intermediate context holding
|
| + // only the function name variable.
|
| if (follow_context_chain) {
|
| int index = scope_info->FunctionContextSlotIndex(*name);
|
| if (index >= 0) {
|
| - // slot found
|
| if (FLAG_trace_contexts) {
|
| PrintF("=> found intermediate function in context slot %d\n",
|
| index);
|
| @@ -184,7 +171,7 @@ Handle<Object> Context::Lookup(Handle<String> name, ContextLookupFlags flags,
|
| }
|
| }
|
|
|
| - // proceed with enclosing context
|
| + // Proceed with the enclosing context.
|
| if (context->IsGlobalContext()) {
|
| follow_context_chain = false;
|
| } else if (context->is_function_context()) {
|
| @@ -194,7 +181,6 @@ Handle<Object> Context::Lookup(Handle<String> name, ContextLookupFlags flags,
|
| }
|
| } while (follow_context_chain);
|
|
|
| - // slot not found
|
| if (FLAG_trace_contexts) {
|
| PrintF("=> no property/slot found\n");
|
| }
|
|
|