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

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

Powered by Google App Engine
This is Rietveld 408576698