Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(482)

Side by Side Diff: runtime/vm/parser.h

Issue 2736733005: Manage and capture class and function instantiators in the parser. (Closed)
Patch Set: work in progress Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
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
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
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
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_
OLDNEW
« no previous file with comments | « runtime/vm/object.cc ('k') | runtime/vm/parser.cc » ('j') | runtime/vm/parser.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698