Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(106)

Side by Side Diff: src/scopes.cc

Issue 7399023: Pass isolate to AST ID functions. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 9 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« src/parser.cc ('K') | « src/rewriter.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2011 the V8 project authors. All rights reserved. 1 // Copyright 2011 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after
297 if (is_catch_scope()) { 297 if (is_catch_scope()) {
298 ASSERT(outer_scope() != NULL); 298 ASSERT(outer_scope() != NULL);
299 receiver_ = outer_scope()->receiver(); 299 receiver_ = outer_scope()->receiver();
300 } else { 300 } else {
301 Variable* var = 301 Variable* var =
302 variables_.Declare(this, 302 variables_.Declare(this,
303 isolate_->factory()->this_symbol(), 303 isolate_->factory()->this_symbol(),
304 Variable::VAR, 304 Variable::VAR,
305 false, 305 false,
306 Variable::THIS); 306 Variable::THIS);
307 var->set_rewrite(new(isolate_->zone()) Slot(var, Slot::PARAMETER, -1)); 307 var->set_rewrite(new(isolate_->zone()) Slot(
308 isolate_, var, Slot::PARAMETER, -1));
308 receiver_ = var; 309 receiver_ = var;
309 } 310 }
310 311
311 if (is_function_scope()) { 312 if (is_function_scope()) {
312 // Declare 'arguments' variable which exists in all functions. 313 // Declare 'arguments' variable which exists in all functions.
313 // Note that it might never be accessed, in which case it won't be 314 // Note that it might never be accessed, in which case it won't be
314 // allocated during variable allocation. 315 // allocated during variable allocation.
315 variables_.Declare(this, 316 variables_.Declare(this,
316 isolate_->factory()->arguments_symbol(), 317 isolate_->factory()->arguments_symbol(),
317 Variable::VAR, 318 Variable::VAR,
(...skipping 25 matching lines...) Expand all
343 index = scope_info_->ParameterIndex(*name); 344 index = scope_info_->ParameterIndex(*name);
344 if (index < 0) { 345 if (index < 0) {
345 // Check the function name. 346 // Check the function name.
346 index = scope_info_->FunctionContextSlotIndex(*name); 347 index = scope_info_->FunctionContextSlotIndex(*name);
347 if (index < 0) return NULL; 348 if (index < 0) return NULL;
348 } 349 }
349 } 350 }
350 351
351 Variable* var = 352 Variable* var =
352 variables_.Declare(this, name, mode, true, Variable::NORMAL); 353 variables_.Declare(this, name, mode, true, Variable::NORMAL);
353 var->set_rewrite(new(isolate_->zone()) Slot(var, Slot::CONTEXT, index)); 354 var->set_rewrite(
355 new(isolate_->zone()) Slot(isolate_, var, Slot::CONTEXT, index));
354 return var; 356 return var;
355 } 357 }
356 358
357 359
358 Variable* Scope::Lookup(Handle<String> name) { 360 Variable* Scope::Lookup(Handle<String> name) {
359 for (Scope* scope = this; 361 for (Scope* scope = this;
360 scope != NULL; 362 scope != NULL;
361 scope = scope->outer_scope()) { 363 scope = scope->outer_scope()) {
362 Variable* var = scope->LocalLookup(name); 364 Variable* var = scope->LocalLookup(name);
363 if (var != NULL) return var; 365 if (var != NULL) return var;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 } 402 }
401 403
402 404
403 VariableProxy* Scope::NewUnresolved(Handle<String> name, 405 VariableProxy* Scope::NewUnresolved(Handle<String> name,
404 bool inside_with, 406 bool inside_with,
405 int position) { 407 int position) {
406 // Note that we must not share the unresolved variables with 408 // Note that we must not share the unresolved variables with
407 // the same name because they may be removed selectively via 409 // the same name because they may be removed selectively via
408 // RemoveUnresolved(). 410 // RemoveUnresolved().
409 ASSERT(!already_resolved()); 411 ASSERT(!already_resolved());
410 VariableProxy* proxy = 412 VariableProxy* proxy = new(isolate_->zone()) VariableProxy(
411 new(isolate_->zone()) VariableProxy(name, false, inside_with, position); 413 isolate_, name, false, inside_with, position);
412 unresolved_.Add(proxy); 414 unresolved_.Add(proxy);
413 return proxy; 415 return proxy;
414 } 416 }
415 417
416 418
417 void Scope::RemoveUnresolved(VariableProxy* var) { 419 void Scope::RemoveUnresolved(VariableProxy* var) {
418 // Most likely (always?) any variable we want to remove 420 // Most likely (always?) any variable we want to remove
419 // was just added before, so we search backwards. 421 // was just added before, so we search backwards.
420 for (int i = unresolved_.length(); i-- > 0;) { 422 for (int i = unresolved_.length(); i-- > 0;) {
421 if (unresolved_[i] == var) { 423 if (unresolved_[i] == var) {
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
701 703
702 704
703 Variable* Scope::NonLocal(Handle<String> name, Variable::Mode mode) { 705 Variable* Scope::NonLocal(Handle<String> name, Variable::Mode mode) {
704 if (dynamics_ == NULL) dynamics_ = new DynamicScopePart(); 706 if (dynamics_ == NULL) dynamics_ = new DynamicScopePart();
705 VariableMap* map = dynamics_->GetMap(mode); 707 VariableMap* map = dynamics_->GetMap(mode);
706 Variable* var = map->Lookup(name); 708 Variable* var = map->Lookup(name);
707 if (var == NULL) { 709 if (var == NULL) {
708 // Declare a new non-local. 710 // Declare a new non-local.
709 var = map->Declare(NULL, name, mode, true, Variable::NORMAL); 711 var = map->Declare(NULL, name, mode, true, Variable::NORMAL);
710 // Allocate it by giving it a dynamic lookup. 712 // Allocate it by giving it a dynamic lookup.
711 var->set_rewrite(new(isolate_->zone()) Slot(var, Slot::LOOKUP, -1)); 713 var->set_rewrite(
714 new(isolate_->zone()) Slot(isolate_, var, Slot::LOOKUP, -1));
712 } 715 }
713 return var; 716 return var;
714 } 717 }
715 718
716 719
717 // Lookup a variable starting with this scope. The result is either 720 // Lookup a variable starting with this scope. The result is either
718 // the statically resolved variable belonging to an outer scope, or 721 // the statically resolved variable belonging to an outer scope, or
719 // NULL. It may be NULL because a) we couldn't find a variable, or b) 722 // NULL. It may be NULL because a) we couldn't find a variable, or b)
720 // because the variable is just a guess (and may be shadowed by 723 // because the variable is just a guess (and may be shadowed by
721 // another variable that is introduced dynamically via an 'eval' call 724 // another variable that is introduced dynamically via an 'eval' call
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
957 if (params_[i]->name().is_identical_to( 960 if (params_[i]->name().is_identical_to(
958 isolate_->factory()->arguments_symbol())) { 961 isolate_->factory()->arguments_symbol())) {
959 return true; 962 return true;
960 } 963 }
961 } 964 }
962 return false; 965 return false;
963 } 966 }
964 967
965 968
966 void Scope::AllocateStackSlot(Variable* var) { 969 void Scope::AllocateStackSlot(Variable* var) {
967 var->set_rewrite( 970 var->set_rewrite(new(isolate_->zone()) Slot(
968 new(isolate_->zone()) Slot(var, Slot::LOCAL, num_stack_slots_++)); 971 isolate_, var, Slot::LOCAL, num_stack_slots_++));
969 } 972 }
970 973
971 974
972 void Scope::AllocateHeapSlot(Variable* var) { 975 void Scope::AllocateHeapSlot(Variable* var) {
973 var->set_rewrite( 976 var->set_rewrite(new(isolate_->zone()) Slot(
974 new(isolate_->zone()) Slot(var, Slot::CONTEXT, num_heap_slots_++)); 977 isolate_, var, Slot::CONTEXT, num_heap_slots_++));
975 } 978 }
976 979
977 980
978 void Scope::AllocateParameterLocals() { 981 void Scope::AllocateParameterLocals() {
979 ASSERT(is_function_scope()); 982 ASSERT(is_function_scope());
980 Variable* arguments = LocalLookup(isolate_->factory()->arguments_symbol()); 983 Variable* arguments = LocalLookup(isolate_->factory()->arguments_symbol());
981 ASSERT(arguments != NULL); // functions have 'arguments' declared implicitly 984 ASSERT(arguments != NULL); // functions have 'arguments' declared implicitly
982 985
983 bool uses_nonstrict_arguments = false; 986 bool uses_nonstrict_arguments = false;
984 987
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1017 1020
1018 if (MustAllocate(var)) { 1021 if (MustAllocate(var)) {
1019 if (MustAllocateInContext(var)) { 1022 if (MustAllocateInContext(var)) {
1020 ASSERT(var->rewrite() == NULL || var->IsContextSlot()); 1023 ASSERT(var->rewrite() == NULL || var->IsContextSlot());
1021 if (var->rewrite() == NULL) { 1024 if (var->rewrite() == NULL) {
1022 AllocateHeapSlot(var); 1025 AllocateHeapSlot(var);
1023 } 1026 }
1024 } else { 1027 } else {
1025 ASSERT(var->rewrite() == NULL || var->IsParameter()); 1028 ASSERT(var->rewrite() == NULL || var->IsParameter());
1026 if (var->rewrite() == NULL) { 1029 if (var->rewrite() == NULL) {
1027 var->set_rewrite(new(isolate_->zone()) Slot(var, Slot::PARAMETER, i)); 1030 var->set_rewrite(
1031 new(isolate_->zone()) Slot(isolate_, var, Slot::PARAMETER, i));
1028 } 1032 }
1029 } 1033 }
1030 } 1034 }
1031 } 1035 }
1032 } 1036 }
1033 1037
1034 1038
1035 void Scope::AllocateNonParameterLocal(Variable* var) { 1039 void Scope::AllocateNonParameterLocal(Variable* var) {
1036 ASSERT(var->scope() == this); 1040 ASSERT(var->scope() == this);
1037 ASSERT(var->rewrite() == NULL || 1041 ASSERT(var->rewrite() == NULL ||
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
1105 if (num_heap_slots_ == Context::MIN_CONTEXT_SLOTS && 1109 if (num_heap_slots_ == Context::MIN_CONTEXT_SLOTS &&
1106 !must_have_local_context) { 1110 !must_have_local_context) {
1107 num_heap_slots_ = 0; 1111 num_heap_slots_ = 0;
1108 } 1112 }
1109 1113
1110 // Allocation done. 1114 // Allocation done.
1111 ASSERT(num_heap_slots_ == 0 || num_heap_slots_ >= Context::MIN_CONTEXT_SLOTS); 1115 ASSERT(num_heap_slots_ == 0 || num_heap_slots_ >= Context::MIN_CONTEXT_SLOTS);
1112 } 1116 }
1113 1117
1114 } } // namespace v8::internal 1118 } } // namespace v8::internal
OLDNEW
« src/parser.cc ('K') | « src/rewriter.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698