OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #ifndef RUNTIME_VM_PARSER_H_ | 5 #ifndef RUNTIME_VM_PARSER_H_ |
6 #define RUNTIME_VM_PARSER_H_ | 6 #define RUNTIME_VM_PARSER_H_ |
7 | 7 |
8 #include "include/dart_api.h" | 8 #include "include/dart_api.h" |
9 | 9 |
10 #include "platform/assert.h" | 10 #include "platform/assert.h" |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
89 // The class ParsedFunction holds the result of parsing a function. | 89 // The class ParsedFunction holds the result of parsing a function. |
90 class ParsedFunction : public ZoneAllocated { | 90 class ParsedFunction : public ZoneAllocated { |
91 public: | 91 public: |
92 ParsedFunction(Thread* thread, const Function& function) | 92 ParsedFunction(Thread* thread, const Function& function) |
93 : thread_(thread), | 93 : thread_(thread), |
94 function_(function), | 94 function_(function), |
95 code_(Code::Handle(zone(), function.unoptimized_code())), | 95 code_(Code::Handle(zone(), function.unoptimized_code())), |
96 node_sequence_(NULL), | 96 node_sequence_(NULL), |
97 regexp_compile_data_(NULL), | 97 regexp_compile_data_(NULL), |
98 instantiator_(NULL), | 98 instantiator_(NULL), |
| 99 function_instantiator_(NULL), |
99 current_context_var_(NULL), | 100 current_context_var_(NULL), |
100 expression_temp_var_(NULL), | 101 expression_temp_var_(NULL), |
101 finally_return_temp_var_(NULL), | 102 finally_return_temp_var_(NULL), |
102 deferred_prefixes_(new ZoneGrowableArray<const LibraryPrefix*>()), | 103 deferred_prefixes_(new ZoneGrowableArray<const LibraryPrefix*>()), |
103 guarded_fields_(new ZoneGrowableArray<const Field*>()), | 104 guarded_fields_(new ZoneGrowableArray<const Field*>()), |
104 default_parameter_values_(NULL), | 105 default_parameter_values_(NULL), |
105 first_parameter_index_(0), | 106 first_parameter_index_(0), |
106 first_stack_local_index_(0), | 107 first_stack_local_index_(0), |
107 num_copied_params_(0), | 108 num_copied_params_(0), |
108 num_stack_locals_(0), | 109 num_stack_locals_(0), |
(...skipping 14 matching lines...) Expand all Loading... |
123 SequenceNode* node_sequence() const { return node_sequence_; } | 124 SequenceNode* node_sequence() const { return node_sequence_; } |
124 void SetNodeSequence(SequenceNode* node_sequence); | 125 void SetNodeSequence(SequenceNode* node_sequence); |
125 | 126 |
126 RegExpCompileData* regexp_compile_data() const { | 127 RegExpCompileData* regexp_compile_data() const { |
127 return regexp_compile_data_; | 128 return regexp_compile_data_; |
128 } | 129 } |
129 void SetRegExpCompileData(RegExpCompileData* regexp_compile_data); | 130 void SetRegExpCompileData(RegExpCompileData* regexp_compile_data); |
130 | 131 |
131 LocalVariable* instantiator() const { return instantiator_; } | 132 LocalVariable* instantiator() const { return instantiator_; } |
132 void set_instantiator(LocalVariable* instantiator) { | 133 void set_instantiator(LocalVariable* instantiator) { |
133 // May be NULL. | 134 ASSERT(instantiator != NULL); |
134 instantiator_ = instantiator; | 135 instantiator_ = instantiator; |
135 } | 136 } |
| 137 LocalVariable* function_instantiator() const { |
| 138 return function_instantiator_; |
| 139 } |
| 140 void set_function_instantiator(LocalVariable* function_instantiator) { |
| 141 ASSERT(function_instantiator != NULL); |
| 142 function_instantiator_ = function_instantiator; |
| 143 } |
136 | 144 |
137 void set_default_parameter_values(ZoneGrowableArray<const Instance*>* list) { | 145 void set_default_parameter_values(ZoneGrowableArray<const Instance*>* list) { |
138 default_parameter_values_ = list; | 146 default_parameter_values_ = list; |
139 #if defined(DEBUG) | 147 #if defined(DEBUG) |
140 if (list == NULL) return; | 148 if (list == NULL) return; |
141 for (intptr_t i = 0; i < list->length(); i++) { | 149 for (intptr_t i = 0; i < list->length(); i++) { |
142 ASSERT(list->At(i)->IsZoneHandle() || list->At(i)->InVMHeap()); | 150 ASSERT(list->At(i)->IsZoneHandle() || list->At(i)->InVMHeap()); |
143 } | 151 } |
144 #endif | 152 #endif |
145 } | 153 } |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
217 | 225 |
218 kernel::ScopeBuildingResult* EnsureKernelScopes(); | 226 kernel::ScopeBuildingResult* EnsureKernelScopes(); |
219 | 227 |
220 private: | 228 private: |
221 Thread* thread_; | 229 Thread* thread_; |
222 const Function& function_; | 230 const Function& function_; |
223 Code& code_; | 231 Code& code_; |
224 SequenceNode* node_sequence_; | 232 SequenceNode* node_sequence_; |
225 RegExpCompileData* regexp_compile_data_; | 233 RegExpCompileData* regexp_compile_data_; |
226 LocalVariable* instantiator_; | 234 LocalVariable* instantiator_; |
| 235 LocalVariable* function_instantiator_; |
227 LocalVariable* current_context_var_; | 236 LocalVariable* current_context_var_; |
228 LocalVariable* expression_temp_var_; | 237 LocalVariable* expression_temp_var_; |
229 LocalVariable* finally_return_temp_var_; | 238 LocalVariable* finally_return_temp_var_; |
230 ZoneGrowableArray<const LibraryPrefix*>* deferred_prefixes_; | 239 ZoneGrowableArray<const LibraryPrefix*>* deferred_prefixes_; |
231 ZoneGrowableArray<const Field*>* guarded_fields_; | 240 ZoneGrowableArray<const Field*>* guarded_fields_; |
232 ZoneGrowableArray<const Instance*>* default_parameter_values_; | 241 ZoneGrowableArray<const Instance*>* default_parameter_values_; |
233 | 242 |
234 int first_parameter_index_; | 243 int first_parameter_index_; |
235 int first_stack_local_index_; | 244 int first_stack_local_index_; |
236 int num_copied_params_; | 245 int num_copied_params_; |
(...skipping 426 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
663 | 672 |
664 void AddAsyncClosureParameters(ParamList* params); | 673 void AddAsyncClosureParameters(ParamList* params); |
665 void AddContinuationVariables(); | 674 void AddContinuationVariables(); |
666 void AddAsyncClosureVariables(); | 675 void AddAsyncClosureVariables(); |
667 void AddAsyncGeneratorVariables(); | 676 void AddAsyncGeneratorVariables(); |
668 | 677 |
669 LocalVariable* LookupReceiver(LocalScope* from_scope, bool test_only); | 678 LocalVariable* LookupReceiver(LocalScope* from_scope, bool test_only); |
670 LocalVariable* LookupTypeArgumentsParameter(LocalScope* from_scope, | 679 LocalVariable* LookupTypeArgumentsParameter(LocalScope* from_scope, |
671 bool test_only); | 680 bool test_only); |
672 void CaptureInstantiator(); | 681 void CaptureInstantiator(); |
673 void CaptureFunctionInstantiator(); | 682 void CaptureFunctionInstantiators(); |
| 683 void CaptureAllInstantiators(); |
674 AstNode* LoadReceiver(TokenPosition token_pos); | 684 AstNode* LoadReceiver(TokenPosition token_pos); |
675 AstNode* LoadFieldIfUnresolved(AstNode* node); | 685 AstNode* LoadFieldIfUnresolved(AstNode* node); |
676 AstNode* LoadClosure(PrimaryNode* primary); | 686 AstNode* LoadClosure(PrimaryNode* primary); |
677 AstNode* LoadTypeParameter(PrimaryNode* primary); | 687 AstNode* LoadTypeParameter(PrimaryNode* primary); |
678 InstanceGetterNode* CallGetter(TokenPosition token_pos, | 688 InstanceGetterNode* CallGetter(TokenPosition token_pos, |
679 AstNode* object, | 689 AstNode* object, |
680 const String& name); | 690 const String& name); |
681 | 691 |
682 AstNode* ParseAssertStatement(bool is_const = false); | 692 AstNode* ParseAssertStatement(bool is_const = false); |
683 AstNode* ParseJump(String* label_name); | 693 AstNode* ParseJump(String* label_name); |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
827 AstNode* GenerateStaticFieldAccess(const Class& cls, | 837 AstNode* GenerateStaticFieldAccess(const Class& cls, |
828 const String& field_name, | 838 const String& field_name, |
829 TokenPosition ident_pos); | 839 TokenPosition ident_pos); |
830 | 840 |
831 LocalVariable* LookupLocalScope(const String& ident); | 841 LocalVariable* LookupLocalScope(const String& ident); |
832 void CheckInstanceFieldAccess(TokenPosition field_pos, | 842 void CheckInstanceFieldAccess(TokenPosition field_pos, |
833 const String& field_name); | 843 const String& field_name); |
834 bool ParsingStaticMember() const; | 844 bool ParsingStaticMember() const; |
835 const AbstractType* ReceiverType(const Class& cls); | 845 const AbstractType* ReceiverType(const Class& cls); |
836 bool IsInstantiatorRequired() const; | 846 bool IsInstantiatorRequired() const; |
| 847 bool AreFunctionInstantiatorsRequired() const; |
| 848 bool InGenericFunctionScope() const; |
837 bool ResolveIdentInLocalScope(TokenPosition ident_pos, | 849 bool ResolveIdentInLocalScope(TokenPosition ident_pos, |
838 const String& ident, | 850 const String& ident, |
839 AstNode** node, | 851 AstNode** node, |
840 intptr_t* function_level); | 852 intptr_t* function_level); |
841 static const bool kResolveLocally = true; | 853 static const bool kResolveLocally = true; |
842 static const bool kResolveIncludingImports = false; | 854 static const bool kResolveIncludingImports = false; |
843 | 855 |
844 // Resolve a primary identifier in the library or prefix scope and | 856 // Resolve a primary identifier in the library or prefix scope and |
845 // generate the corresponding AstNode. | 857 // generate the corresponding AstNode. |
846 AstNode* ResolveIdentInCurrentLibraryScope(TokenPosition ident_pos, | 858 AstNode* ResolveIdentInCurrentLibraryScope(TokenPosition ident_pos, |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
984 | 996 |
985 intptr_t recursion_counter_; | 997 intptr_t recursion_counter_; |
986 friend class RecursionChecker; | 998 friend class RecursionChecker; |
987 | 999 |
988 DISALLOW_COPY_AND_ASSIGN(Parser); | 1000 DISALLOW_COPY_AND_ASSIGN(Parser); |
989 }; | 1001 }; |
990 | 1002 |
991 } // namespace dart | 1003 } // namespace dart |
992 | 1004 |
993 #endif // RUNTIME_VM_PARSER_H_ | 1005 #endif // RUNTIME_VM_PARSER_H_ |
OLD | NEW |