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 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
134 // Parse the top level of a whole script file and register declared classes | 134 // Parse the top level of a whole script file and register declared classes |
135 // in the given library. | 135 // in the given library. |
136 static void ParseCompilationUnit(const Library& library, | 136 static void ParseCompilationUnit(const Library& library, |
137 const Script& script); | 137 const Script& script); |
138 | 138 |
139 // Parse top level of a class and register all functions/fields. | 139 // Parse top level of a class and register all functions/fields. |
140 static void ParseClass(const Class& cls); | 140 static void ParseClass(const Class& cls); |
141 | 141 |
142 static void ParseFunction(ParsedFunction* parsed_function); | 142 static void ParseFunction(ParsedFunction* parsed_function); |
143 | 143 |
| 144 // Parse and evaluate the metadata expressions at token_pos in the |
| 145 // class namespace of class cls (which can be the implicit toplevel |
| 146 // class if the metadata is at the top-level). |
| 147 static RawObject* ParseMetadata(const Class& cls, intptr_t token_pos); |
| 148 |
144 // Format and print a message with source location. | 149 // Format and print a message with source location. |
145 // A null script means no source and a negative token_pos means no position. | 150 // A null script means no source and a negative token_pos means no position. |
146 static void PrintMessage(const Script& script, | 151 static void PrintMessage(const Script& script, |
147 intptr_t token_pos, | 152 intptr_t token_pos, |
148 const char* message_header, | 153 const char* message_header, |
149 const char* format, ...) PRINTF_ATTRIBUTE(4, 5); | 154 const char* format, ...) PRINTF_ATTRIBUTE(4, 5); |
150 | 155 |
151 // Build an error object containing a formatted error or warning message. | 156 // Build an error object containing a formatted error or warning message. |
152 // A null script means no source and a negative token_pos means no position. | 157 // A null script means no source and a negative token_pos means no position. |
153 static RawError* FormatError(const Script& script, | 158 static RawError* FormatError(const Script& script, |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
254 void ConsumeRightAngleBracket(); | 259 void ConsumeRightAngleBracket(); |
255 void ExpectToken(Token::Kind token_expected); | 260 void ExpectToken(Token::Kind token_expected); |
256 void ExpectSemicolon(); | 261 void ExpectSemicolon(); |
257 void UnexpectedToken(); | 262 void UnexpectedToken(); |
258 String* ExpectUserDefinedTypeIdentifier(const char* msg); | 263 String* ExpectUserDefinedTypeIdentifier(const char* msg); |
259 String* ExpectIdentifier(const char* msg); | 264 String* ExpectIdentifier(const char* msg); |
260 bool IsLiteral(const char* literal); | 265 bool IsLiteral(const char* literal); |
261 | 266 |
262 void SkipIf(Token::Kind); | 267 void SkipIf(Token::Kind); |
263 void SkipBlock(); | 268 void SkipBlock(); |
264 void SkipMetadata(); | 269 intptr_t SkipMetadata(); |
265 void SkipToMatchingParenthesis(); | 270 void SkipToMatchingParenthesis(); |
266 void SkipTypeArguments(); | 271 void SkipTypeArguments(); |
267 void SkipType(bool allow_void); | 272 void SkipType(bool allow_void); |
268 void SkipInitializers(); | 273 void SkipInitializers(); |
269 void SkipExpr(); | 274 void SkipExpr(); |
270 void SkipNestedExpr(); | 275 void SkipNestedExpr(); |
271 void SkipConditionalExpr(); | 276 void SkipConditionalExpr(); |
272 void SkipBinaryExpr(); | 277 void SkipBinaryExpr(); |
273 void SkipUnaryExpr(); | 278 void SkipUnaryExpr(); |
274 void SkipPostfixExpr(); | 279 void SkipPostfixExpr(); |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
318 AstNode* RunStaticFieldInitializer(const Field& field); | 323 AstNode* RunStaticFieldInitializer(const Field& field); |
319 RawObject* EvaluateConstConstructorCall( | 324 RawObject* EvaluateConstConstructorCall( |
320 const Class& type_class, | 325 const Class& type_class, |
321 const AbstractTypeArguments& type_arguments, | 326 const AbstractTypeArguments& type_arguments, |
322 const Function& constructor, | 327 const Function& constructor, |
323 ArgumentListNode* arguments); | 328 ArgumentListNode* arguments); |
324 AstNode* FoldConstExpr(intptr_t expr_pos, AstNode* expr); | 329 AstNode* FoldConstExpr(intptr_t expr_pos, AstNode* expr); |
325 | 330 |
326 // Support for parsing of scripts. | 331 // Support for parsing of scripts. |
327 void ParseTopLevel(); | 332 void ParseTopLevel(); |
328 void ParseClassDeclaration(const GrowableObjectArray& pending_classes); | 333 void ParseClassDeclaration(const GrowableObjectArray& pending_classes, |
| 334 intptr_t metadata_pos); |
329 void ParseClassDefinition(const Class& cls); | 335 void ParseClassDefinition(const Class& cls); |
330 void ParseMixinTypedef(const GrowableObjectArray& pending_classes); | 336 void ParseMixinTypedef(const GrowableObjectArray& pending_classes); |
331 void ParseTypedef(const GrowableObjectArray& pending_classes); | 337 void ParseTypedef(const GrowableObjectArray& pending_classes); |
332 void ParseTopLevelVariable(TopLevel* top_level); | 338 void ParseTopLevelVariable(TopLevel* top_level, intptr_t metadata_pos); |
333 void ParseTopLevelFunction(TopLevel* top_level); | 339 void ParseTopLevelFunction(TopLevel* top_level, intptr_t metadata_pos); |
334 void ParseTopLevelAccessor(TopLevel* top_level); | 340 void ParseTopLevelAccessor(TopLevel* top_level, intptr_t metadata_pos); |
| 341 RawArray* EvaluateMetadata(); |
335 | 342 |
336 // Support for parsing libraries. | 343 // Support for parsing libraries. |
337 RawObject* CallLibraryTagHandler(Dart_LibraryTag tag, | 344 RawObject* CallLibraryTagHandler(Dart_LibraryTag tag, |
338 intptr_t token_pos, | 345 intptr_t token_pos, |
339 const String& url); | 346 const String& url); |
340 void ParseIdentList(GrowableObjectArray* names); | 347 void ParseIdentList(GrowableObjectArray* names); |
341 void ParseLibraryDefinition(); | 348 void ParseLibraryDefinition(); |
342 void ParseLibraryName(); | 349 void ParseLibraryName(); |
343 void ParseLibraryImportExport(); | 350 void ParseLibraryImportExport(); |
344 void ParseLibraryPart(); | 351 void ParseLibraryPart(); |
345 void ParsePartHeader(); | 352 void ParsePartHeader(); |
346 void ParseLibraryNameObsoleteSyntax(); | 353 void ParseLibraryNameObsoleteSyntax(); |
347 void ParseLibraryImportObsoleteSyntax(); | 354 void ParseLibraryImportObsoleteSyntax(); |
348 void ParseLibraryIncludeObsoleteSyntax(); | 355 void ParseLibraryIncludeObsoleteSyntax(); |
349 | 356 |
350 void ResolveTypeFromClass(const Class& cls, | 357 void ResolveTypeFromClass(const Class& cls, |
351 ClassFinalizer::FinalizationKind finalization, | 358 ClassFinalizer::FinalizationKind finalization, |
352 AbstractType* type); | 359 AbstractType* type); |
353 RawAbstractType* ParseType(ClassFinalizer::FinalizationKind finalization); | 360 RawAbstractType* ParseType(ClassFinalizer::FinalizationKind finalization); |
354 void ParseTypeParameters(const Class& cls); | 361 void ParseTypeParameters(const Class& cls); |
355 RawAbstractTypeArguments* ParseTypeArguments( | 362 RawAbstractTypeArguments* ParseTypeArguments( |
356 Error* malformed_error, | 363 Error* malformed_error, |
357 ClassFinalizer::FinalizationKind finalization); | 364 ClassFinalizer::FinalizationKind finalization); |
358 void ParseQualIdent(QualIdent* qual_ident); | 365 void ParseQualIdent(QualIdent* qual_ident); |
359 void ParseMethodOrConstructor(ClassDesc* members, MemberDesc* method); | 366 void ParseMethodOrConstructor(ClassDesc* members, MemberDesc* method); |
360 void ParseFieldDefinition(ClassDesc* members, MemberDesc* field); | 367 void ParseFieldDefinition(ClassDesc* members, MemberDesc* field); |
361 void ParseClassMemberDefinition(ClassDesc* members); | 368 void ParseClassMemberDefinition(ClassDesc* members, |
| 369 intptr_t metadata_pos); |
362 void ParseFormalParameter(bool allow_explicit_default_value, | 370 void ParseFormalParameter(bool allow_explicit_default_value, |
363 ParamList* params); | 371 ParamList* params); |
364 void ParseFormalParameters(bool allow_explicit_default_values, | 372 void ParseFormalParameters(bool allow_explicit_default_values, |
365 ParamList* params); | 373 ParamList* params); |
366 void ParseFormalParameterList(bool allow_explicit_default_values, | 374 void ParseFormalParameterList(bool allow_explicit_default_values, |
367 ParamList* params); | 375 ParamList* params); |
368 void CheckConstFieldsInitialized(const Class& cls); | 376 void CheckConstFieldsInitialized(const Class& cls); |
369 void AddImplicitConstructor(const Class& cls); | 377 void AddImplicitConstructor(const Class& cls); |
370 void CheckConstructors(ClassDesc* members); | 378 void CheckConstructors(ClassDesc* members); |
371 AstNode* ParseExternalInitializedField(const Field& field); | 379 AstNode* ParseExternalInitializedField(const Field& field); |
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
515 AstNode* ParsePrimary(); | 523 AstNode* ParsePrimary(); |
516 AstNode* ParseStringLiteral(); | 524 AstNode* ParseStringLiteral(); |
517 String* ParseImportStringLiteral(); | 525 String* ParseImportStringLiteral(); |
518 AstNode* ParseCompoundLiteral(); | 526 AstNode* ParseCompoundLiteral(); |
519 AstNode* ParseListLiteral(intptr_t type_pos, | 527 AstNode* ParseListLiteral(intptr_t type_pos, |
520 bool is_const, | 528 bool is_const, |
521 const AbstractTypeArguments& type_arguments); | 529 const AbstractTypeArguments& type_arguments); |
522 AstNode* ParseMapLiteral(intptr_t type_pos, | 530 AstNode* ParseMapLiteral(intptr_t type_pos, |
523 bool is_const, | 531 bool is_const, |
524 const AbstractTypeArguments& type_arguments); | 532 const AbstractTypeArguments& type_arguments); |
525 AstNode* ParseNewOperator(); | 533 AstNode* ParseNewOperator(Token::Kind op_kind); |
526 AstNode* ParseArgumentDefinitionTest(); | 534 AstNode* ParseArgumentDefinitionTest(); |
527 | 535 |
528 // An implicit argument, if non-null, is prepended to the returned list. | 536 // An implicit argument, if non-null, is prepended to the returned list. |
529 ArgumentListNode* ParseActualParameters(ArgumentListNode* implicit_arguments, | 537 ArgumentListNode* ParseActualParameters(ArgumentListNode* implicit_arguments, |
530 bool require_const); | 538 bool require_const); |
531 AstNode* ParseStaticCall(const Class& cls, | 539 AstNode* ParseStaticCall(const Class& cls, |
532 const String& method_name, | 540 const String& method_name, |
533 intptr_t ident_pos); | 541 intptr_t ident_pos); |
534 AstNode* ParseInstanceCall(AstNode* receiver, const String& method_name); | 542 AstNode* ParseInstanceCall(AstNode* receiver, const String& method_name); |
535 AstNode* ParseClosureCall(AstNode* closure); | 543 AstNode* ParseClosureCall(AstNode* closure); |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
674 // code at all points in the try block where an exit from the block is | 682 // code at all points in the try block where an exit from the block is |
675 // done using 'return', 'break' or 'continue' statements. | 683 // done using 'return', 'break' or 'continue' statements. |
676 TryBlocks* try_blocks_list_; | 684 TryBlocks* try_blocks_list_; |
677 | 685 |
678 DISALLOW_COPY_AND_ASSIGN(Parser); | 686 DISALLOW_COPY_AND_ASSIGN(Parser); |
679 }; | 687 }; |
680 | 688 |
681 } // namespace dart | 689 } // namespace dart |
682 | 690 |
683 #endif // VM_PARSER_H_ | 691 #endif // VM_PARSER_H_ |
OLD | NEW |