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 VM_PARSER_H_ | 5 #ifndef VM_PARSER_H_ |
6 #define VM_PARSER_H_ | 6 #define VM_PARSER_H_ |
7 | 7 |
8 #include "include/dart_api.h" | 8 #include "include/dart_api.h" |
9 | 9 |
10 #include "lib/invocation_mirror.h" | 10 #include "lib/invocation_mirror.h" |
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
155 // A null script means no source and a negative token_pos means no position. | 155 // A null script means no source and a negative token_pos means no position. |
156 static RawError* FormatError(const Script& script, | 156 static RawError* FormatError(const Script& script, |
157 intptr_t token_pos, | 157 intptr_t token_pos, |
158 const char* message_header, | 158 const char* message_header, |
159 const char* format, | 159 const char* format, |
160 va_list args); | 160 va_list args); |
161 static RawError* FormatErrorMsg(const Script& script, | 161 static RawError* FormatErrorMsg(const Script& script, |
162 intptr_t token_pos, | 162 intptr_t token_pos, |
163 const char* message_header, | 163 const char* message_header, |
164 const char* format, ...) | 164 const char* format, ...) |
165 PRINTF_ATTRIBUTE(4, 5); | 165 PRINTF_ATTRIBUTE(4, 5); |
166 | 166 |
167 // Same as FormatError, but appends the new error to the 'prev_error'. | 167 // Same as FormatError, but appends the new error to the 'prev_error'. |
168 static RawError* FormatErrorWithAppend(const Error& prev_error, | 168 static RawError* FormatErrorWithAppend(const Error& prev_error, |
169 const Script& script, | 169 const Script& script, |
170 intptr_t token_pos, | 170 intptr_t token_pos, |
171 const char* message_header, | 171 const char* message_header, |
172 const char* format, | 172 const char* format, |
173 va_list args); | 173 va_list args); |
174 | 174 |
| 175 static void AddImplicitConstructor(const Class& cls); |
| 176 |
175 private: | 177 private: |
176 friend class EffectGraphVisitor; // For BuildNoSuchMethodArguments. | 178 friend class EffectGraphVisitor; // For BuildNoSuchMethodArguments. |
177 | 179 |
178 struct Block; | 180 struct Block; |
179 class TryBlocks; | 181 class TryBlocks; |
180 | 182 |
181 Parser(const Script& script, const Library& library, intptr_t token_pos); | 183 Parser(const Script& script, const Library& library, intptr_t token_pos); |
182 Parser(const Script& script, ParsedFunction* function, intptr_t token_pos); | 184 Parser(const Script& script, ParsedFunction* function, intptr_t token_pos); |
183 | 185 |
184 // The function for which we will generate code. | 186 // The function for which we will generate code. |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
291 Function& constructor, | 293 Function& constructor, |
292 const AbstractTypeArguments& type_arguments); | 294 const AbstractTypeArguments& type_arguments); |
293 | 295 |
294 // A null script means no source and a negative token_pos means no position. | 296 // A null script means no source and a negative token_pos means no position. |
295 static RawString* FormatMessage(const Script& script, | 297 static RawString* FormatMessage(const Script& script, |
296 intptr_t token_pos, | 298 intptr_t token_pos, |
297 const char* message_header, | 299 const char* message_header, |
298 const char* format, | 300 const char* format, |
299 va_list args); | 301 va_list args); |
300 | 302 |
301 // Reports error/warning message at location of current token. | 303 // Reports error/warning msg at location of current token in current script. |
302 void ErrorMsg(const char* msg, ...) PRINTF_ATTRIBUTE(2, 3); | 304 void ErrorMsg(const char* msg, ...) PRINTF_ATTRIBUTE(2, 3); |
303 void Warning(const char* msg, ...) PRINTF_ATTRIBUTE(2, 3); | 305 void Warning(const char* msg, ...) PRINTF_ATTRIBUTE(2, 3); |
304 void Unimplemented(const char* msg); | 306 void Unimplemented(const char* msg); |
305 | 307 |
306 // Reports error message at given location. | 308 // Reports error message at given location in current script. |
307 void ErrorMsg(intptr_t token_pos, const char* msg, ...) const | 309 void ErrorMsg(intptr_t token_pos, const char* msg, ...) const |
308 PRINTF_ATTRIBUTE(3, 4); | 310 PRINTF_ATTRIBUTE(3, 4); |
309 void Warning(intptr_t token_pos, const char* msg, ...) | 311 void Warning(intptr_t token_pos, const char* msg, ...) |
310 PRINTF_ATTRIBUTE(3, 4); | 312 PRINTF_ATTRIBUTE(3, 4); |
311 | 313 |
312 // Reports an already formatted error message. | 314 // Reports an already formatted error message. |
313 void ErrorMsg(const Error& error); | 315 static void ErrorMsg(const Error& error); |
314 | 316 |
315 // Concatenates two error messages, the previous and the current one. | 317 // Concatenates two error messages, the previous and the current one. |
316 void AppendErrorMsg( | 318 void AppendErrorMsg( |
317 const Error& prev_error, intptr_t token_pos, const char* format, ...) | 319 const Error& prev_error, intptr_t token_pos, const char* format, ...) |
318 PRINTF_ATTRIBUTE(4, 5); | 320 PRINTF_ATTRIBUTE(4, 5); |
319 | 321 |
320 const Instance& EvaluateConstExpr(AstNode* expr); | 322 const Instance& EvaluateConstExpr(AstNode* expr); |
321 AstNode* RunStaticFieldInitializer(const Field& field); | 323 AstNode* RunStaticFieldInitializer(const Field& field); |
322 RawObject* EvaluateConstConstructorCall( | 324 RawObject* EvaluateConstConstructorCall( |
323 const Class& type_class, | 325 const Class& type_class, |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
364 void ParseFieldDefinition(ClassDesc* members, MemberDesc* field); | 366 void ParseFieldDefinition(ClassDesc* members, MemberDesc* field); |
365 void ParseClassMemberDefinition(ClassDesc* members, | 367 void ParseClassMemberDefinition(ClassDesc* members, |
366 intptr_t metadata_pos); | 368 intptr_t metadata_pos); |
367 void ParseFormalParameter(bool allow_explicit_default_value, | 369 void ParseFormalParameter(bool allow_explicit_default_value, |
368 ParamList* params); | 370 ParamList* params); |
369 void ParseFormalParameters(bool allow_explicit_default_values, | 371 void ParseFormalParameters(bool allow_explicit_default_values, |
370 ParamList* params); | 372 ParamList* params); |
371 void ParseFormalParameterList(bool allow_explicit_default_values, | 373 void ParseFormalParameterList(bool allow_explicit_default_values, |
372 ParamList* params); | 374 ParamList* params); |
373 void CheckConstFieldsInitialized(const Class& cls); | 375 void CheckConstFieldsInitialized(const Class& cls); |
374 void AddImplicitConstructor(const Class& cls); | |
375 void CheckConstructors(ClassDesc* members); | 376 void CheckConstructors(ClassDesc* members); |
376 AstNode* ParseExternalInitializedField(const Field& field); | 377 AstNode* ParseExternalInitializedField(const Field& field); |
377 void ParseInitializedInstanceFields( | 378 void ParseInitializedInstanceFields( |
378 const Class& cls, | 379 const Class& cls, |
379 LocalVariable* receiver, | 380 LocalVariable* receiver, |
380 GrowableArray<Field*>* initialized_fields); | 381 GrowableArray<Field*>* initialized_fields); |
381 void CheckDuplicateFieldInit(intptr_t init_pos, | 382 void CheckDuplicateFieldInit(intptr_t init_pos, |
382 GrowableArray<Field*>* initialized_fields, | 383 GrowableArray<Field*>* initialized_fields, |
383 Field* field); | 384 Field* field); |
384 void GenerateSuperConstructorCall(const Class& cls, | 385 void GenerateSuperConstructorCall(const Class& cls, |
(...skipping 30 matching lines...) Expand all Loading... |
415 AstNode* ParseSuperCall(const String& function_name); | 416 AstNode* ParseSuperCall(const String& function_name); |
416 AstNode* ParseSuperFieldAccess(const String& field_name); | 417 AstNode* ParseSuperFieldAccess(const String& field_name); |
417 AstNode* ParseSuperOperator(); | 418 AstNode* ParseSuperOperator(); |
418 AstNode* BuildUnarySuperOperator(Token::Kind op, PrimaryNode* super); | 419 AstNode* BuildUnarySuperOperator(Token::Kind op, PrimaryNode* super); |
419 | 420 |
420 static void SetupDefaultsForOptionalParams(const ParamList* params, | 421 static void SetupDefaultsForOptionalParams(const ParamList* params, |
421 Array& default_values); | 422 Array& default_values); |
422 AstNode* CreateImplicitClosureNode(const Function& func, | 423 AstNode* CreateImplicitClosureNode(const Function& func, |
423 intptr_t token_pos, | 424 intptr_t token_pos, |
424 AstNode* receiver); | 425 AstNode* receiver); |
425 void AddFormalParamsToFunction(const ParamList* params, const Function& func); | 426 static void AddFormalParamsToFunction(const ParamList* params, |
| 427 const Function& func); |
426 void AddFormalParamsToScope(const ParamList* params, LocalScope* scope); | 428 void AddFormalParamsToScope(const ParamList* params, LocalScope* scope); |
427 | 429 |
428 SequenceNode* ParseConstructor(const Function& func, | 430 SequenceNode* ParseConstructor(const Function& func, |
429 Array& default_parameter_values); | 431 Array& default_parameter_values); |
430 SequenceNode* ParseFunc(const Function& func, | 432 SequenceNode* ParseFunc(const Function& func, |
431 Array& default_parameter_values); | 433 Array& default_parameter_values); |
432 | 434 |
433 void ParseNativeFunctionBlock(const ParamList* params, const Function& func); | 435 void ParseNativeFunctionBlock(const ParamList* params, const Function& func); |
434 | 436 |
435 SequenceNode* ParseInstanceGetter(const Function& func); | 437 SequenceNode* ParseInstanceGetter(const Function& func); |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
548 AstNode* GenerateStaticFieldLookup(const Field& field, | 550 AstNode* GenerateStaticFieldLookup(const Field& field, |
549 intptr_t ident_pos); | 551 intptr_t ident_pos); |
550 AstNode* ParseStaticFieldAccess(const Class& cls, | 552 AstNode* ParseStaticFieldAccess(const Class& cls, |
551 const String& field_name, | 553 const String& field_name, |
552 intptr_t ident_pos, | 554 intptr_t ident_pos, |
553 bool consume_cascades); | 555 bool consume_cascades); |
554 | 556 |
555 LocalVariable* LookupLocalScope(const String& ident); | 557 LocalVariable* LookupLocalScope(const String& ident); |
556 void CheckInstanceFieldAccess(intptr_t field_pos, const String& field_name); | 558 void CheckInstanceFieldAccess(intptr_t field_pos, const String& field_name); |
557 bool ParsingStaticMember() const; | 559 bool ParsingStaticMember() const; |
558 const Type* ReceiverType() const; | 560 static const AbstractType* ReceiverType(const Class& cls); |
559 bool IsInstantiatorRequired() const; | 561 bool IsInstantiatorRequired() const; |
560 bool ResolveIdentInLocalScope(intptr_t ident_pos, | 562 bool ResolveIdentInLocalScope(intptr_t ident_pos, |
561 const String &ident, | 563 const String &ident, |
562 AstNode** node); | 564 AstNode** node); |
563 static const bool kResolveLocally = true; | 565 static const bool kResolveLocally = true; |
564 static const bool kResolveIncludingImports = false; | 566 static const bool kResolveIncludingImports = false; |
565 | 567 |
566 // Resolve a primary identifier in the library or prefix scope and | 568 // Resolve a primary identifier in the library or prefix scope and |
567 // generate the corresponding AstNode. | 569 // generate the corresponding AstNode. |
568 AstNode* ResolveIdentInCurrentLibraryScope(intptr_t ident_pos, | 570 AstNode* ResolveIdentInCurrentLibraryScope(intptr_t ident_pos, |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
689 // Each try in this function gets its own try index. | 691 // Each try in this function gets its own try index. |
690 intptr_t AllocateTryIndex() { return ++last_used_try_index_; } | 692 intptr_t AllocateTryIndex() { return ++last_used_try_index_; } |
691 intptr_t last_used_try_index_; | 693 intptr_t last_used_try_index_; |
692 | 694 |
693 DISALLOW_COPY_AND_ASSIGN(Parser); | 695 DISALLOW_COPY_AND_ASSIGN(Parser); |
694 }; | 696 }; |
695 | 697 |
696 } // namespace dart | 698 } // namespace dart |
697 | 699 |
698 #endif // VM_PARSER_H_ | 700 #endif // VM_PARSER_H_ |
OLD | NEW |