diff options
author | Ben Murdoch <benm@google.com> | 2011-11-30 16:04:58 +0000 |
---|---|---|
committer | Ben Murdoch <benm@google.com> | 2011-12-02 17:28:30 +0000 |
commit | 589d6979ff2ef66fca2d8fa51404c369ca5e9250 (patch) | |
tree | 1d9032fcae9d18a05430a4ba9c14e5c635c4096e /src/scopeinfo.cc | |
parent | 69a99ed0b2b2ef69d393c371b03db3a98aaf880e (diff) | |
download | v8-589d6979ff2ef66fca2d8fa51404c369ca5e9250.tar.gz |
Upgrade to V8 3.6
Merge V8 at 3.6.6.11
Simple merge required updates to makefiles only.
Bug: 5688872
Change-Id: Ib38b7ffbcd409585f6cb6fccc59c767029cecc77
Diffstat (limited to 'src/scopeinfo.cc')
-rw-r--r-- | src/scopeinfo.cc | 65 |
1 files changed, 29 insertions, 36 deletions
diff --git a/src/scopeinfo.cc b/src/scopeinfo.cc index 0eacc83c..ad31ca47 100644 --- a/src/scopeinfo.cc +++ b/src/scopeinfo.cc @@ -39,12 +39,8 @@ namespace internal { static int CompareLocal(Variable* const* v, Variable* const* w) { - Slot* s = (*v)->AsSlot(); - Slot* t = (*w)->AsSlot(); - // We may have rewritten parameters (that are in the arguments object) - // and which may have a NULL slot... - find a better solution... - int x = (s != NULL ? s->index() : 0); - int y = (t != NULL ? t->index() : 0); + int x = (*v)->index(); + int y = (*w)->index(); // Consider sorting them according to type as well? return x - y; } @@ -86,27 +82,24 @@ ScopeInfo<Allocator>::ScopeInfo(Scope* scope) for (int i = 0; i < locals.length(); i++) { Variable* var = locals[i]; if (var->is_used()) { - Slot* slot = var->AsSlot(); - if (slot != NULL) { - switch (slot->type()) { - case Slot::PARAMETER: - // explicitly added to parameters_ above - ignore - break; - - case Slot::LOCAL: - ASSERT(stack_slots_.length() == slot->index()); - stack_slots_.Add(var->name()); - break; - - case Slot::CONTEXT: - heap_locals.Add(var); - break; - - case Slot::LOOKUP: - // This is currently not used. - UNREACHABLE(); - break; - } + switch (var->location()) { + case Variable::UNALLOCATED: + case Variable::PARAMETER: + break; + + case Variable::LOCAL: + ASSERT(stack_slots_.length() == var->index()); + stack_slots_.Add(var->name()); + break; + + case Variable::CONTEXT: + heap_locals.Add(var); + break; + + case Variable::LOOKUP: + // We don't expect lookup variables in the locals list. + UNREACHABLE(); + break; } } } @@ -115,9 +108,9 @@ ScopeInfo<Allocator>::ScopeInfo(Scope* scope) if (scope->num_heap_slots() > 0) { // Add user-defined slots. for (int i = 0; i < heap_locals.length(); i++) { - ASSERT(heap_locals[i]->AsSlot()->index() - Context::MIN_CONTEXT_SLOTS == + ASSERT(heap_locals[i]->index() - Context::MIN_CONTEXT_SLOTS == context_slots_.length()); - ASSERT(heap_locals[i]->AsSlot()->index() - Context::MIN_CONTEXT_SLOTS == + ASSERT(heap_locals[i]->index() - Context::MIN_CONTEXT_SLOTS == context_modes_.length()); context_slots_.Add(heap_locals[i]->name()); context_modes_.Add(heap_locals[i]->mode()); @@ -131,18 +124,18 @@ ScopeInfo<Allocator>::ScopeInfo(Scope* scope) // For now, this must happen at the very end because of the // ordering of the scope info slots and the respective slot indices. if (scope->is_function_scope()) { - Variable* var = scope->function(); - if (var != NULL && - var->is_used() && - var->AsSlot()->type() == Slot::CONTEXT) { - function_name_ = var->name(); + VariableProxy* proxy = scope->function(); + if (proxy != NULL && + proxy->var()->is_used() && + proxy->var()->IsContextSlot()) { + function_name_ = proxy->name(); // Note that we must not find the function name in the context slot // list - instead it must be handled separately in the // Contexts::Lookup() function. Thus record an empty symbol here so we // get the correct number of context slots. - ASSERT(var->AsSlot()->index() - Context::MIN_CONTEXT_SLOTS == + ASSERT(proxy->var()->index() - Context::MIN_CONTEXT_SLOTS == context_slots_.length()); - ASSERT(var->AsSlot()->index() - Context::MIN_CONTEXT_SLOTS == + ASSERT(proxy->var()->index() - Context::MIN_CONTEXT_SLOTS == context_modes_.length()); context_slots_.Add(FACTORY->empty_symbol()); context_modes_.Add(Variable::INTERNAL); |