| Index: src/scopeinfo.cc
|
| diff --git a/src/scopeinfo.cc b/src/scopeinfo.cc
|
| index 6d1ffb99b8448687dbe133baf647fc1798efd170..ad31ca47c613350f3293787df8a0eebe4a3c4705 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());
|
| @@ -140,9 +133,9 @@ ScopeInfo<Allocator>::ScopeInfo(Scope* scope)
|
| // 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(proxy->var()->AsSlot()->index() - Context::MIN_CONTEXT_SLOTS ==
|
| + ASSERT(proxy->var()->index() - Context::MIN_CONTEXT_SLOTS ==
|
| context_slots_.length());
|
| - ASSERT(proxy->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);
|
|
|