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

Side by Side Diff: pkg/front_end/lib/src/fasta/parser/parser.dart

Issue 2699073003: Support `void` as generic argument.
Patch Set: Shuffle things around to have a better `voidRti` locality. Created 3 years, 7 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 | « pkg/compiler/lib/src/typechecker.dart ('k') | pkg/front_end/lib/src/scanner/token.dart » ('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 library fasta.parser.parser; 5 library fasta.parser.parser;
6 6
7 import '../fasta_codes.dart' 7 import '../fasta_codes.dart'
8 show 8 show
9 FastaCode, 9 FastaCode,
10 FastaMessage, 10 FastaMessage,
(...skipping 546 matching lines...) Expand 10 before | Expand all | Expand 10 after
557 Token typedefKeyword = token; 557 Token typedefKeyword = token;
558 listener.beginFunctionTypeAlias(token); 558 listener.beginFunctionTypeAlias(token);
559 Token equals; 559 Token equals;
560 if (optional('=', peekAfterNominalType(token.next))) { 560 if (optional('=', peekAfterNominalType(token.next))) {
561 token = parseIdentifier(token.next, IdentifierContext.typedefDeclaration); 561 token = parseIdentifier(token.next, IdentifierContext.typedefDeclaration);
562 token = parseTypeVariablesOpt(token); 562 token = parseTypeVariablesOpt(token);
563 equals = token; 563 equals = token;
564 token = expect('=', token); 564 token = expect('=', token);
565 token = parseType(token); 565 token = parseType(token);
566 } else { 566 } else {
567 token = parseReturnTypeOpt(token.next); 567 token = parseTypeOpt(token.next);
568 token = parseIdentifier(token, IdentifierContext.typedefDeclaration); 568 token = parseIdentifier(token, IdentifierContext.typedefDeclaration);
569 token = parseTypeVariablesOpt(token); 569 token = parseTypeVariablesOpt(token);
570 token = parseFormalParameters(token); 570 token = parseFormalParameters(token);
571 } 571 }
572 listener.endFunctionTypeAlias(typedefKeyword, equals, token); 572 listener.endFunctionTypeAlias(typedefKeyword, equals, token);
573 return expect(';', token); 573 return expect(';', token);
574 } 574 }
575 575
576 Token parseMixinApplication(Token token) { 576 Token parseMixinApplication(Token token) {
577 listener.beginMixinApplication(token); 577 listener.beginMixinApplication(token);
578 token = parseType(token); 578 token = parseType(token);
579 Token withKeyword = token; 579 Token withKeyword = token;
580 token = expect('with', token); 580 token = expect('with', token);
581 token = parseTypeList(token); 581 token = parseTypeList(token);
582 listener.endMixinApplication(withKeyword); 582 listener.endMixinApplication(withKeyword);
583 return token; 583 return token;
584 } 584 }
585 585
586 Token parseReturnTypeOpt(Token token) {
587 if (identical(token.stringValue, 'void')) {
588 if (isGeneralizedFunctionType(token.next)) {
589 return parseType(token);
590 } else {
591 listener.handleVoidKeyword(token);
592 return token.next;
593 }
594 } else {
595 return parseTypeOpt(token);
596 }
597 }
598
599 Token parseFormalParametersOpt(Token token) { 586 Token parseFormalParametersOpt(Token token) {
600 if (optional('(', token)) { 587 if (optional('(', token)) {
601 return parseFormalParameters(token); 588 return parseFormalParameters(token);
602 } else { 589 } else {
603 listener.handleNoFormalParameters(token); 590 listener.handleNoFormalParameters(token);
604 return token; 591 return token;
605 } 592 }
606 } 593 }
607 594
608 Token skipFormalParameters(Token token) { 595 Token skipFormalParameters(Token token) {
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
686 parseIdentifier(token, IdentifierContext.formalParameterDeclaration); 673 parseIdentifier(token, IdentifierContext.formalParameterDeclaration);
687 } else if (inFunctionType) { 674 } else if (inFunctionType) {
688 token = parseType(token); 675 token = parseType(token);
689 if (token.isIdentifier) { 676 if (token.isIdentifier) {
690 token = parseIdentifier( 677 token = parseIdentifier(
691 token, IdentifierContext.formalParameterDeclaration); 678 token, IdentifierContext.formalParameterDeclaration);
692 } else { 679 } else {
693 listener.handleNoName(token); 680 listener.handleNoName(token);
694 } 681 }
695 } else { 682 } else {
696 token = parseReturnTypeOpt(token); 683 token = parseTypeOpt(token);
697 if (optional('this', token)) { 684 if (optional('this', token)) {
698 thisKeyword = token; 685 thisKeyword = token;
699 token = expect('.', token.next); 686 token = expect('.', token.next);
700 nameToken = token; 687 nameToken = token;
701 token = parseIdentifier(token, IdentifierContext.fieldInitializer); 688 token = parseIdentifier(token, IdentifierContext.fieldInitializer);
702 } else { 689 } else {
703 nameToken = token; 690 nameToken = token;
704 token = parseIdentifier( 691 token = parseIdentifier(
705 token, IdentifierContext.formalParameterDeclaration); 692 token, IdentifierContext.formalParameterDeclaration);
706 } 693 }
(...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after
1041 Token parseIdentifier(Token token, IdentifierContext context) { 1028 Token parseIdentifier(Token token, IdentifierContext context) {
1042 if (!token.isIdentifier) { 1029 if (!token.isIdentifier) {
1043 token = 1030 token =
1044 reportUnrecoverableErrorCodeWithToken(token, codeExpectedIdentifier) 1031 reportUnrecoverableErrorCodeWithToken(token, codeExpectedIdentifier)
1045 .next; 1032 .next;
1046 } else if (token.isBuiltInIdentifier && 1033 } else if (token.isBuiltInIdentifier &&
1047 !context.isBuiltInIdentifierAllowed) { 1034 !context.isBuiltInIdentifierAllowed) {
1048 if (context.inDeclaration) { 1035 if (context.inDeclaration) {
1049 reportRecoverableErrorCodeWithToken( 1036 reportRecoverableErrorCodeWithToken(
1050 token, codeBuiltInIdentifierInDeclaration); 1037 token, codeBuiltInIdentifierInDeclaration);
1051 } else if (!optional("dynamic", token)) { 1038 } else if (!optional("dynamic", token) && !optional("void", token)) {
1052 reportRecoverableErrorCodeWithToken(token, codeBuiltInIdentifierAsType); 1039 reportRecoverableErrorCodeWithToken(token, codeBuiltInIdentifierAsType);
1053 } 1040 }
1054 } else if (!inPlainSync && token.isPseudo) { 1041 } else if (!inPlainSync && token.isPseudo) {
1055 if (optional('await', token)) { 1042 if (optional('await', token)) {
1056 reportRecoverableErrorCode(token, codeAwaitAsIdentifier); 1043 reportRecoverableErrorCode(token, codeAwaitAsIdentifier);
1057 } else if (optional('yield', token)) { 1044 } else if (optional('yield', token)) {
1058 reportRecoverableErrorCode(token, codeYieldAsIdentifier); 1045 reportRecoverableErrorCode(token, codeYieldAsIdentifier);
1059 } else if (optional('async', token)) { 1046 } else if (optional('async', token)) {
1060 reportRecoverableErrorCode(token, codeAsyncAsIdentifier); 1047 reportRecoverableErrorCode(token, codeAsyncAsIdentifier);
1061 } 1048 }
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1118 (optional('<', token.next) || optional('(', token.next)); 1105 (optional('<', token.next) || optional('(', token.next));
1119 } 1106 }
1120 1107
1121 Token parseType(Token token) { 1108 Token parseType(Token token) {
1122 Token begin = token; 1109 Token begin = token;
1123 if (isGeneralizedFunctionType(token)) { 1110 if (isGeneralizedFunctionType(token)) {
1124 // A function type without return type. 1111 // A function type without return type.
1125 // Push the non-existing return type first. The loop below will 1112 // Push the non-existing return type first. The loop below will
1126 // generate the full type. 1113 // generate the full type.
1127 listener.handleNoType(token); 1114 listener.handleNoType(token);
1128 } else if (identical(token.stringValue, 'void') &&
1129 isGeneralizedFunctionType(token.next)) {
1130 listener.handleVoidKeyword(token);
1131 token = token.next;
1132 } else { 1115 } else {
1133 if (isValidTypeReference(token)) { 1116 if (isValidTypeReference(token)) {
1134 token = parseIdentifier(token, IdentifierContext.typeReference); 1117 token = parseIdentifier(token, IdentifierContext.typeReference);
1135 token = parseQualifiedRestOpt( 1118 token = parseQualifiedRestOpt(
1136 token, IdentifierContext.typeReferenceContinuation); 1119 token, IdentifierContext.typeReferenceContinuation);
1137 } else { 1120 } else {
1138 token = 1121 token =
1139 reportUnrecoverableErrorCodeWithToken(token, codeExpectedType).next; 1122 reportUnrecoverableErrorCodeWithToken(token, codeExpectedType).next;
1140 listener.handleInvalidTypeReference(token); 1123 listener.handleInvalidTypeReference(token);
1141 } 1124 }
(...skipping 254 matching lines...) Expand 10 before | Expand all | Expand 10 after
1396 if (getOrSet != null) { 1379 if (getOrSet != null) {
1397 reportRecoverableErrorCodeWithToken( 1380 reportRecoverableErrorCodeWithToken(
1398 getOrSet, 1381 getOrSet,
1399 hasModifier || hasType 1382 hasModifier || hasType
1400 ? codeExtraneousModifier 1383 ? codeExtraneousModifier
1401 : codeExtraneousModifierReplace); 1384 : codeExtraneousModifierReplace);
1402 } 1385 }
1403 1386
1404 if (!hasType) { 1387 if (!hasType) {
1405 listener.handleNoType(name); 1388 listener.handleNoType(name);
1406 } else if (optional('void', type) &&
1407 !isGeneralizedFunctionType(type.next)) {
1408 listener.handleNoType(name);
1409 // TODO(ahe): This error is reported twice, second time is from
1410 // [parseVariablesDeclarationMaybeSemicolon] via
1411 // [PartialFieldListElement.parseNode].
1412 reportRecoverableErrorCode(type, codeInvalidVoid);
1413 } else { 1389 } else {
1414 parseType(type); 1390 parseType(type);
1415 if (isVar) { 1391 if (isVar) {
1416 reportRecoverableErrorCodeWithToken( 1392 reportRecoverableErrorCodeWithToken(
1417 modifiers.head, codeExtraneousModifier); 1393 modifiers.head, codeExtraneousModifier);
1418 } 1394 }
1419 } 1395 }
1420 1396
1421 IdentifierContext context = isTopLevel 1397 IdentifierContext context = isTopLevel
1422 ? IdentifierContext.topLevelVariableDeclaration 1398 ? IdentifierContext.topLevelVariableDeclaration
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
1456 if (externalModifier != null) { 1432 if (externalModifier != null) {
1457 parseModifier(externalModifier); 1433 parseModifier(externalModifier);
1458 listener.handleModifiers(1); 1434 listener.handleModifiers(1);
1459 } else { 1435 } else {
1460 listener.handleModifiers(0); 1436 listener.handleModifiers(0);
1461 } 1437 }
1462 1438
1463 if (type == null) { 1439 if (type == null) {
1464 listener.handleNoType(name); 1440 listener.handleNoType(name);
1465 } else { 1441 } else {
1466 parseReturnTypeOpt(type); 1442 parseTypeOpt(type);
1467 } 1443 }
1468 Token token = 1444 Token token =
1469 parseIdentifier(name, IdentifierContext.topLevelFunctionDeclaration); 1445 parseIdentifier(name, IdentifierContext.topLevelFunctionDeclaration);
1470 1446
1471 if (getOrSet == null) { 1447 if (getOrSet == null) {
1472 token = parseTypeVariablesOpt(token); 1448 token = parseTypeVariablesOpt(token);
1473 } else { 1449 } else {
1474 listener.handleNoTypeVariables(token); 1450 listener.handleNoTypeVariables(token);
1475 } 1451 }
1476 token = parseFormalParametersOpt(token); 1452 token = parseFormalParametersOpt(token);
(...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after
1823 if (closeToken != null) { 1799 if (closeToken != null) {
1824 peek = closeToken.next; 1800 peek = closeToken.next;
1825 } 1801 }
1826 1802
1827 return peek; 1803 return peek;
1828 } 1804 }
1829 1805
1830 /// If [token] is the start of a type, returns the token after that type. 1806 /// If [token] is the start of a type, returns the token after that type.
1831 /// If [token] is not the start of a type, null is returned. 1807 /// If [token] is not the start of a type, null is returned.
1832 Token peekAfterIfType(Token token) { 1808 Token peekAfterIfType(Token token) {
1833 if (!optional('void', token) && !token.isIdentifier) { 1809 if (!token.isIdentifier) {
1834 return null; 1810 return null;
1835 } 1811 }
1836 return peekAfterType(token); 1812 return peekAfterType(token);
1837 } 1813 }
1838 1814
1839 Token skipClassBody(Token token) { 1815 Token skipClassBody(Token token) {
1840 if (!optional('{', token)) { 1816 if (!optional('{', token)) {
1841 return reportUnrecoverableErrorCodeWithToken( 1817 return reportUnrecoverableErrorCodeWithToken(
1842 token, codeExpectedClassBodyToSkip) 1818 token, codeExpectedClassBodyToSkip)
1843 .next; 1819 .next;
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
2009 } 1985 }
2010 if (getOrSet != null && constModifier != null) { 1986 if (getOrSet != null && constModifier != null) {
2011 reportRecoverableErrorCodeWithToken( 1987 reportRecoverableErrorCodeWithToken(
2012 constModifier, codeExtraneousModifier); 1988 constModifier, codeExtraneousModifier);
2013 } 1989 }
2014 parseModifierList(modifiers); 1990 parseModifierList(modifiers);
2015 1991
2016 if (type == null) { 1992 if (type == null) {
2017 listener.handleNoType(name); 1993 listener.handleNoType(name);
2018 } else { 1994 } else {
2019 parseReturnTypeOpt(type); 1995 parseTypeOpt(type);
2020 } 1996 }
2021 Token token; 1997 Token token;
2022 if (optional('operator', name)) { 1998 if (optional('operator', name)) {
2023 token = parseOperatorName(name); 1999 token = parseOperatorName(name);
2024 if (staticModifier != null) { 2000 if (staticModifier != null) {
2025 reportRecoverableErrorCodeWithToken( 2001 reportRecoverableErrorCodeWithToken(
2026 staticModifier, codeExtraneousModifier); 2002 staticModifier, codeExtraneousModifier);
2027 } 2003 }
2028 } else { 2004 } else {
2029 token = parseIdentifier(name, IdentifierContext.methodDeclaration); 2005 token = parseIdentifier(name, IdentifierContext.methodDeclaration);
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
2114 token = 2090 token =
2115 parseIdentifier(token, IdentifierContext.localAccessorDeclaration); 2091 parseIdentifier(token, IdentifierContext.localAccessorDeclaration);
2116 } 2092 }
2117 } else if (optional('operator', token)) { 2093 } else if (optional('operator', token)) {
2118 // operator <op> (... 2094 // operator <op> (...
2119 listener.handleNoType(token); 2095 listener.handleNoType(token);
2120 listener.beginFunctionName(token); 2096 listener.beginFunctionName(token);
2121 token = parseOperatorName(token); 2097 token = parseOperatorName(token);
2122 } else { 2098 } else {
2123 // <type>? <get>? <name> 2099 // <type>? <get>? <name>
2124 token = parseReturnTypeOpt(token); 2100 token = parseTypeOpt(token);
2125 if (identical(getOrSet, token)) { 2101 if (identical(getOrSet, token)) {
2126 token = token.next; 2102 token = token.next;
2127 } 2103 }
2128 listener.beginFunctionName(token); 2104 listener.beginFunctionName(token);
2129 if (optional('operator', token)) { 2105 if (optional('operator', token)) {
2130 token = parseOperatorName(token); 2106 token = parseOperatorName(token);
2131 } else { 2107 } else {
2132 token = 2108 token =
2133 parseIdentifier(token, IdentifierContext.localFunctionDeclaration); 2109 parseIdentifier(token, IdentifierContext.localFunctionDeclaration);
2134 } 2110 }
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
2168 listener.beginFunctionDeclaration(token); 2144 listener.beginFunctionDeclaration(token);
2169 token = parseFunction(token, null); 2145 token = parseFunction(token, null);
2170 listener.endFunctionDeclaration(token); 2146 listener.endFunctionDeclaration(token);
2171 return token; 2147 return token;
2172 } 2148 }
2173 2149
2174 Token parseFunctionExpression(Token token) { 2150 Token parseFunctionExpression(Token token) {
2175 Token beginToken = token; 2151 Token beginToken = token;
2176 listener.beginFunction(token); 2152 listener.beginFunction(token);
2177 listener.handleModifiers(0); 2153 listener.handleModifiers(0);
2178 token = parseReturnTypeOpt(token); 2154 token = parseTypeOpt(token);
2179 listener.beginFunctionName(token); 2155 listener.beginFunctionName(token);
2180 token = parseIdentifier(token, IdentifierContext.functionExpressionName); 2156 token = parseIdentifier(token, IdentifierContext.functionExpressionName);
2181 listener.endFunctionName(beginToken, token); 2157 listener.endFunctionName(beginToken, token);
2182 token = parseTypeVariablesOpt(token); 2158 token = parseTypeVariablesOpt(token);
2183 token = parseFormalParameters(token); 2159 token = parseFormalParameters(token);
2184 listener.handleNoInitializers(); 2160 listener.handleNoInitializers();
2185 AsyncModifier savedAsyncModifier = asyncState; 2161 AsyncModifier savedAsyncModifier = asyncState;
2186 token = parseAsyncModifier(token); 2162 token = parseAsyncModifier(token);
2187 bool isBlock = optional('{', token); 2163 bool isBlock = optional('{', token);
2188 token = parseFunctionBody(token, true, false); 2164 token = parseFunctionBody(token, true, false);
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
2384 reportRecoverableErrorCode(token, codeAwaitForNotAsync); 2360 reportRecoverableErrorCode(token, codeAwaitForNotAsync);
2385 } 2361 }
2386 return parseForStatement(token, token.next); 2362 return parseForStatement(token, token.next);
2387 } else if (identical(value, 'for')) { 2363 } else if (identical(value, 'for')) {
2388 return parseForStatement(null, token); 2364 return parseForStatement(null, token);
2389 } else if (identical(value, 'rethrow')) { 2365 } else if (identical(value, 'rethrow')) {
2390 return parseRethrowStatement(token); 2366 return parseRethrowStatement(token);
2391 } else if (identical(value, 'throw') && optional(';', token.next)) { 2367 } else if (identical(value, 'throw') && optional(';', token.next)) {
2392 // TODO(kasperl): Stop dealing with throw here. 2368 // TODO(kasperl): Stop dealing with throw here.
2393 return parseRethrowStatement(token); 2369 return parseRethrowStatement(token);
2394 } else if (identical(value, 'void')) {
2395 return parseExpressionStatementOrDeclaration(token);
2396 } else if (identical(value, 'while')) { 2370 } else if (identical(value, 'while')) {
2397 return parseWhileStatement(token); 2371 return parseWhileStatement(token);
2398 } else if (identical(value, 'do')) { 2372 } else if (identical(value, 'do')) {
2399 return parseDoWhileStatement(token); 2373 return parseDoWhileStatement(token);
2400 } else if (identical(value, 'try')) { 2374 } else if (identical(value, 'try')) {
2401 return parseTryStatement(token); 2375 return parseTryStatement(token);
2402 } else if (identical(value, 'switch')) { 2376 } else if (identical(value, 'switch')) {
2403 return parseSwitchStatement(token); 2377 return parseSwitchStatement(token);
2404 } else if (identical(value, 'break')) { 2378 } else if (identical(value, 'break')) {
2405 return parseBreakStatement(token); 2379 return parseBreakStatement(token);
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
2484 return token; 2458 return token;
2485 } else { 2459 } else {
2486 return null; 2460 return null;
2487 } 2461 }
2488 } 2462 }
2489 2463
2490 Token parseExpressionStatementOrDeclaration(Token token) { 2464 Token parseExpressionStatementOrDeclaration(Token token) {
2491 if (!inPlainSync && optional("await", token)) { 2465 if (!inPlainSync && optional("await", token)) {
2492 return parseExpressionStatement(token); 2466 return parseExpressionStatement(token);
2493 } 2467 }
2494 assert(token.isIdentifier || identical(token.stringValue, 'void')); 2468 assert(token.isIdentifier);
2495 Token identifier = peekIdentifierAfterType(token); 2469 Token identifier = peekIdentifierAfterType(token);
2496 if (identifier != null) { 2470 if (identifier != null) {
2497 assert(identifier.isIdentifier); 2471 assert(identifier.isIdentifier);
2498 2472
2499 // If the identifier token has a type substitution comment /*=T*/, 2473 // If the identifier token has a type substitution comment /*=T*/,
2500 // then the set of tokens type tokens should be replaced with the 2474 // then the set of tokens type tokens should be replaced with the
2501 // tokens parsed from the comment. 2475 // tokens parsed from the comment.
2502 token = 2476 token =
2503 listener.replaceTokenWithGenericCommentTypeAssign(token, identifier); 2477 listener.replaceTokenWithGenericCommentTypeAssign(token, identifier);
2504 2478
(...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after
2914 } else if (identical(value, "null")) { 2888 } else if (identical(value, "null")) {
2915 return parseLiteralNull(token); 2889 return parseLiteralNull(token);
2916 } else if (identical(value, "this")) { 2890 } else if (identical(value, "this")) {
2917 return parseThisExpression(token, context); 2891 return parseThisExpression(token, context);
2918 } else if (identical(value, "super")) { 2892 } else if (identical(value, "super")) {
2919 return parseSuperExpression(token, context); 2893 return parseSuperExpression(token, context);
2920 } else if (identical(value, "new")) { 2894 } else if (identical(value, "new")) {
2921 return parseNewExpression(token); 2895 return parseNewExpression(token);
2922 } else if (identical(value, "const")) { 2896 } else if (identical(value, "const")) {
2923 return parseConstExpression(token); 2897 return parseConstExpression(token);
2924 } else if (identical(value, "void")) {
2925 return parseFunctionExpression(token);
2926 } else if (!inPlainSync && 2898 } else if (!inPlainSync &&
2927 (identical(value, "yield") || identical(value, "async"))) { 2899 (identical(value, "yield") || identical(value, "async"))) {
2928 return expressionExpected(token); 2900 return expressionExpected(token);
2929 } else if (token.isIdentifier) { 2901 } else if (token.isIdentifier) {
2930 return parseSendOrFunctionLiteral(token, context); 2902 return parseSendOrFunctionLiteral(token, context);
2931 } else { 2903 } else {
2932 return expressionExpected(token); 2904 return expressionExpected(token);
2933 } 2905 }
2934 } else if (kind == OPEN_PAREN_TOKEN) { 2906 } else if (kind == OPEN_PAREN_TOKEN) {
2935 return parseParenthesizedExpressionOrFunctionLiteral(token); 2907 return parseParenthesizedExpressionOrFunctionLiteral(token);
(...skipping 981 matching lines...) Expand 10 before | Expand all | Expand 10 after
3917 return reportUnrecoverableError( 3889 return reportUnrecoverableError(
3918 token, () => code.format(uri, token.charOffset, string)); 3890 token, () => code.format(uri, token.charOffset, string));
3919 } 3891 }
3920 } 3892 }
3921 3893
3922 typedef FastaMessage NoArgument(Uri uri, int charOffset); 3894 typedef FastaMessage NoArgument(Uri uri, int charOffset);
3923 3895
3924 typedef FastaMessage TokenArgument(Uri uri, int charOffset, Token token); 3896 typedef FastaMessage TokenArgument(Uri uri, int charOffset, Token token);
3925 3897
3926 typedef FastaMessage StringArgument(Uri uri, int charOffset, String string); 3898 typedef FastaMessage StringArgument(Uri uri, int charOffset, String string);
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/typechecker.dart ('k') | pkg/front_end/lib/src/scanner/token.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698