| 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 366 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 377 // function, or eval scope. Same as DeclarationScope(), but skips declaration | 377 // function, or eval scope. Same as DeclarationScope(), but skips declaration |
| 378 // "block" scopes. Used for differentiating associated function objects (i.e., | 378 // "block" scopes. Used for differentiating associated function objects (i.e., |
| 379 // the scope for which a function prologue allocates a context) or declaring | 379 // the scope for which a function prologue allocates a context) or declaring |
| 380 // temporaries. | 380 // temporaries. |
| 381 DeclarationScope* GetClosureScope(); | 381 DeclarationScope* GetClosureScope(); |
| 382 | 382 |
| 383 // Find the first (non-arrow) function or script scope. This is where | 383 // Find the first (non-arrow) function or script scope. This is where |
| 384 // 'this' is bound, and what determines the function kind. | 384 // 'this' is bound, and what determines the function kind. |
| 385 DeclarationScope* GetReceiverScope(); | 385 DeclarationScope* GetReceiverScope(); |
| 386 | 386 |
| 387 // Creates a scope info if it doesn't already exist. | 387 // Analyze() must have been called once to create the ScopeInfo. |
| 388 Handle<ScopeInfo> GetScopeInfo(Isolate* isolate); | |
| 389 | |
| 390 // GetScopeInfo() must have been called once to create the ScopeInfo. | |
| 391 Handle<ScopeInfo> scope_info() { | 388 Handle<ScopeInfo> scope_info() { |
| 392 DCHECK(!scope_info_.is_null()); | 389 DCHECK(!scope_info_.is_null()); |
| 393 return scope_info_; | 390 return scope_info_; |
| 394 } | 391 } |
| 395 | 392 |
| 396 // --------------------------------------------------------------------------- | 393 // --------------------------------------------------------------------------- |
| 397 // Strict mode support. | 394 // Strict mode support. |
| 398 bool IsDeclared(const AstRawString* name) { | 395 bool IsDeclared(const AstRawString* name) { |
| 399 // During formal parameter list parsing the scope only contains | 396 // During formal parameter list parsing the scope only contains |
| 400 // two variables inserted at initialization: "this" and "arguments". | 397 // two variables inserted at initialization: "this" and "arguments". |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 539 // Predicates. | 536 // Predicates. |
| 540 bool MustAllocate(Variable* var); | 537 bool MustAllocate(Variable* var); |
| 541 bool MustAllocateInContext(Variable* var); | 538 bool MustAllocateInContext(Variable* var); |
| 542 | 539 |
| 543 // Variable allocation. | 540 // Variable allocation. |
| 544 void AllocateStackSlot(Variable* var); | 541 void AllocateStackSlot(Variable* var); |
| 545 void AllocateHeapSlot(Variable* var); | 542 void AllocateHeapSlot(Variable* var); |
| 546 void AllocateNonParameterLocal(Variable* var); | 543 void AllocateNonParameterLocal(Variable* var); |
| 547 void AllocateDeclaredGlobal(Variable* var); | 544 void AllocateDeclaredGlobal(Variable* var); |
| 548 void AllocateNonParameterLocalsAndDeclaredGlobals(); | 545 void AllocateNonParameterLocalsAndDeclaredGlobals(); |
| 549 void AllocateVariablesRecursively(); | 546 void AllocateVariablesRecursively(Isolate* isolate); |
| 550 | 547 |
| 551 // Construct a scope based on the scope info. | 548 // Construct a scope based on the scope info. |
| 552 Scope(Zone* zone, ScopeType type, Handle<ScopeInfo> scope_info); | 549 Scope(Zone* zone, ScopeType type, Handle<ScopeInfo> scope_info); |
| 553 | 550 |
| 554 // Construct a catch scope with a binding for the name. | 551 // Construct a catch scope with a binding for the name. |
| 555 Scope(Zone* zone, const AstRawString* catch_variable_name); | 552 Scope(Zone* zone, const AstRawString* catch_variable_name); |
| 556 | 553 |
| 557 void AddInnerScope(Scope* inner_scope) { | 554 void AddInnerScope(Scope* inner_scope) { |
| 558 inner_scope->sibling_ = inner_scope_; | 555 inner_scope->sibling_ = inner_scope_; |
| 559 inner_scope_ = inner_scope; | 556 inner_scope_ = inner_scope; |
| (...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 848 void AllocateModuleVariables(); | 845 void AllocateModuleVariables(); |
| 849 | 846 |
| 850 private: | 847 private: |
| 851 ModuleDescriptor* module_descriptor_; | 848 ModuleDescriptor* module_descriptor_; |
| 852 }; | 849 }; |
| 853 | 850 |
| 854 } // namespace internal | 851 } // namespace internal |
| 855 } // namespace v8 | 852 } // namespace v8 |
| 856 | 853 |
| 857 #endif // V8_AST_SCOPES_H_ | 854 #endif // V8_AST_SCOPES_H_ |
| OLD | NEW |