Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef V8_SCOPES_H_ | 5 #ifndef V8_SCOPES_H_ |
| 6 #define V8_SCOPES_H_ | 6 #define V8_SCOPES_H_ |
| 7 | 7 |
| 8 #include "src/ast.h" | 8 #include "src/ast.h" |
| 9 #include "src/zone.h" | 9 #include "src/zone.h" |
| 10 | 10 |
| (...skipping 449 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 460 // Strict mode support. | 460 // Strict mode support. |
| 461 bool IsDeclared(const AstRawString* name) { | 461 bool IsDeclared(const AstRawString* name) { |
| 462 // During formal parameter list parsing the scope only contains | 462 // During formal parameter list parsing the scope only contains |
| 463 // two variables inserted at initialization: "this" and "arguments". | 463 // two variables inserted at initialization: "this" and "arguments". |
| 464 // "this" is an invalid parameter name and "arguments" is invalid parameter | 464 // "this" is an invalid parameter name and "arguments" is invalid parameter |
| 465 // name in strict mode. Therefore looking up with the map which includes | 465 // name in strict mode. Therefore looking up with the map which includes |
| 466 // "this" and "arguments" in addition to all formal parameters is safe. | 466 // "this" and "arguments" in addition to all formal parameters is safe. |
| 467 return variables_.Lookup(name) != NULL; | 467 return variables_.Lookup(name) != NULL; |
| 468 } | 468 } |
| 469 | 469 |
| 470 bool IsDeclaredParameter(const AstRawString* name) { | |
| 471 // If IsSimpleParameterList is false, duplicate parameters are not allowed, | |
| 472 // however `arguments` may be allowed if function is not strict code. Thus, | |
| 473 // the assumptions explained above do not hold. | |
| 474 Variable* var = variables_.Lookup(name); | |
| 475 return var != NULL && params_.Contains(var); | |
|
marja
2015/02/16 09:12:02
Why is it not enough to check if params_.Contains(
caitp (gmail)
2015/02/16 16:42:53
So just `return params_.Contains(variables_.Lookup
marja
2015/02/16 16:47:34
Assuming it does the right thing :) (As far as I u
| |
| 476 } | |
| 477 | |
| 470 // --------------------------------------------------------------------------- | 478 // --------------------------------------------------------------------------- |
| 471 // Debugging. | 479 // Debugging. |
| 472 | 480 |
| 473 #ifdef DEBUG | 481 #ifdef DEBUG |
| 474 void Print(int n = 0); // n = indentation; n < 0 => don't print recursively | 482 void Print(int n = 0); // n = indentation; n < 0 => don't print recursively |
| 475 #endif | 483 #endif |
| 476 | 484 |
| 477 // --------------------------------------------------------------------------- | 485 // --------------------------------------------------------------------------- |
| 478 // Implementation. | 486 // Implementation. |
| 479 protected: | 487 protected: |
| (...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 691 Scope* outer_scope, | 699 Scope* outer_scope, |
| 692 Handle<ScopeInfo> scope_info); | 700 Handle<ScopeInfo> scope_info); |
| 693 | 701 |
| 694 AstValueFactory* ast_value_factory_; | 702 AstValueFactory* ast_value_factory_; |
| 695 Zone* zone_; | 703 Zone* zone_; |
| 696 }; | 704 }; |
| 697 | 705 |
| 698 } } // namespace v8::internal | 706 } } // namespace v8::internal |
| 699 | 707 |
| 700 #endif // V8_SCOPES_H_ | 708 #endif // V8_SCOPES_H_ |
| OLD | NEW |