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_AST_SCOPES_H_ | 5 #ifndef V8_AST_SCOPES_H_ |
6 #define V8_AST_SCOPES_H_ | 6 #define V8_AST_SCOPES_H_ |
7 | 7 |
8 #include "src/ast/ast.h" | 8 #include "src/ast/ast.h" |
9 #include "src/base/hashmap.h" | 9 #include "src/base/hashmap.h" |
10 #include "src/globals.h" | 10 #include "src/globals.h" |
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
368 // function, or eval scope. Same as DeclarationScope(), but skips declaration | 368 // function, or eval scope. Same as DeclarationScope(), but skips declaration |
369 // "block" scopes. Used for differentiating associated function objects (i.e., | 369 // "block" scopes. Used for differentiating associated function objects (i.e., |
370 // the scope for which a function prologue allocates a context) or declaring | 370 // the scope for which a function prologue allocates a context) or declaring |
371 // temporaries. | 371 // temporaries. |
372 DeclarationScope* GetClosureScope(); | 372 DeclarationScope* GetClosureScope(); |
373 | 373 |
374 // Find the first (non-arrow) function or script scope. This is where | 374 // Find the first (non-arrow) function or script scope. This is where |
375 // 'this' is bound, and what determines the function kind. | 375 // 'this' is bound, and what determines the function kind. |
376 DeclarationScope* GetReceiverScope(); | 376 DeclarationScope* GetReceiverScope(); |
377 | 377 |
| 378 // Find the module scope, assuming there is one. |
| 379 ModuleScope* GetModuleScope(); |
| 380 |
378 // Analyze() must have been called once to create the ScopeInfo. | 381 // Analyze() must have been called once to create the ScopeInfo. |
379 Handle<ScopeInfo> scope_info() { | 382 Handle<ScopeInfo> scope_info() { |
380 DCHECK(!scope_info_.is_null()); | 383 DCHECK(!scope_info_.is_null()); |
381 return scope_info_; | 384 return scope_info_; |
382 } | 385 } |
383 | 386 |
384 // --------------------------------------------------------------------------- | 387 // --------------------------------------------------------------------------- |
385 // Strict mode support. | 388 // Strict mode support. |
386 bool IsDeclared(const AstRawString* name) { | 389 bool IsDeclared(const AstRawString* name) { |
387 // During formal parameter list parsing the scope only contains | 390 // During formal parameter list parsing the scope only contains |
(...skipping 283 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
671 Variable* new_target_var() { return new_target_; } | 674 Variable* new_target_var() { return new_target_; } |
672 | 675 |
673 // The variable holding the function literal for named function | 676 // The variable holding the function literal for named function |
674 // literals, or NULL. Only valid for function scopes. | 677 // literals, or NULL. Only valid for function scopes. |
675 Variable* function_var() const { | 678 Variable* function_var() const { |
676 DCHECK(is_function_scope()); | 679 DCHECK(is_function_scope()); |
677 return function_; | 680 return function_; |
678 } | 681 } |
679 | 682 |
680 // Parameters. The left-most parameter has index 0. | 683 // Parameters. The left-most parameter has index 0. |
681 // Only valid for function scopes. | 684 // Only valid for function and module scopes. |
682 Variable* parameter(int index) const { | 685 Variable* parameter(int index) const { |
683 DCHECK(is_function_scope()); | 686 DCHECK(is_function_scope() || is_module_scope()); |
684 return params_[index]; | 687 return params_[index]; |
685 } | 688 } |
686 | 689 |
687 // Returns the default function arity excluding default or rest parameters. | 690 // Returns the default function arity excluding default or rest parameters. |
688 int default_function_length() const { return arity_; } | 691 int default_function_length() const { return arity_; } |
689 | 692 |
690 // Returns the number of formal parameters, excluding a possible rest | 693 // Returns the number of formal parameters, excluding a possible rest |
691 // parameter. Examples: | 694 // parameter. Examples: |
692 // function foo(a, b) {} ==> 2 | 695 // function foo(a, b) {} ==> 2 |
693 // function foo(a, b, ...c) {} ==> 2 | 696 // function foo(a, b, ...c) {} ==> 2 |
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
852 void AllocateModuleVariables(); | 855 void AllocateModuleVariables(); |
853 | 856 |
854 private: | 857 private: |
855 ModuleDescriptor* module_descriptor_; | 858 ModuleDescriptor* module_descriptor_; |
856 }; | 859 }; |
857 | 860 |
858 } // namespace internal | 861 } // namespace internal |
859 } // namespace v8 | 862 } // namespace v8 |
860 | 863 |
861 #endif // V8_AST_SCOPES_H_ | 864 #endif // V8_AST_SCOPES_H_ |
OLD | NEW |