| OLD | NEW |
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 220 Scope* with_scope = new(zone) Scope(current_scope, | 220 Scope* with_scope = new(zone) Scope(current_scope, |
| 221 WITH_SCOPE, | 221 WITH_SCOPE, |
| 222 Handle<ScopeInfo>::null(), | 222 Handle<ScopeInfo>::null(), |
| 223 zone); | 223 zone); |
| 224 current_scope = with_scope; | 224 current_scope = with_scope; |
| 225 // All the inner scopes are inside a with. | 225 // All the inner scopes are inside a with. |
| 226 contains_with = true; | 226 contains_with = true; |
| 227 for (Scope* s = innermost_scope; s != NULL; s = s->outer_scope()) { | 227 for (Scope* s = innermost_scope; s != NULL; s = s->outer_scope()) { |
| 228 s->scope_inside_with_ = true; | 228 s->scope_inside_with_ = true; |
| 229 } | 229 } |
| 230 } else if (context->IsGlobalContext()) { |
| 231 ScopeInfo* scope_info = ScopeInfo::cast(context->extension()); |
| 232 current_scope = new(zone) Scope(current_scope, |
| 233 GLOBAL_SCOPE, |
| 234 Handle<ScopeInfo>(scope_info), |
| 235 zone); |
| 230 } else if (context->IsModuleContext()) { | 236 } else if (context->IsModuleContext()) { |
| 231 ScopeInfo* scope_info = ScopeInfo::cast(context->module()->scope_info()); | 237 ScopeInfo* scope_info = ScopeInfo::cast(context->module()->scope_info()); |
| 232 current_scope = new(zone) Scope(current_scope, | 238 current_scope = new(zone) Scope(current_scope, |
| 233 MODULE_SCOPE, | 239 MODULE_SCOPE, |
| 234 Handle<ScopeInfo>(scope_info), | 240 Handle<ScopeInfo>(scope_info), |
| 235 zone); | 241 zone); |
| 236 } else if (context->IsFunctionContext()) { | 242 } else if (context->IsFunctionContext()) { |
| 237 ScopeInfo* scope_info = context->closure()->shared()->scope_info(); | 243 ScopeInfo* scope_info = context->closure()->shared()->scope_info(); |
| 238 current_scope = new(zone) Scope(current_scope, | 244 current_scope = new(zone) Scope(current_scope, |
| 239 FUNCTION_SCOPE, | 245 FUNCTION_SCOPE, |
| (...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 484 ASSERT(mode == VAR || | 490 ASSERT(mode == VAR || |
| 485 mode == CONST || | 491 mode == CONST || |
| 486 mode == CONST_HARMONY || | 492 mode == CONST_HARMONY || |
| 487 mode == LET); | 493 mode == LET); |
| 488 ++num_var_or_const_; | 494 ++num_var_or_const_; |
| 489 return variables_.Declare( | 495 return variables_.Declare( |
| 490 this, name, mode, true, Variable::NORMAL, init_flag, interface); | 496 this, name, mode, true, Variable::NORMAL, init_flag, interface); |
| 491 } | 497 } |
| 492 | 498 |
| 493 | 499 |
| 494 Variable* Scope::DeclareGlobal(Handle<String> name) { | 500 Variable* Scope::DeclareDynamicGlobal(Handle<String> name) { |
| 495 ASSERT(is_global_scope()); | 501 ASSERT(is_global_scope()); |
| 496 return variables_.Declare(this, | 502 return variables_.Declare(this, |
| 497 name, | 503 name, |
| 498 DYNAMIC_GLOBAL, | 504 DYNAMIC_GLOBAL, |
| 499 true, | 505 true, |
| 500 Variable::NORMAL, | 506 Variable::NORMAL, |
| 501 kCreatedInitialized); | 507 kCreatedInitialized); |
| 502 } | 508 } |
| 503 | 509 |
| 504 | 510 |
| (...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1040 } else if (var->is_dynamic()) { | 1046 } else if (var->is_dynamic()) { |
| 1041 var = NonLocal(proxy->name(), DYNAMIC); | 1047 var = NonLocal(proxy->name(), DYNAMIC); |
| 1042 } else { | 1048 } else { |
| 1043 Variable* invalidated = var; | 1049 Variable* invalidated = var; |
| 1044 var = NonLocal(proxy->name(), DYNAMIC_LOCAL); | 1050 var = NonLocal(proxy->name(), DYNAMIC_LOCAL); |
| 1045 var->set_local_if_not_shadowed(invalidated); | 1051 var->set_local_if_not_shadowed(invalidated); |
| 1046 } | 1052 } |
| 1047 break; | 1053 break; |
| 1048 | 1054 |
| 1049 case UNBOUND: | 1055 case UNBOUND: |
| 1050 // No binding has been found. Declare a variable in global scope. | 1056 // No binding has been found. Declare a variable on the global object. |
| 1051 var = info->global_scope()->DeclareGlobal(proxy->name()); | 1057 var = info->global_scope()->DeclareDynamicGlobal(proxy->name()); |
| 1052 break; | 1058 break; |
| 1053 | 1059 |
| 1054 case UNBOUND_EVAL_SHADOWED: | 1060 case UNBOUND_EVAL_SHADOWED: |
| 1055 // No binding has been found. But some scope makes a | 1061 // No binding has been found. But some scope makes a |
| 1056 // non-strict 'eval' call. | 1062 // non-strict 'eval' call. |
| 1057 var = NonLocal(proxy->name(), DYNAMIC_GLOBAL); | 1063 var = NonLocal(proxy->name(), DYNAMIC_GLOBAL); |
| 1058 break; | 1064 break; |
| 1059 | 1065 |
| 1060 case DYNAMIC_LOOKUP: | 1066 case DYNAMIC_LOOKUP: |
| 1061 // The variable could not be resolved statically. | 1067 // The variable could not be resolved statically. |
| (...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1419 for (int i = 0; i < inner_scopes_.length(); i++) { | 1425 for (int i = 0; i < inner_scopes_.length(); i++) { |
| 1420 Scope* inner_scope = inner_scopes_.at(i); | 1426 Scope* inner_scope = inner_scopes_.at(i); |
| 1421 if (inner_scope->is_module_scope()) { | 1427 if (inner_scope->is_module_scope()) { |
| 1422 inner_scope->LinkModules(info); | 1428 inner_scope->LinkModules(info); |
| 1423 } | 1429 } |
| 1424 } | 1430 } |
| 1425 } | 1431 } |
| 1426 | 1432 |
| 1427 | 1433 |
| 1428 } } // namespace v8::internal | 1434 } } // namespace v8::internal |
| OLD | NEW |