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

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

Issue 1644793002: Replace intptr_t with TokenDescriptor (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 10 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
« no previous file with comments | « runtime/vm/object_test.cc ('k') | runtime/vm/parser.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 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 "platform/assert.h" 10 #include "platform/assert.h"
(...skipping 215 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 kParameterEntrySize, 226 kParameterEntrySize,
227 }; 227 };
228 static RawObject* ParseFunctionParameters(const Function& func); 228 static RawObject* ParseFunctionParameters(const Function& func);
229 229
230 private: 230 private:
231 friend class EffectGraphVisitor; // For BuildNoSuchMethodArguments. 231 friend class EffectGraphVisitor; // For BuildNoSuchMethodArguments.
232 232
233 struct Block; 233 struct Block;
234 class TryStack; 234 class TryStack;
235 235
236 Parser(const Script& script, const Library& library, intptr_t token_pos); 236 Parser(const Script& script,
237 Parser(const Script& script, ParsedFunction* function, intptr_t token_pos); 237 const Library& library,
238 TokenPosition token_pos);
239 Parser(const Script& script,
240 ParsedFunction* function,
241 TokenPosition token_pos);
238 ~Parser(); 242 ~Parser();
239 243
240 // The function for which we will generate code. 244 // The function for which we will generate code.
241 const Function& current_function() const; 245 const Function& current_function() const;
242 246
243 // The innermost function being parsed. 247 // The innermost function being parsed.
244 const Function& innermost_function() const; 248 const Function& innermost_function() const;
245 249
246 // Note that a local function may be parsed multiple times. It is first parsed 250 // Note that a local function may be parsed multiple times. It is first parsed
247 // when its outermost enclosing function is being parsed. It is then parsed 251 // when its outermost enclosing function is being parsed. It is then parsed
(...skipping 19 matching lines...) Expand all
267 // The class being parsed. 271 // The class being parsed.
268 const Class& current_class() const; 272 const Class& current_class() const;
269 void set_current_class(const Class& value); 273 void set_current_class(const Class& value);
270 274
271 // ParsedFunction accessor. 275 // ParsedFunction accessor.
272 ParsedFunction* parsed_function() const { 276 ParsedFunction* parsed_function() const {
273 return parsed_function_; 277 return parsed_function_;
274 } 278 }
275 279
276 const Script& script() const { return script_; } 280 const Script& script() const { return script_; }
277 void SetScript(const Script& script, intptr_t token_pos); 281 void SetScript(const Script& script, TokenPosition token_pos);
278 282
279 const Library& library() const { return library_; } 283 const Library& library() const { return library_; }
280 void set_library(const Library& value) const { library_ = value.raw(); } 284 void set_library(const Library& value) const { library_ = value.raw(); }
281 285
282 // Parsing a library or a regular source script. 286 // Parsing a library or a regular source script.
283 bool is_library_source() const { 287 bool is_library_source() const {
284 return (script_.kind() == RawScript::kScriptTag) || 288 return (script_.kind() == RawScript::kScriptTag) ||
285 (script_.kind() == RawScript::kLibraryTag); 289 (script_.kind() == RawScript::kLibraryTag);
286 } 290 }
287 291
288 bool is_part_source() const { 292 bool is_part_source() const {
289 return script_.kind() == RawScript::kSourceTag; 293 return script_.kind() == RawScript::kSourceTag;
290 } 294 }
291 295
292 // Parsing library patch script. 296 // Parsing library patch script.
293 bool is_patch_source() const { 297 bool is_patch_source() const {
294 return script_.kind() == RawScript::kPatchTag; 298 return script_.kind() == RawScript::kPatchTag;
295 } 299 }
296 300
297 intptr_t TokenPos() const { return tokens_iterator_.CurrentPosition(); } 301 TokenPosition TokenPos() const {
298 intptr_t PrevTokenPos() const { return prev_token_pos_; } 302 return tokens_iterator_.CurrentPosition();
303 }
304 TokenPosition PrevTokenPos() const { return prev_token_pos_; }
299 305
300 Token::Kind CurrentToken() { 306 Token::Kind CurrentToken() {
301 if (token_kind_ == Token::kILLEGAL) { 307 if (token_kind_ == Token::kILLEGAL) {
302 ComputeCurrentToken(); 308 ComputeCurrentToken();
303 } 309 }
304 return token_kind_; 310 return token_kind_;
305 } 311 }
306 312
307 void ComputeCurrentToken(); 313 void ComputeCurrentToken();
308 314
309 RawLibraryPrefix* ParsePrefix(); 315 RawLibraryPrefix* ParsePrefix();
310 316
311 Token::Kind LookaheadToken(int num_tokens); 317 Token::Kind LookaheadToken(int num_tokens);
312 String* CurrentLiteral() const; 318 String* CurrentLiteral() const;
313 RawDouble* CurrentDoubleLiteral() const; 319 RawDouble* CurrentDoubleLiteral() const;
314 RawInteger* CurrentIntegerLiteral() const; 320 RawInteger* CurrentIntegerLiteral() const;
315 321
316 // Sets parser to given token position in the stream. 322 // Sets parser to given token position in the stream.
317 void SetPosition(intptr_t position); 323 void SetPosition(TokenPosition position);
318 324
319 void ConsumeToken() { 325 void ConsumeToken() {
320 // Reset cache and advance the token. 326 // Reset cache and advance the token.
321 prev_token_pos_ = tokens_iterator_.CurrentPosition(); 327 prev_token_pos_ = tokens_iterator_.CurrentPosition();
322 token_kind_ = Token::kILLEGAL; 328 token_kind_ = Token::kILLEGAL;
323 tokens_iterator_.Advance(); 329 tokens_iterator_.Advance();
324 INC_STAT(thread(), num_tokens_consumed, 1); 330 INC_STAT(thread(), num_tokens_consumed, 1);
325 } 331 }
326 void ConsumeRightAngleBracket(); 332 void ConsumeRightAngleBracket();
327 void CheckToken(Token::Kind token_expected, const char* msg = NULL); 333 void CheckToken(Token::Kind token_expected, const char* msg = NULL);
328 void ExpectToken(Token::Kind token_expected); 334 void ExpectToken(Token::Kind token_expected);
329 void ExpectSemicolon(); 335 void ExpectSemicolon();
330 void UnexpectedToken(); 336 void UnexpectedToken();
331 String* ExpectUserDefinedTypeIdentifier(const char* msg); 337 String* ExpectUserDefinedTypeIdentifier(const char* msg);
332 String* ExpectIdentifier(const char* msg); 338 String* ExpectIdentifier(const char* msg);
333 bool IsAwaitKeyword(); 339 bool IsAwaitKeyword();
334 bool IsYieldKeyword(); 340 bool IsYieldKeyword();
335 341
336 void SkipIf(Token::Kind); 342 void SkipIf(Token::Kind);
337 void SkipToMatching(); 343 void SkipToMatching();
338 void SkipToMatchingParenthesis(); 344 void SkipToMatchingParenthesis();
339 void SkipBlock(); 345 void SkipBlock();
340 intptr_t SkipMetadata(); 346 TokenPosition SkipMetadata();
341 void SkipTypeArguments(); 347 void SkipTypeArguments();
342 void SkipType(bool allow_void); 348 void SkipType(bool allow_void);
343 void SkipInitializers(); 349 void SkipInitializers();
344 void SkipExpr(); 350 void SkipExpr();
345 void SkipNestedExpr(); 351 void SkipNestedExpr();
346 void SkipConditionalExpr(); 352 void SkipConditionalExpr();
347 void SkipBinaryExpr(); 353 void SkipBinaryExpr();
348 void SkipUnaryExpr(); 354 void SkipUnaryExpr();
349 void SkipPostfixExpr(); 355 void SkipPostfixExpr();
350 void SkipSelectors(); 356 void SkipSelectors();
351 void SkipPrimary(); 357 void SkipPrimary();
352 void SkipCompoundLiteral(); 358 void SkipCompoundLiteral();
353 void SkipSymbolLiteral(); 359 void SkipSymbolLiteral();
354 void SkipNewOperator(); 360 void SkipNewOperator();
355 void SkipActualParameters(); 361 void SkipActualParameters();
356 void SkipMapLiteral(); 362 void SkipMapLiteral();
357 void SkipListLiteral(); 363 void SkipListLiteral();
358 void SkipFunctionLiteral(); 364 void SkipFunctionLiteral();
359 void SkipStringLiteral(); 365 void SkipStringLiteral();
360 void SkipQualIdent(); 366 void SkipQualIdent();
361 void SkipFunctionPreamble(); 367 void SkipFunctionPreamble();
362 368
363 AstNode* DartPrint(const char* str); 369 AstNode* DartPrint(const char* str);
364 370
365 void CheckConstructorCallTypeArguments(intptr_t pos, 371 void CheckConstructorCallTypeArguments(TokenPosition pos,
366 const Function& constructor, 372 const Function& constructor,
367 const TypeArguments& type_arguments); 373 const TypeArguments& type_arguments);
368 374
369 // Report error if parsed code is too deeply nested; avoid stack overflow. 375 // Report error if parsed code is too deeply nested; avoid stack overflow.
370 void CheckStack(); 376 void CheckStack();
371 377
372 // Report already formatted error. 378 // Report already formatted error.
373 static void ReportError(const Error& error); 379 static void ReportError(const Error& error);
374 380
375 // Concatenate and report an already formatted error and a new error message. 381 // Concatenate and report an already formatted error and a new error message.
376 static void ReportErrors(const Error& prev_error, 382 static void ReportErrors(const Error& prev_error,
377 const Script& script, intptr_t token_pos, 383 const Script& script, TokenPosition token_pos,
378 const char* format, ...) PRINTF_ATTRIBUTE(4, 5); 384 const char* format, ...) PRINTF_ATTRIBUTE(4, 5);
379 385
380 // Report error message at location of current token in current script. 386 // Report error message at location of current token in current script.
381 void ReportError(const char* msg, ...) const PRINTF_ATTRIBUTE(2, 3); 387 void ReportError(const char* msg, ...) const PRINTF_ATTRIBUTE(2, 3);
382 388
383 void ReportErrorBefore(const char* format, ...) PRINTF_ATTRIBUTE(2, 3); 389 void ReportErrorBefore(const char* format, ...) PRINTF_ATTRIBUTE(2, 3);
384 390
385 // Report error message at given location in current script. 391 // Report error message at given location in current script.
386 void ReportError(intptr_t token_pos, 392 void ReportError(TokenPosition token_pos,
387 const char* msg, ...) const PRINTF_ATTRIBUTE(3, 4); 393 const char* msg, ...) const PRINTF_ATTRIBUTE(3, 4);
388 394
389 // Report warning message at location of current token in current script. 395 // Report warning message at location of current token in current script.
390 void ReportWarning(const char* msg, ...) const PRINTF_ATTRIBUTE(2, 3); 396 void ReportWarning(const char* msg, ...) const PRINTF_ATTRIBUTE(2, 3);
391 397
392 // Report warning message at given location in current script. 398 // Report warning message at given location in current script.
393 void ReportWarning(intptr_t token_pos, 399 void ReportWarning(TokenPosition token_pos,
394 const char* msg, ...) const PRINTF_ATTRIBUTE(3, 4); 400 const char* msg, ...) const PRINTF_ATTRIBUTE(3, 4);
395 401
396 void CheckRecursiveInvocation(); 402 void CheckRecursiveInvocation();
397 403
398 const Instance& EvaluateConstExpr(intptr_t expr_pos, AstNode* expr); 404 const Instance& EvaluateConstExpr(TokenPosition expr_pos, AstNode* expr);
399 StaticGetterNode* RunStaticFieldInitializer(const Field& field, 405 StaticGetterNode* RunStaticFieldInitializer(const Field& field,
400 intptr_t field_ref_pos); 406 TokenPosition field_ref_pos);
401 RawObject* EvaluateConstConstructorCall(const Class& type_class, 407 RawObject* EvaluateConstConstructorCall(const Class& type_class,
402 const TypeArguments& type_arguments, 408 const TypeArguments& type_arguments,
403 const Function& constructor, 409 const Function& constructor,
404 ArgumentListNode* arguments); 410 ArgumentListNode* arguments);
405 LiteralNode* FoldConstExpr(intptr_t expr_pos, AstNode* expr); 411 LiteralNode* FoldConstExpr(TokenPosition expr_pos, AstNode* expr);
406 412
407 // Support for parsing of scripts. 413 // Support for parsing of scripts.
408 void ParseTopLevel(); 414 void ParseTopLevel();
409 void ParseEnumDeclaration(const GrowableObjectArray& pending_classes, 415 void ParseEnumDeclaration(const GrowableObjectArray& pending_classes,
410 const Object& tl_owner, 416 const Object& tl_owner,
411 intptr_t metadata_pos); 417 TokenPosition metadata_pos);
412 void ParseEnumDefinition(const Class& cls); 418 void ParseEnumDefinition(const Class& cls);
413 void ParseClassDeclaration(const GrowableObjectArray& pending_classes, 419 void ParseClassDeclaration(const GrowableObjectArray& pending_classes,
414 const Object& tl_owner, 420 const Object& tl_owner,
415 intptr_t metadata_pos); 421 TokenPosition metadata_pos);
416 void ParseClassDefinition(const Class& cls); 422 void ParseClassDefinition(const Class& cls);
417 void ParseMixinAppAlias(const GrowableObjectArray& pending_classes, 423 void ParseMixinAppAlias(const GrowableObjectArray& pending_classes,
418 const Object& tl_owner, 424 const Object& tl_owner,
419 intptr_t metadata_pos); 425 TokenPosition metadata_pos);
420 void ParseTypedef(const GrowableObjectArray& pending_classes, 426 void ParseTypedef(const GrowableObjectArray& pending_classes,
421 const Object& tl_owner, 427 const Object& tl_owner,
422 intptr_t metadata_pos); 428 TokenPosition metadata_pos);
423 void ParseTopLevelVariable(TopLevel* top_level, 429 void ParseTopLevelVariable(TopLevel* top_level,
424 const Object& owner, intptr_t metadata_pos); 430 const Object& owner, TokenPosition metadata_pos);
425 void ParseTopLevelFunction(TopLevel* top_level, 431 void ParseTopLevelFunction(TopLevel* top_level,
426 const Object& owner, intptr_t metadata_pos); 432 const Object& owner, TokenPosition metadata_pos);
427 void ParseTopLevelAccessor(TopLevel* top_level, 433 void ParseTopLevelAccessor(TopLevel* top_level,
428 const Object& owner, intptr_t metadata_pos); 434 const Object& owner, TokenPosition metadata_pos);
429 RawArray* EvaluateMetadata(); 435 RawArray* EvaluateMetadata();
430 436
431 RawFunction::AsyncModifier ParseFunctionModifier(); 437 RawFunction::AsyncModifier ParseFunctionModifier();
432 438
433 // Support for parsing libraries. 439 // Support for parsing libraries.
434 RawObject* CallLibraryTagHandler(Dart_LibraryTag tag, 440 RawObject* CallLibraryTagHandler(Dart_LibraryTag tag,
435 intptr_t token_pos, 441 TokenPosition token_pos,
436 const String& url); 442 const String& url);
437 void ParseIdentList(GrowableObjectArray* names); 443 void ParseIdentList(GrowableObjectArray* names);
438 void ParseLibraryDefinition(const Object& tl_owner); 444 void ParseLibraryDefinition(const Object& tl_owner);
439 void ParseLibraryName(); 445 void ParseLibraryName();
440 void ParseLibraryImportExport(const Object& tl_owner, 446 void ParseLibraryImportExport(const Object& tl_owner,
441 intptr_t metadata_pos); 447 TokenPosition metadata_pos);
442 void ParseLibraryPart(); 448 void ParseLibraryPart();
443 void ParsePartHeader(); 449 void ParsePartHeader();
444 void ParseLibraryNameObsoleteSyntax(); 450 void ParseLibraryNameObsoleteSyntax();
445 void ParseLibraryImportObsoleteSyntax(); 451 void ParseLibraryImportObsoleteSyntax();
446 void ParseLibraryIncludeObsoleteSyntax(); 452 void ParseLibraryIncludeObsoleteSyntax();
447 453
448 void ResolveTypeFromClass(const Class& cls, 454 void ResolveTypeFromClass(const Class& cls,
449 ClassFinalizer::FinalizationKind finalization, 455 ClassFinalizer::FinalizationKind finalization,
450 AbstractType* type); 456 AbstractType* type);
451 RawAbstractType* ParseType(ClassFinalizer::FinalizationKind finalization, 457 RawAbstractType* ParseType(ClassFinalizer::FinalizationKind finalization,
452 bool allow_deferred_type = false, 458 bool allow_deferred_type = false,
453 bool consume_unresolved_prefix = true); 459 bool consume_unresolved_prefix = true);
454 RawAbstractType* ParseType( 460 RawAbstractType* ParseType(
455 ClassFinalizer::FinalizationKind finalization, 461 ClassFinalizer::FinalizationKind finalization,
456 bool allow_deferred_type, 462 bool allow_deferred_type,
457 bool consume_unresolved_prefix, 463 bool consume_unresolved_prefix,
458 LibraryPrefix* prefix); 464 LibraryPrefix* prefix);
459 465
460 void ParseTypeParameters(const Class& cls); 466 void ParseTypeParameters(const Class& cls);
461 RawTypeArguments* ParseTypeArguments( 467 RawTypeArguments* ParseTypeArguments(
462 ClassFinalizer::FinalizationKind finalization); 468 ClassFinalizer::FinalizationKind finalization);
463 void ParseMethodOrConstructor(ClassDesc* members, MemberDesc* method); 469 void ParseMethodOrConstructor(ClassDesc* members, MemberDesc* method);
464 void ParseFieldDefinition(ClassDesc* members, MemberDesc* field); 470 void ParseFieldDefinition(ClassDesc* members, MemberDesc* field);
465 void CheckMemberNameConflict(ClassDesc* members, MemberDesc* member); 471 void CheckMemberNameConflict(ClassDesc* members, MemberDesc* member);
466 void ParseClassMemberDefinition(ClassDesc* members, 472 void ParseClassMemberDefinition(ClassDesc* members,
467 intptr_t metadata_pos); 473 TokenPosition metadata_pos);
468 void ParseFormalParameter(bool allow_explicit_default_value, 474 void ParseFormalParameter(bool allow_explicit_default_value,
469 bool evaluate_metadata, 475 bool evaluate_metadata,
470 ParamList* params); 476 ParamList* params);
471 void ParseFormalParameters(bool allow_explicit_default_values, 477 void ParseFormalParameters(bool allow_explicit_default_values,
472 bool evaluate_metadata, 478 bool evaluate_metadata,
473 ParamList* params); 479 ParamList* params);
474 void ParseFormalParameterList(bool allow_explicit_default_values, 480 void ParseFormalParameterList(bool allow_explicit_default_values,
475 bool evaluate_metadata, 481 bool evaluate_metadata,
476 ParamList* params); 482 ParamList* params);
477 void CheckFieldsInitialized(const Class& cls); 483 void CheckFieldsInitialized(const Class& cls);
478 void AddImplicitConstructor(const Class& cls); 484 void AddImplicitConstructor(const Class& cls);
479 void CheckConstructors(ClassDesc* members); 485 void CheckConstructors(ClassDesc* members);
480 AstNode* ParseExternalInitializedField(const Field& field); 486 AstNode* ParseExternalInitializedField(const Field& field);
481 void ParseInitializedInstanceFields( 487 void ParseInitializedInstanceFields(
482 const Class& cls, 488 const Class& cls,
483 LocalVariable* receiver, 489 LocalVariable* receiver,
484 GrowableArray<Field*>* initialized_fields); 490 GrowableArray<Field*>* initialized_fields);
485 AstNode* CheckDuplicateFieldInit( 491 AstNode* CheckDuplicateFieldInit(
486 intptr_t init_pos, 492 TokenPosition init_pos,
487 GrowableArray<Field*>* initialized_fields, 493 GrowableArray<Field*>* initialized_fields,
488 AstNode* instance, 494 AstNode* instance,
489 Field* field, 495 Field* field,
490 AstNode* init_value); 496 AstNode* init_value);
491 StaticCallNode* GenerateSuperConstructorCall( 497 StaticCallNode* GenerateSuperConstructorCall(
492 const Class& cls, 498 const Class& cls,
493 intptr_t supercall_pos, 499 TokenPosition supercall_pos,
494 LocalVariable* receiver, 500 LocalVariable* receiver,
495 ArgumentListNode* forwarding_args); 501 ArgumentListNode* forwarding_args);
496 StaticCallNode* ParseSuperInitializer( 502 StaticCallNode* ParseSuperInitializer(
497 const Class& cls, 503 const Class& cls,
498 LocalVariable* receiver); 504 LocalVariable* receiver);
499 AstNode* ParseInitializer(const Class& cls, 505 AstNode* ParseInitializer(const Class& cls,
500 LocalVariable* receiver, 506 LocalVariable* receiver,
501 GrowableArray<Field*>* initialized_fields); 507 GrowableArray<Field*>* initialized_fields);
502 void ParseConstructorRedirection(const Class& cls, LocalVariable* receiver); 508 void ParseConstructorRedirection(const Class& cls, LocalVariable* receiver);
503 void ParseInitializers(const Class& cls, 509 void ParseInitializers(const Class& cls,
504 LocalVariable* receiver, 510 LocalVariable* receiver,
505 GrowableArray<Field*>* initialized_fields); 511 GrowableArray<Field*>* initialized_fields);
506 String& ParseNativeDeclaration(); 512 String& ParseNativeDeclaration();
507 void ParseInterfaceList(const Class& cls); 513 void ParseInterfaceList(const Class& cls);
508 RawAbstractType* ParseMixins(const AbstractType& super_type); 514 RawAbstractType* ParseMixins(const AbstractType& super_type);
509 static StaticCallNode* BuildInvocationMirrorAllocation( 515 static StaticCallNode* BuildInvocationMirrorAllocation(
510 intptr_t call_pos, 516 TokenPosition call_pos,
511 const String& function_name, 517 const String& function_name,
512 const ArgumentListNode& function_args, 518 const ArgumentListNode& function_args,
513 const LocalVariable* temp, 519 const LocalVariable* temp,
514 bool is_super_invocation); 520 bool is_super_invocation);
515 // Build arguments for a NoSuchMethodCall. If LocalVariable temp is not NULL, 521 // Build arguments for a NoSuchMethodCall. If LocalVariable temp is not NULL,
516 // the last argument is stored in temp. 522 // the last argument is stored in temp.
517 static ArgumentListNode* BuildNoSuchMethodArguments( 523 static ArgumentListNode* BuildNoSuchMethodArguments(
518 intptr_t call_pos, 524 TokenPosition call_pos,
519 const String& function_name, 525 const String& function_name,
520 const ArgumentListNode& function_args, 526 const ArgumentListNode& function_args,
521 const LocalVariable* temp, 527 const LocalVariable* temp,
522 bool is_super_invocation); 528 bool is_super_invocation);
523 RawFunction* GetSuperFunction(intptr_t token_pos, 529 RawFunction* GetSuperFunction(TokenPosition token_pos,
524 const String& name, 530 const String& name,
525 ArgumentListNode* arguments, 531 ArgumentListNode* arguments,
526 bool resolve_getter, 532 bool resolve_getter,
527 bool* is_no_such_method); 533 bool* is_no_such_method);
528 AstNode* ParseSuperCall(const String& function_name); 534 AstNode* ParseSuperCall(const String& function_name);
529 AstNode* ParseSuperFieldAccess(const String& field_name, intptr_t field_pos); 535 AstNode* ParseSuperFieldAccess(const String& field_name,
536 TokenPosition field_pos);
530 AstNode* ParseSuperOperator(); 537 AstNode* ParseSuperOperator();
531 AstNode* BuildUnarySuperOperator(Token::Kind op, PrimaryNode* super); 538 AstNode* BuildUnarySuperOperator(Token::Kind op, PrimaryNode* super);
532 539
533 static bool ParseFormalParameters(const Function& func, ParamList* params); 540 static bool ParseFormalParameters(const Function& func, ParamList* params);
534 541
535 void SetupDefaultsForOptionalParams(const ParamList& params); 542 void SetupDefaultsForOptionalParams(const ParamList& params);
536 ClosureNode* CreateImplicitClosureNode(const Function& func, 543 ClosureNode* CreateImplicitClosureNode(const Function& func,
537 intptr_t token_pos, 544 TokenPosition token_pos,
538 AstNode* receiver); 545 AstNode* receiver);
539 static void AddFormalParamsToFunction(const ParamList* params, 546 static void AddFormalParamsToFunction(const ParamList* params,
540 const Function& func); 547 const Function& func);
541 void AddFormalParamsToScope(const ParamList* params, LocalScope* scope); 548 void AddFormalParamsToScope(const ParamList* params, LocalScope* scope);
542 549
543 SequenceNode* ParseConstructor(const Function& func); 550 SequenceNode* ParseConstructor(const Function& func);
544 SequenceNode* ParseFunc(const Function& func, bool check_semicolon); 551 SequenceNode* ParseFunc(const Function& func, bool check_semicolon);
545 552
546 void ParseNativeFunctionBlock(const ParamList* params, const Function& func); 553 void ParseNativeFunctionBlock(const ParamList* params, const Function& func);
547 554
548 SequenceNode* ParseInstanceGetter(const Function& func); 555 SequenceNode* ParseInstanceGetter(const Function& func);
549 SequenceNode* ParseInstanceSetter(const Function& func); 556 SequenceNode* ParseInstanceSetter(const Function& func);
550 SequenceNode* ParseStaticFinalGetter(const Function& func); 557 SequenceNode* ParseStaticFinalGetter(const Function& func);
551 SequenceNode* ParseStaticInitializer(); 558 SequenceNode* ParseStaticInitializer();
552 SequenceNode* ParseMethodExtractor(const Function& func); 559 SequenceNode* ParseMethodExtractor(const Function& func);
553 SequenceNode* ParseNoSuchMethodDispatcher(const Function& func); 560 SequenceNode* ParseNoSuchMethodDispatcher(const Function& func);
554 SequenceNode* ParseInvokeFieldDispatcher(const Function& func); 561 SequenceNode* ParseInvokeFieldDispatcher(const Function& func);
555 SequenceNode* ParseImplicitClosure(const Function& func); 562 SequenceNode* ParseImplicitClosure(const Function& func);
556 SequenceNode* ParseConstructorClosure(const Function& func); 563 SequenceNode* ParseConstructorClosure(const Function& func);
557 564
558 void BuildDispatcherScope(const Function& func, 565 void BuildDispatcherScope(const Function& func,
559 const ArgumentsDescriptor& desc); 566 const ArgumentsDescriptor& desc);
560 567
561 void EnsureHasReturnStatement(SequenceNode* seq, intptr_t return_pos); 568 void EnsureHasReturnStatement(SequenceNode* seq, TokenPosition return_pos);
562 void ChainNewBlock(LocalScope* outer_scope); 569 void ChainNewBlock(LocalScope* outer_scope);
563 void OpenBlock(); 570 void OpenBlock();
564 void OpenLoopBlock(); 571 void OpenLoopBlock();
565 void OpenFunctionBlock(const Function& func); 572 void OpenFunctionBlock(const Function& func);
566 void OpenAsyncClosure(); 573 void OpenAsyncClosure();
567 RawFunction* OpenAsyncFunction(intptr_t formal_param_pos); 574 RawFunction* OpenAsyncFunction(TokenPosition formal_param_pos);
568 RawFunction* OpenSyncGeneratorFunction(intptr_t func_pos); 575 RawFunction* OpenSyncGeneratorFunction(TokenPosition func_pos);
569 SequenceNode* CloseSyncGenFunction(const Function& closure, 576 SequenceNode* CloseSyncGenFunction(const Function& closure,
570 SequenceNode* closure_node); 577 SequenceNode* closure_node);
571 void AddSyncGenClosureParameters(ParamList* params); 578 void AddSyncGenClosureParameters(ParamList* params);
572 void AddAsyncGenClosureParameters(ParamList* params); 579 void AddAsyncGenClosureParameters(ParamList* params);
573 580
574 // Support for async* functions. 581 // Support for async* functions.
575 RawFunction* OpenAsyncGeneratorFunction(intptr_t func_pos); 582 RawFunction* OpenAsyncGeneratorFunction(TokenPosition func_pos);
576 SequenceNode* CloseAsyncGeneratorFunction(const Function& closure, 583 SequenceNode* CloseAsyncGeneratorFunction(const Function& closure,
577 SequenceNode* closure_node); 584 SequenceNode* closure_node);
578 void OpenAsyncGeneratorClosure(); 585 void OpenAsyncGeneratorClosure();
579 SequenceNode* CloseAsyncGeneratorClosure(SequenceNode* body); 586 SequenceNode* CloseAsyncGeneratorClosure(SequenceNode* body);
580 587
581 void OpenAsyncTryBlock(); 588 void OpenAsyncTryBlock();
582 SequenceNode* CloseBlock(); 589 SequenceNode* CloseBlock();
583 SequenceNode* CloseAsyncFunction(const Function& closure, 590 SequenceNode* CloseAsyncFunction(const Function& closure,
584 SequenceNode* closure_node); 591 SequenceNode* closure_node);
585 592
586 SequenceNode* CloseAsyncClosure(SequenceNode* body); 593 SequenceNode* CloseAsyncClosure(SequenceNode* body);
587 SequenceNode* CloseAsyncTryBlock(SequenceNode* try_block); 594 SequenceNode* CloseAsyncTryBlock(SequenceNode* try_block);
588 SequenceNode* CloseAsyncGeneratorTryBlock(SequenceNode *body); 595 SequenceNode* CloseAsyncGeneratorTryBlock(SequenceNode *body);
589 596
590 void AddAsyncClosureParameters(ParamList* params); 597 void AddAsyncClosureParameters(ParamList* params);
591 void AddContinuationVariables(); 598 void AddContinuationVariables();
592 void AddAsyncClosureVariables(); 599 void AddAsyncClosureVariables();
593 void AddAsyncGeneratorVariables(); 600 void AddAsyncGeneratorVariables();
594 601
595 LocalVariable* LookupReceiver(LocalScope* from_scope, bool test_only); 602 LocalVariable* LookupReceiver(LocalScope* from_scope, bool test_only);
596 LocalVariable* LookupTypeArgumentsParameter(LocalScope* from_scope, 603 LocalVariable* LookupTypeArgumentsParameter(LocalScope* from_scope,
597 bool test_only); 604 bool test_only);
598 void CaptureInstantiator(); 605 void CaptureInstantiator();
599 AstNode* LoadReceiver(intptr_t token_pos); 606 AstNode* LoadReceiver(TokenPosition token_pos);
600 AstNode* LoadFieldIfUnresolved(AstNode* node); 607 AstNode* LoadFieldIfUnresolved(AstNode* node);
601 AstNode* LoadClosure(PrimaryNode* primary); 608 AstNode* LoadClosure(PrimaryNode* primary);
602 InstanceGetterNode* CallGetter(intptr_t token_pos, 609 InstanceGetterNode* CallGetter(TokenPosition token_pos,
603 AstNode* object, 610 AstNode* object,
604 const String& name); 611 const String& name);
605 612
606 AstNode* ParseAssertStatement(); 613 AstNode* ParseAssertStatement();
607 AstNode* ParseJump(String* label_name); 614 AstNode* ParseJump(String* label_name);
608 AstNode* ParseIfStatement(String* label_name); 615 AstNode* ParseIfStatement(String* label_name);
609 AstNode* ParseWhileStatement(String* label_name); 616 AstNode* ParseWhileStatement(String* label_name);
610 AstNode* ParseDoWhileStatement(String* label_name); 617 AstNode* ParseDoWhileStatement(String* label_name);
611 AstNode* ParseForStatement(String* label_name); 618 AstNode* ParseForStatement(String* label_name);
612 AstNode* ParseAwaitForStatement(String* label_name); 619 AstNode* ParseAwaitForStatement(String* label_name);
613 AstNode* ParseForInStatement(intptr_t forin_pos, SourceLabel* label); 620 AstNode* ParseForInStatement(TokenPosition forin_pos, SourceLabel* label);
614 RawClass* CheckCaseExpressions(const GrowableArray<LiteralNode*>& values); 621 RawClass* CheckCaseExpressions(const GrowableArray<LiteralNode*>& values);
615 CaseNode* ParseCaseClause(LocalVariable* switch_expr_value, 622 CaseNode* ParseCaseClause(LocalVariable* switch_expr_value,
616 GrowableArray<LiteralNode*>* case_expr_values, 623 GrowableArray<LiteralNode*>* case_expr_values,
617 SourceLabel* case_label); 624 SourceLabel* case_label);
618 AstNode* ParseSwitchStatement(String* label_name); 625 AstNode* ParseSwitchStatement(String* label_name);
619 626
620 // try/catch/finally parsing. 627 // try/catch/finally parsing.
621 void AddCatchParamsToScope(CatchParamDesc* exception_param, 628 void AddCatchParamsToScope(CatchParamDesc* exception_param,
622 CatchParamDesc* stack_trace_param, 629 CatchParamDesc* stack_trace_param,
623 LocalScope* scope); 630 LocalScope* scope);
624 void SetupExceptionVariables(LocalScope* try_scope, 631 void SetupExceptionVariables(LocalScope* try_scope,
625 bool is_async, 632 bool is_async,
626 LocalVariable** context_var, 633 LocalVariable** context_var,
627 LocalVariable** exception_var, 634 LocalVariable** exception_var,
628 LocalVariable** stack_trace_var, 635 LocalVariable** stack_trace_var,
629 LocalVariable** saved_exception_var, 636 LocalVariable** saved_exception_var,
630 LocalVariable** saved_stack_trace_var); 637 LocalVariable** saved_stack_trace_var);
631 void SaveExceptionAndStacktrace(SequenceNode* statements, 638 void SaveExceptionAndStacktrace(SequenceNode* statements,
632 LocalVariable* exception_var, 639 LocalVariable* exception_var,
633 LocalVariable* stack_trace_var, 640 LocalVariable* stack_trace_var,
634 LocalVariable* saved_exception_var, 641 LocalVariable* saved_exception_var,
635 LocalVariable* saved_stack_trace_var); 642 LocalVariable* saved_stack_trace_var);
636 // Parse all the catch clause of a try. 643 // Parse all the catch clause of a try.
637 SequenceNode* ParseCatchClauses(intptr_t handler_pos, 644 SequenceNode* ParseCatchClauses(TokenPosition handler_pos,
638 bool is_async, 645 bool is_async,
639 LocalVariable* exception_var, 646 LocalVariable* exception_var,
640 LocalVariable* stack_trace_var, 647 LocalVariable* stack_trace_var,
641 LocalVariable* rethrow_exception_var, 648 LocalVariable* rethrow_exception_var,
642 LocalVariable* rethrow_stack_trace_var, 649 LocalVariable* rethrow_stack_trace_var,
643 const GrowableObjectArray& handler_types, 650 const GrowableObjectArray& handler_types,
644 bool* needs_stack_trace); 651 bool* needs_stack_trace);
645 // Parse or generate a finally clause. 652 // Parse or generate a finally clause.
646 SequenceNode* EnsureFinallyClause(bool parse, 653 SequenceNode* EnsureFinallyClause(bool parse,
647 bool is_async, 654 bool is_async,
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
710 AstNode* ParseUnaryExpr(); 717 AstNode* ParseUnaryExpr();
711 AstNode* ParsePostfixExpr(); 718 AstNode* ParsePostfixExpr();
712 AstNode* ParseSelectors(AstNode* primary, bool is_cascade); 719 AstNode* ParseSelectors(AstNode* primary, bool is_cascade);
713 AstNode* ParseClosurization(AstNode* primary); 720 AstNode* ParseClosurization(AstNode* primary);
714 AstNode* ParseCascades(AstNode* expr); 721 AstNode* ParseCascades(AstNode* expr);
715 AstNode* ParsePrimary(); 722 AstNode* ParsePrimary();
716 AstNode* ParseStringLiteral(bool allow_interpolation); 723 AstNode* ParseStringLiteral(bool allow_interpolation);
717 String* ParseImportStringLiteral(); 724 String* ParseImportStringLiteral();
718 AstNode* ParseCompoundLiteral(); 725 AstNode* ParseCompoundLiteral();
719 AstNode* ParseSymbolLiteral(); 726 AstNode* ParseSymbolLiteral();
720 AstNode* ParseListLiteral(intptr_t type_pos, 727 AstNode* ParseListLiteral(TokenPosition type_pos,
721 bool is_const, 728 bool is_const,
722 const TypeArguments& type_arguments); 729 const TypeArguments& type_arguments);
723 AstNode* ParseMapLiteral(intptr_t type_pos, 730 AstNode* ParseMapLiteral(TokenPosition type_pos,
724 bool is_const, 731 bool is_const,
725 const TypeArguments& type_arguments); 732 const TypeArguments& type_arguments);
726 733
727 RawFunction* BuildConstructorClosureFunction(const Function& ctr, 734 RawFunction* BuildConstructorClosureFunction(const Function& ctr,
728 intptr_t token_pos); 735 TokenPosition token_pos);
729 AstNode* ParseNewOperator(Token::Kind op_kind); 736 AstNode* ParseNewOperator(Token::Kind op_kind);
730 void ParseConstructorClosurization(Function* constructor, 737 void ParseConstructorClosurization(Function* constructor,
731 TypeArguments* type_arguments); 738 TypeArguments* type_arguments);
732 739
733 // An implicit argument, if non-null, is prepended to the returned list. 740 // An implicit argument, if non-null, is prepended to the returned list.
734 ArgumentListNode* ParseActualParameters(ArgumentListNode* implicit_arguments, 741 ArgumentListNode* ParseActualParameters(ArgumentListNode* implicit_arguments,
735 bool require_const); 742 bool require_const);
736 AstNode* ParseStaticCall(const Class& cls, 743 AstNode* ParseStaticCall(const Class& cls,
737 const String& method_name, 744 const String& method_name,
738 intptr_t ident_pos); 745 TokenPosition ident_pos);
739 AstNode* ParseInstanceCall(AstNode* receiver, 746 AstNode* ParseInstanceCall(AstNode* receiver,
740 const String& method_name, 747 const String& method_name,
741 intptr_t ident_pos, 748 TokenPosition ident_pos,
742 bool is_conditional); 749 bool is_conditional);
743 AstNode* ParseClosureCall(AstNode* closure); 750 AstNode* ParseClosureCall(AstNode* closure);
744 AstNode* GenerateStaticFieldLookup(const Field& field, 751 AstNode* GenerateStaticFieldLookup(const Field& field,
745 intptr_t ident_pos); 752 TokenPosition ident_pos);
746 AstNode* GenerateStaticFieldAccess(const Class& cls, 753 AstNode* GenerateStaticFieldAccess(const Class& cls,
747 const String& field_name, 754 const String& field_name,
748 intptr_t ident_pos); 755 TokenPosition ident_pos);
749 756
750 LocalVariable* LookupLocalScope(const String& ident); 757 LocalVariable* LookupLocalScope(const String& ident);
751 void CheckInstanceFieldAccess(intptr_t field_pos, const String& field_name); 758 void CheckInstanceFieldAccess(TokenPosition field_pos,
759 const String& field_name);
752 bool ParsingStaticMember() const; 760 bool ParsingStaticMember() const;
753 const AbstractType* ReceiverType(const Class& cls); 761 const AbstractType* ReceiverType(const Class& cls);
754 bool IsInstantiatorRequired() const; 762 bool IsInstantiatorRequired() const;
755 bool ResolveIdentInLocalScope(intptr_t ident_pos, 763 bool ResolveIdentInLocalScope(TokenPosition ident_pos,
756 const String &ident, 764 const String &ident,
757 AstNode** node); 765 AstNode** node);
758 static const bool kResolveLocally = true; 766 static const bool kResolveLocally = true;
759 static const bool kResolveIncludingImports = false; 767 static const bool kResolveIncludingImports = false;
760 768
761 // Resolve a primary identifier in the library or prefix scope and 769 // Resolve a primary identifier in the library or prefix scope and
762 // generate the corresponding AstNode. 770 // generate the corresponding AstNode.
763 AstNode* ResolveIdentInCurrentLibraryScope(intptr_t ident_pos, 771 AstNode* ResolveIdentInCurrentLibraryScope(TokenPosition ident_pos,
764 const String& ident); 772 const String& ident);
765 AstNode* ResolveIdentInPrefixScope(intptr_t ident_pos, 773 AstNode* ResolveIdentInPrefixScope(TokenPosition ident_pos,
766 const LibraryPrefix& prefix, 774 const LibraryPrefix& prefix,
767 const String& ident); 775 const String& ident);
768 776
769 AstNode* ResolveIdent(intptr_t ident_pos, 777 AstNode* ResolveIdent(TokenPosition ident_pos,
770 const String& ident, 778 const String& ident,
771 bool allow_closure_names); 779 bool allow_closure_names);
772 RawString* ResolveImportVar(intptr_t ident_pos, const String& ident); 780 RawString* ResolveImportVar(TokenPosition ident_pos, const String& ident);
773 AstNode* OptimizeBinaryOpNode(intptr_t op_pos, 781 AstNode* OptimizeBinaryOpNode(TokenPosition op_pos,
774 Token::Kind binary_op, 782 Token::Kind binary_op,
775 AstNode* lhs, 783 AstNode* lhs,
776 AstNode* rhs); 784 AstNode* rhs);
777 AstNode* ExpandAssignableOp(intptr_t op_pos, 785 AstNode* ExpandAssignableOp(TokenPosition op_pos,
778 Token::Kind assignment_op, 786 Token::Kind assignment_op,
779 AstNode* lhs, 787 AstNode* lhs,
780 AstNode* rhs); 788 AstNode* rhs);
781 LetNode* PrepareCompoundAssignmentNodes(AstNode** expr); 789 LetNode* PrepareCompoundAssignmentNodes(AstNode** expr);
782 LocalVariable* CreateTempConstVariable(intptr_t token_pos, const char* s); 790 LocalVariable* CreateTempConstVariable(TokenPosition token_pos,
791 const char* s);
783 792
784 static SequenceNode* NodeAsSequenceNode(intptr_t sequence_pos, 793 static SequenceNode* NodeAsSequenceNode(TokenPosition sequence_pos,
785 AstNode* node, 794 AstNode* node,
786 LocalScope* scope); 795 LocalScope* scope);
787 796
788 SequenceNode* MakeImplicitConstructor(const Function& func); 797 SequenceNode* MakeImplicitConstructor(const Function& func);
789 AstNode* MakeStaticCall(const String& cls_name, 798 AstNode* MakeStaticCall(const String& cls_name,
790 const String& func_name, 799 const String& func_name,
791 ArgumentListNode* arguments); 800 ArgumentListNode* arguments);
792 String& Interpolate(const GrowableArray<AstNode*>& values); 801 String& Interpolate(const GrowableArray<AstNode*>& values);
793 AstNode* MakeAssertCall(intptr_t begin, intptr_t end); 802 AstNode* MakeAssertCall(TokenPosition begin, TokenPosition end);
794 AstNode* ThrowTypeError(intptr_t type_pos, const AbstractType& type, 803 AstNode* ThrowTypeError(TokenPosition type_pos,
795 LibraryPrefix* prefix = NULL); 804 const AbstractType& type,
796 AstNode* ThrowNoSuchMethodError(intptr_t call_pos, 805 LibraryPrefix* prefix = NULL);
806 AstNode* ThrowNoSuchMethodError(TokenPosition call_pos,
797 const Class& cls, 807 const Class& cls,
798 const String& function_name, 808 const String& function_name,
799 ArgumentListNode* function_arguments, 809 ArgumentListNode* function_arguments,
800 InvocationMirror::Call call, 810 InvocationMirror::Call call,
801 InvocationMirror::Type type, 811 InvocationMirror::Type type,
802 const Function* func, 812 const Function* func,
803 const LibraryPrefix* prefix = NULL); 813 const LibraryPrefix* prefix = NULL);
804 814
805 void SetupSavedTryContext(LocalVariable* saved_try_context); 815 void SetupSavedTryContext(LocalVariable* saved_try_context);
806 816
807 void CheckOperatorArity(const MemberDesc& member); 817 void CheckOperatorArity(const MemberDesc& member);
808 818
809 void EnsureExpressionTemp(); 819 void EnsureExpressionTemp();
810 bool IsLegalAssignableSyntax(AstNode* expr, intptr_t end_pos); 820 bool IsLegalAssignableSyntax(AstNode* expr, TokenPosition end_pos);
811 AstNode* CreateAssignmentNode(AstNode* original, 821 AstNode* CreateAssignmentNode(AstNode* original,
812 AstNode* rhs, 822 AstNode* rhs,
813 const String* left_ident, 823 const String* left_ident,
814 intptr_t left_pos, 824 TokenPosition left_pos,
815 bool is_compound = false); 825 bool is_compound = false);
816 AstNode* InsertClosureCallNodes(AstNode* condition); 826 AstNode* InsertClosureCallNodes(AstNode* condition);
817 827
818 ConstructorCallNode* CreateConstructorCallNode( 828 ConstructorCallNode* CreateConstructorCallNode(
819 intptr_t token_pos, 829 TokenPosition token_pos,
820 const TypeArguments& type_arguments, 830 const TypeArguments& type_arguments,
821 const Function& constructor, 831 const Function& constructor,
822 ArgumentListNode* arguments); 832 ArgumentListNode* arguments);
823 833
824 void AddEqualityNullCheck(); 834 void AddEqualityNullCheck();
825 835
826 AstNode* BuildClosureCall(intptr_t token_pos, 836 AstNode* BuildClosureCall(TokenPosition token_pos,
827 AstNode* closure, 837 AstNode* closure,
828 ArgumentListNode* arguments); 838 ArgumentListNode* arguments);
829 839
830 RawInstance* TryCanonicalize(const Instance& instance, intptr_t token_pos); 840 RawInstance* TryCanonicalize(const Instance& instance,
831 void CacheConstantValue(intptr_t token_pos, const Instance& value); 841 TokenPosition token_pos);
832 bool GetCachedConstant(intptr_t token_pos, Instance* value); 842 void CacheConstantValue(TokenPosition token_pos, const Instance& value);
843 bool GetCachedConstant(TokenPosition token_pos, Instance* value);
833 844
834 Thread* thread() const { return thread_; } 845 Thread* thread() const { return thread_; }
835 Isolate* isolate() const { return isolate_; } 846 Isolate* isolate() const { return isolate_; }
836 Zone* zone() const { return thread_->zone(); } 847 Zone* zone() const { return thread_->zone(); }
837 848
838 Isolate* isolate_; // Cached current isolate. 849 Isolate* isolate_; // Cached current isolate.
839 Thread* thread_; 850 Thread* thread_;
840 851
841 Script& script_; 852 Script& script_;
842 TokenStream::Iterator tokens_iterator_; 853 TokenStream::Iterator tokens_iterator_;
843 Token::Kind token_kind_; // Cached token kind for current token. 854 Token::Kind token_kind_; // Cached token kind for current token.
844 intptr_t prev_token_pos_; 855 TokenPosition prev_token_pos_;
845 Block* current_block_; 856 Block* current_block_;
846 857
847 // is_top_level_ is true if parsing the "top level" of a compilation unit, 858 // is_top_level_ is true if parsing the "top level" of a compilation unit,
848 // that is class definitions, function type aliases, global functions, 859 // that is class definitions, function type aliases, global functions,
849 // global variables. 860 // global variables.
850 bool is_top_level_; 861 bool is_top_level_;
851 862
852 // await_is_keyword_ is true if we are parsing an async or generator 863 // await_is_keyword_ is true if we are parsing an async or generator
853 // function. In this context the identifiers await, async and yield 864 // function. In this context the identifiers await, async and yield
854 // are treated as keywords. 865 // are treated as keywords.
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
900 911
901 intptr_t recursion_counter_; 912 intptr_t recursion_counter_;
902 friend class RecursionChecker; 913 friend class RecursionChecker;
903 914
904 DISALLOW_COPY_AND_ASSIGN(Parser); 915 DISALLOW_COPY_AND_ASSIGN(Parser);
905 }; 916 };
906 917
907 } // namespace dart 918 } // namespace dart
908 919
909 #endif // VM_PARSER_H_ 920 #endif // VM_PARSER_H_
OLDNEW
« no previous file with comments | « runtime/vm/object_test.cc ('k') | runtime/vm/parser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698