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); |