OLD | NEW |
1 // This code was auto-generated, is not intended to be edited, and is subject to | 1 // This code was auto-generated, is not intended to be edited, and is subject to |
2 // significant change. Please see the README file for more information. | 2 // significant change. Please see the README file for more information. |
3 | 3 |
4 library engine.parser; | 4 library engine.parser; |
5 | 5 |
6 import 'dart:collection'; | 6 import 'dart:collection'; |
7 import 'java_core.dart'; | 7 import 'java_core.dart'; |
8 import 'instrumentation.dart'; | 8 import 'instrumentation.dart'; |
9 import 'error.dart'; | 9 import 'error.dart'; |
10 import 'source.dart'; | 10 import 'source.dart'; |
(...skipping 1287 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1298 * The source being parsed. | 1298 * The source being parsed. |
1299 */ | 1299 */ |
1300 Source _source; | 1300 Source _source; |
1301 | 1301 |
1302 /** | 1302 /** |
1303 * The error listener that will be informed of any errors that are found durin
g the parse. | 1303 * The error listener that will be informed of any errors that are found durin
g the parse. |
1304 */ | 1304 */ |
1305 AnalysisErrorListener _errorListener; | 1305 AnalysisErrorListener _errorListener; |
1306 | 1306 |
1307 /** | 1307 /** |
| 1308 * An [errorListener] lock, if more than `0`, then errors are not reported. |
| 1309 */ |
| 1310 int _errorListenerLock = 0; |
| 1311 |
| 1312 /** |
| 1313 * A flag indicating whether parser is to parse function bodies. |
| 1314 */ |
| 1315 bool _parseFunctionBodies = true; |
| 1316 |
| 1317 /** |
1308 * The next token to be parsed. | 1318 * The next token to be parsed. |
1309 */ | 1319 */ |
1310 Token _currentToken; | 1320 Token _currentToken; |
1311 | 1321 |
1312 /** | 1322 /** |
1313 * A flag indicating whether the parser is currently in the body of a loop. | 1323 * A flag indicating whether the parser is currently in the body of a loop. |
1314 */ | 1324 */ |
1315 bool _inLoop = false; | 1325 bool _inLoop = false; |
1316 | 1326 |
1317 /** | 1327 /** |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1402 InstrumentationBuilder instrumentation = Instrumentation.builder2("dart.engi
ne.Parser.parseStatements"); | 1412 InstrumentationBuilder instrumentation = Instrumentation.builder2("dart.engi
ne.Parser.parseStatements"); |
1403 try { | 1413 try { |
1404 _currentToken = token; | 1414 _currentToken = token; |
1405 return parseStatements2(); | 1415 return parseStatements2(); |
1406 } finally { | 1416 } finally { |
1407 instrumentation.log(); | 1417 instrumentation.log(); |
1408 } | 1418 } |
1409 } | 1419 } |
1410 | 1420 |
1411 /** | 1421 /** |
| 1422 * Set whether parser is to parse function bodies. |
| 1423 * |
| 1424 * @param parseFunctionBodies `true` if parser is to parse function bodies |
| 1425 */ |
| 1426 void set parseFunctionBodies(bool parseFunctionBodies) { |
| 1427 this._parseFunctionBodies = parseFunctionBodies; |
| 1428 } |
| 1429 |
| 1430 /** |
1412 * Parse an annotation. | 1431 * Parse an annotation. |
1413 * | 1432 * |
1414 * <pre> | 1433 * <pre> |
1415 * annotation ::= | 1434 * annotation ::= |
1416 * '@' qualified ('.' identifier)? arguments? | 1435 * '@' qualified ('.' identifier)? arguments? |
1417 * </pre> | 1436 * </pre> |
1418 * | 1437 * |
1419 * @return the annotation that was parsed | 1438 * @return the annotation that was parsed |
1420 */ | 1439 */ |
1421 Annotation parseAnnotation() { | 1440 Annotation parseAnnotation() { |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1478 } | 1497 } |
1479 Expression argument = parseArgument(); | 1498 Expression argument = parseArgument(); |
1480 arguments.add(argument); | 1499 arguments.add(argument); |
1481 bool foundNamedArgument = argument is NamedExpression; | 1500 bool foundNamedArgument = argument is NamedExpression; |
1482 bool generatedError = false; | 1501 bool generatedError = false; |
1483 while (optional(TokenType.COMMA)) { | 1502 while (optional(TokenType.COMMA)) { |
1484 argument = parseArgument(); | 1503 argument = parseArgument(); |
1485 arguments.add(argument); | 1504 arguments.add(argument); |
1486 if (foundNamedArgument) { | 1505 if (foundNamedArgument) { |
1487 if (!generatedError && argument is! NamedExpression) { | 1506 if (!generatedError && argument is! NamedExpression) { |
1488 reportError9(ParserErrorCode.POSITIONAL_AFTER_NAMED_ARGUMENT, []); | 1507 reportError10(ParserErrorCode.POSITIONAL_AFTER_NAMED_ARGUMENT, []); |
1489 generatedError = true; | 1508 generatedError = true; |
1490 } | 1509 } |
1491 } else if (argument is NamedExpression) { | 1510 } else if (argument is NamedExpression) { |
1492 foundNamedArgument = true; | 1511 foundNamedArgument = true; |
1493 } | 1512 } |
1494 } | 1513 } |
1495 Token rightParenthesis = expect2(TokenType.CLOSE_PAREN); | 1514 Token rightParenthesis = expect2(TokenType.CLOSE_PAREN); |
1496 return new ArgumentList.full(leftParenthesis, arguments, rightParenthesis); | 1515 return new ArgumentList.full(leftParenthesis, arguments, rightParenthesis); |
1497 } | 1516 } |
1498 | 1517 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1534 Block parseBlock() { | 1553 Block parseBlock() { |
1535 Token leftBracket = expect2(TokenType.OPEN_CURLY_BRACKET); | 1554 Token leftBracket = expect2(TokenType.OPEN_CURLY_BRACKET); |
1536 List<Statement> statements = new List<Statement>(); | 1555 List<Statement> statements = new List<Statement>(); |
1537 Token statementStart = _currentToken; | 1556 Token statementStart = _currentToken; |
1538 while (!matches5(TokenType.EOF) && !matches5(TokenType.CLOSE_CURLY_BRACKET))
{ | 1557 while (!matches5(TokenType.EOF) && !matches5(TokenType.CLOSE_CURLY_BRACKET))
{ |
1539 Statement statement = parseStatement2(); | 1558 Statement statement = parseStatement2(); |
1540 if (statement != null) { | 1559 if (statement != null) { |
1541 statements.add(statement); | 1560 statements.add(statement); |
1542 } | 1561 } |
1543 if (identical(_currentToken, statementStart)) { | 1562 if (identical(_currentToken, statementStart)) { |
1544 reportError10(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_current
Token.lexeme]); | 1563 reportError11(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_current
Token.lexeme]); |
1545 advance(); | 1564 advance(); |
1546 } | 1565 } |
1547 statementStart = _currentToken; | 1566 statementStart = _currentToken; |
1548 } | 1567 } |
1549 Token rightBracket = expect2(TokenType.CLOSE_CURLY_BRACKET); | 1568 Token rightBracket = expect2(TokenType.CLOSE_CURLY_BRACKET); |
1550 return new Block.full(leftBracket, statements, rightBracket); | 1569 return new Block.full(leftBracket, statements, rightBracket); |
1551 } | 1570 } |
1552 | 1571 |
1553 /** | 1572 /** |
1554 * Parse a class member. | 1573 * Parse a class member. |
(...skipping 24 matching lines...) Expand all Loading... |
1579 return parseOperator(commentAndMetadata, modifiers.externalKeyword, retu
rnType); | 1598 return parseOperator(commentAndMetadata, modifiers.externalKeyword, retu
rnType); |
1580 } else if (matchesIdentifier() && matchesAny(peek(), [ | 1599 } else if (matchesIdentifier() && matchesAny(peek(), [ |
1581 TokenType.OPEN_PAREN, | 1600 TokenType.OPEN_PAREN, |
1582 TokenType.OPEN_CURLY_BRACKET, | 1601 TokenType.OPEN_CURLY_BRACKET, |
1583 TokenType.FUNCTION])) { | 1602 TokenType.FUNCTION])) { |
1584 validateModifiersForGetterOrSetterOrMethod(modifiers); | 1603 validateModifiersForGetterOrSetterOrMethod(modifiers); |
1585 return parseMethodDeclaration(commentAndMetadata, modifiers.externalKeyw
ord, modifiers.staticKeyword, returnType); | 1604 return parseMethodDeclaration(commentAndMetadata, modifiers.externalKeyw
ord, modifiers.staticKeyword, returnType); |
1586 } else { | 1605 } else { |
1587 if (matchesIdentifier()) { | 1606 if (matchesIdentifier()) { |
1588 if (matchesAny(peek(), [TokenType.EQ, TokenType.COMMA, TokenType.SEMIC
OLON])) { | 1607 if (matchesAny(peek(), [TokenType.EQ, TokenType.COMMA, TokenType.SEMIC
OLON])) { |
1589 reportError(ParserErrorCode.VOID_VARIABLE, returnType, []); | 1608 reportError9(ParserErrorCode.VOID_VARIABLE, returnType, []); |
1590 return parseInitializedIdentifierList(commentAndMetadata, modifiers.
staticKeyword, validateModifiersForField(modifiers), returnType); | 1609 return parseInitializedIdentifierList(commentAndMetadata, modifiers.
staticKeyword, validateModifiersForField(modifiers), returnType); |
1591 } | 1610 } |
1592 } | 1611 } |
1593 if (isOperator(_currentToken)) { | 1612 if (isOperator(_currentToken)) { |
1594 validateModifiersForOperator(modifiers); | 1613 validateModifiersForOperator(modifiers); |
1595 return parseOperator(commentAndMetadata, modifiers.externalKeyword, re
turnType); | 1614 return parseOperator(commentAndMetadata, modifiers.externalKeyword, re
turnType); |
1596 } | 1615 } |
1597 reportError10(ParserErrorCode.EXPECTED_EXECUTABLE, _currentToken, []); | 1616 reportError11(ParserErrorCode.EXPECTED_EXECUTABLE, _currentToken, []); |
1598 return null; | 1617 return null; |
1599 } | 1618 } |
1600 } else if (matches(Keyword.GET) && matchesIdentifier2(peek())) { | 1619 } else if (matches(Keyword.GET) && matchesIdentifier2(peek())) { |
1601 validateModifiersForGetterOrSetterOrMethod(modifiers); | 1620 validateModifiersForGetterOrSetterOrMethod(modifiers); |
1602 return parseGetter(commentAndMetadata, modifiers.externalKeyword, modifier
s.staticKeyword, null); | 1621 return parseGetter(commentAndMetadata, modifiers.externalKeyword, modifier
s.staticKeyword, null); |
1603 } else if (matches(Keyword.SET) && matchesIdentifier2(peek())) { | 1622 } else if (matches(Keyword.SET) && matchesIdentifier2(peek())) { |
1604 validateModifiersForGetterOrSetterOrMethod(modifiers); | 1623 validateModifiersForGetterOrSetterOrMethod(modifiers); |
1605 return parseSetter(commentAndMetadata, modifiers.externalKeyword, modifier
s.staticKeyword, null); | 1624 return parseSetter(commentAndMetadata, modifiers.externalKeyword, modifier
s.staticKeyword, null); |
1606 } else if (matches(Keyword.OPERATOR) && isOperator(peek())) { | 1625 } else if (matches(Keyword.OPERATOR) && isOperator(peek())) { |
1607 validateModifiersForOperator(modifiers); | 1626 validateModifiersForOperator(modifiers); |
1608 return parseOperator(commentAndMetadata, modifiers.externalKeyword, null); | 1627 return parseOperator(commentAndMetadata, modifiers.externalKeyword, null); |
1609 } else if (!matchesIdentifier()) { | 1628 } else if (!matchesIdentifier()) { |
1610 if (isOperator(_currentToken)) { | 1629 if (isOperator(_currentToken)) { |
1611 validateModifiersForOperator(modifiers); | 1630 validateModifiersForOperator(modifiers); |
1612 return parseOperator(commentAndMetadata, modifiers.externalKeyword, null
); | 1631 return parseOperator(commentAndMetadata, modifiers.externalKeyword, null
); |
1613 } | 1632 } |
1614 reportError10(ParserErrorCode.EXPECTED_CLASS_MEMBER, _currentToken, []); | 1633 reportError11(ParserErrorCode.EXPECTED_CLASS_MEMBER, _currentToken, []); |
1615 return null; | 1634 return null; |
1616 } else if (matches4(peek(), TokenType.PERIOD) && matchesIdentifier2(peek2(2)
) && matches4(peek2(3), TokenType.OPEN_PAREN)) { | 1635 } else if (matches4(peek(), TokenType.PERIOD) && matchesIdentifier2(peek2(2)
) && matches4(peek2(3), TokenType.OPEN_PAREN)) { |
1617 return parseConstructor(commentAndMetadata, modifiers.externalKeyword, val
idateModifiersForConstructor(modifiers), modifiers.factoryKeyword, parseSimpleId
entifier(), andAdvance, parseSimpleIdentifier(), parseFormalParameterList()); | 1636 return parseConstructor(commentAndMetadata, modifiers.externalKeyword, val
idateModifiersForConstructor(modifiers), modifiers.factoryKeyword, parseSimpleId
entifier(), andAdvance, parseSimpleIdentifier(), parseFormalParameterList()); |
1618 } else if (matches4(peek(), TokenType.OPEN_PAREN)) { | 1637 } else if (matches4(peek(), TokenType.OPEN_PAREN)) { |
1619 SimpleIdentifier methodName = parseSimpleIdentifier(); | 1638 SimpleIdentifier methodName = parseSimpleIdentifier(); |
1620 FormalParameterList parameters = parseFormalParameterList(); | 1639 FormalParameterList parameters = parseFormalParameterList(); |
1621 if (matches5(TokenType.COLON) || modifiers.factoryKeyword != null || metho
dName.name == className) { | 1640 if (matches5(TokenType.COLON) || modifiers.factoryKeyword != null || metho
dName.name == className) { |
1622 return parseConstructor(commentAndMetadata, modifiers.externalKeyword, v
alidateModifiersForConstructor(modifiers), modifiers.factoryKeyword, methodName,
null, null, parameters); | 1641 return parseConstructor(commentAndMetadata, modifiers.externalKeyword, v
alidateModifiersForConstructor(modifiers), modifiers.factoryKeyword, methodName,
null, null, parameters); |
1623 } | 1642 } |
1624 validateModifiersForGetterOrSetterOrMethod(modifiers); | 1643 validateModifiersForGetterOrSetterOrMethod(modifiers); |
1625 validateFormalParameterList(parameters); | 1644 validateFormalParameterList(parameters); |
1626 return parseMethodDeclaration2(commentAndMetadata, modifiers.externalKeywo
rd, modifiers.staticKeyword, null, methodName, parameters); | 1645 return parseMethodDeclaration2(commentAndMetadata, modifiers.externalKeywo
rd, modifiers.staticKeyword, null, methodName, parameters); |
1627 } else if (matchesAny(peek(), [TokenType.EQ, TokenType.COMMA, TokenType.SEMI
COLON])) { | 1646 } else if (matchesAny(peek(), [TokenType.EQ, TokenType.COMMA, TokenType.SEMI
COLON])) { |
1628 if (modifiers.constKeyword == null && modifiers.finalKeyword == null && mo
difiers.varKeyword == null) { | 1647 if (modifiers.constKeyword == null && modifiers.finalKeyword == null && mo
difiers.varKeyword == null) { |
1629 reportError9(ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, []); | 1648 reportError10(ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, []); |
1630 } | 1649 } |
1631 return parseInitializedIdentifierList(commentAndMetadata, modifiers.static
Keyword, validateModifiersForField(modifiers), null); | 1650 return parseInitializedIdentifierList(commentAndMetadata, modifiers.static
Keyword, validateModifiersForField(modifiers), null); |
1632 } | 1651 } |
1633 TypeName type = parseTypeName(); | 1652 TypeName type = parseTypeName(); |
1634 if (matches(Keyword.GET) && matchesIdentifier2(peek())) { | 1653 if (matches(Keyword.GET) && matchesIdentifier2(peek())) { |
1635 validateModifiersForGetterOrSetterOrMethod(modifiers); | 1654 validateModifiersForGetterOrSetterOrMethod(modifiers); |
1636 return parseGetter(commentAndMetadata, modifiers.externalKeyword, modifier
s.staticKeyword, type); | 1655 return parseGetter(commentAndMetadata, modifiers.externalKeyword, modifier
s.staticKeyword, type); |
1637 } else if (matches(Keyword.SET) && matchesIdentifier2(peek())) { | 1656 } else if (matches(Keyword.SET) && matchesIdentifier2(peek())) { |
1638 validateModifiersForGetterOrSetterOrMethod(modifiers); | 1657 validateModifiersForGetterOrSetterOrMethod(modifiers); |
1639 return parseSetter(commentAndMetadata, modifiers.externalKeyword, modifier
s.staticKeyword, type); | 1658 return parseSetter(commentAndMetadata, modifiers.externalKeyword, modifier
s.staticKeyword, type); |
1640 } else if (matches(Keyword.OPERATOR) && isOperator(peek())) { | 1659 } else if (matches(Keyword.OPERATOR) && isOperator(peek())) { |
1641 validateModifiersForOperator(modifiers); | 1660 validateModifiersForOperator(modifiers); |
1642 return parseOperator(commentAndMetadata, modifiers.externalKeyword, type); | 1661 return parseOperator(commentAndMetadata, modifiers.externalKeyword, type); |
1643 } else if (!matchesIdentifier()) { | 1662 } else if (!matchesIdentifier()) { |
1644 if (matches5(TokenType.CLOSE_CURLY_BRACKET)) { | 1663 if (matches5(TokenType.CLOSE_CURLY_BRACKET)) { |
1645 return parseInitializedIdentifierList(commentAndMetadata, modifiers.stat
icKeyword, validateModifiersForField(modifiers), type); | 1664 return parseInitializedIdentifierList(commentAndMetadata, modifiers.stat
icKeyword, validateModifiersForField(modifiers), type); |
1646 } | 1665 } |
1647 if (isOperator(_currentToken)) { | 1666 if (isOperator(_currentToken)) { |
1648 validateModifiersForOperator(modifiers); | 1667 validateModifiersForOperator(modifiers); |
1649 return parseOperator(commentAndMetadata, modifiers.externalKeyword, type
); | 1668 return parseOperator(commentAndMetadata, modifiers.externalKeyword, type
); |
1650 } | 1669 } |
1651 reportError10(ParserErrorCode.EXPECTED_CLASS_MEMBER, _currentToken, []); | 1670 reportError11(ParserErrorCode.EXPECTED_CLASS_MEMBER, _currentToken, []); |
1652 return null; | 1671 try { |
| 1672 lockErrorListener(); |
| 1673 return parseInitializedIdentifierList(commentAndMetadata, modifiers.stat
icKeyword, validateModifiersForField(modifiers), type); |
| 1674 } finally { |
| 1675 unlockErrorListener(); |
| 1676 } |
1653 } else if (matches4(peek(), TokenType.OPEN_PAREN)) { | 1677 } else if (matches4(peek(), TokenType.OPEN_PAREN)) { |
1654 SimpleIdentifier methodName = parseSimpleIdentifier(); | 1678 SimpleIdentifier methodName = parseSimpleIdentifier(); |
1655 FormalParameterList parameters = parseFormalParameterList(); | 1679 FormalParameterList parameters = parseFormalParameterList(); |
1656 if (methodName.name == className) { | 1680 if (methodName.name == className) { |
1657 reportError(ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE, type, []); | 1681 reportError9(ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE, type, []); |
1658 return parseConstructor(commentAndMetadata, modifiers.externalKeyword, v
alidateModifiersForConstructor(modifiers), modifiers.factoryKeyword, methodName,
null, null, parameters); | 1682 return parseConstructor(commentAndMetadata, modifiers.externalKeyword, v
alidateModifiersForConstructor(modifiers), modifiers.factoryKeyword, methodName,
null, null, parameters); |
1659 } | 1683 } |
1660 validateModifiersForGetterOrSetterOrMethod(modifiers); | 1684 validateModifiersForGetterOrSetterOrMethod(modifiers); |
1661 validateFormalParameterList(parameters); | 1685 validateFormalParameterList(parameters); |
1662 return parseMethodDeclaration2(commentAndMetadata, modifiers.externalKeywo
rd, modifiers.staticKeyword, type, methodName, parameters); | 1686 return parseMethodDeclaration2(commentAndMetadata, modifiers.externalKeywo
rd, modifiers.staticKeyword, type, methodName, parameters); |
1663 } | 1687 } |
1664 return parseInitializedIdentifierList(commentAndMetadata, modifiers.staticKe
yword, validateModifiersForField(modifiers), type); | 1688 return parseInitializedIdentifierList(commentAndMetadata, modifiers.staticKe
yword, validateModifiersForField(modifiers), type); |
1665 } | 1689 } |
1666 | 1690 |
1667 /** | 1691 /** |
(...skipping 29 matching lines...) Expand all Loading... |
1697 bool partDirectiveFound = false; | 1721 bool partDirectiveFound = false; |
1698 bool directiveFoundAfterDeclaration = false; | 1722 bool directiveFoundAfterDeclaration = false; |
1699 List<Directive> directives = new List<Directive>(); | 1723 List<Directive> directives = new List<Directive>(); |
1700 List<CompilationUnitMember> declarations = new List<CompilationUnitMember>()
; | 1724 List<CompilationUnitMember> declarations = new List<CompilationUnitMember>()
; |
1701 Token memberStart = _currentToken; | 1725 Token memberStart = _currentToken; |
1702 while (!matches5(TokenType.EOF)) { | 1726 while (!matches5(TokenType.EOF)) { |
1703 CommentAndMetadata commentAndMetadata = parseCommentAndMetadata(); | 1727 CommentAndMetadata commentAndMetadata = parseCommentAndMetadata(); |
1704 if ((matches(Keyword.IMPORT) || matches(Keyword.EXPORT) || matches(Keyword
.LIBRARY) || matches(Keyword.PART)) && !matches4(peek(), TokenType.PERIOD) && !m
atches4(peek(), TokenType.LT) && !matches4(peek(), TokenType.OPEN_PAREN)) { | 1728 if ((matches(Keyword.IMPORT) || matches(Keyword.EXPORT) || matches(Keyword
.LIBRARY) || matches(Keyword.PART)) && !matches4(peek(), TokenType.PERIOD) && !m
atches4(peek(), TokenType.LT) && !matches4(peek(), TokenType.OPEN_PAREN)) { |
1705 Directive directive = parseDirective(commentAndMetadata); | 1729 Directive directive = parseDirective(commentAndMetadata); |
1706 if (declarations.length > 0 && !directiveFoundAfterDeclaration) { | 1730 if (declarations.length > 0 && !directiveFoundAfterDeclaration) { |
1707 reportError9(ParserErrorCode.DIRECTIVE_AFTER_DECLARATION, []); | 1731 reportError10(ParserErrorCode.DIRECTIVE_AFTER_DECLARATION, []); |
1708 directiveFoundAfterDeclaration = true; | 1732 directiveFoundAfterDeclaration = true; |
1709 } | 1733 } |
1710 if (directive is LibraryDirective) { | 1734 if (directive is LibraryDirective) { |
1711 if (libraryDirectiveFound) { | 1735 if (libraryDirectiveFound) { |
1712 reportError9(ParserErrorCode.MULTIPLE_LIBRARY_DIRECTIVES, []); | 1736 reportError10(ParserErrorCode.MULTIPLE_LIBRARY_DIRECTIVES, []); |
1713 } else { | 1737 } else { |
1714 if (directives.length > 0) { | 1738 if (directives.length > 0) { |
1715 reportError9(ParserErrorCode.LIBRARY_DIRECTIVE_NOT_FIRST, []); | 1739 reportError10(ParserErrorCode.LIBRARY_DIRECTIVE_NOT_FIRST, []); |
1716 } | 1740 } |
1717 libraryDirectiveFound = true; | 1741 libraryDirectiveFound = true; |
1718 } | 1742 } |
1719 } else if (directive is PartDirective) { | 1743 } else if (directive is PartDirective) { |
1720 partDirectiveFound = true; | 1744 partDirectiveFound = true; |
1721 } else if (partDirectiveFound) { | 1745 } else if (partDirectiveFound) { |
1722 if (directive is ExportDirective) { | 1746 if (directive is ExportDirective) { |
1723 reportError10(ParserErrorCode.EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE,
(directive as NamespaceDirective).keyword, []); | 1747 reportError11(ParserErrorCode.EXPORT_DIRECTIVE_AFTER_PART_DIRECTIVE,
(directive as NamespaceDirective).keyword, []); |
1724 } else if (directive is ImportDirective) { | 1748 } else if (directive is ImportDirective) { |
1725 reportError10(ParserErrorCode.IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE,
(directive as NamespaceDirective).keyword, []); | 1749 reportError11(ParserErrorCode.IMPORT_DIRECTIVE_AFTER_PART_DIRECTIVE,
(directive as NamespaceDirective).keyword, []); |
1726 } | 1750 } |
1727 } | 1751 } |
1728 if (directive is PartOfDirective) { | 1752 if (directive is PartOfDirective) { |
1729 if (partOfDirectiveFound) { | 1753 if (partOfDirectiveFound) { |
1730 reportError9(ParserErrorCode.MULTIPLE_PART_OF_DIRECTIVES, []); | 1754 reportError10(ParserErrorCode.MULTIPLE_PART_OF_DIRECTIVES, []); |
1731 } else { | 1755 } else { |
1732 int directiveCount = directives.length; | 1756 int directiveCount = directives.length; |
1733 for (int i = 0; i < directiveCount; i++) { | 1757 for (int i = 0; i < directiveCount; i++) { |
1734 reportError10(ParserErrorCode.NON_PART_OF_DIRECTIVE_IN_PART, direc
tives[i].keyword, []); | 1758 reportError11(ParserErrorCode.NON_PART_OF_DIRECTIVE_IN_PART, direc
tives[i].keyword, []); |
1735 } | 1759 } |
1736 partOfDirectiveFound = true; | 1760 partOfDirectiveFound = true; |
1737 } | 1761 } |
1738 } else { | 1762 } else { |
1739 if (partOfDirectiveFound) { | 1763 if (partOfDirectiveFound) { |
1740 reportError10(ParserErrorCode.NON_PART_OF_DIRECTIVE_IN_PART, directi
ve.keyword, []); | 1764 reportError11(ParserErrorCode.NON_PART_OF_DIRECTIVE_IN_PART, directi
ve.keyword, []); |
1741 } | 1765 } |
1742 } | 1766 } |
1743 directives.add(directive); | 1767 directives.add(directive); |
1744 } else if (matches5(TokenType.SEMICOLON)) { | 1768 } else if (matches5(TokenType.SEMICOLON)) { |
1745 reportError10(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_current
Token.lexeme]); | 1769 reportError11(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_current
Token.lexeme]); |
1746 advance(); | 1770 advance(); |
1747 } else { | 1771 } else { |
1748 CompilationUnitMember member = parseCompilationUnitMember(commentAndMeta
data); | 1772 CompilationUnitMember member = parseCompilationUnitMember(commentAndMeta
data); |
1749 if (member != null) { | 1773 if (member != null) { |
1750 declarations.add(member); | 1774 declarations.add(member); |
1751 } | 1775 } |
1752 } | 1776 } |
1753 if (identical(_currentToken, memberStart)) { | 1777 if (identical(_currentToken, memberStart)) { |
1754 reportError10(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_current
Token.lexeme]); | 1778 reportError11(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_current
Token.lexeme]); |
1755 advance(); | 1779 advance(); |
1756 while (!matches5(TokenType.EOF) && !couldBeStartOfCompilationUnitMember(
)) { | 1780 while (!matches5(TokenType.EOF) && !couldBeStartOfCompilationUnitMember(
)) { |
1757 advance(); | 1781 advance(); |
1758 } | 1782 } |
1759 } | 1783 } |
1760 memberStart = _currentToken; | 1784 memberStart = _currentToken; |
1761 } | 1785 } |
1762 return new CompilationUnit.full(firstToken, scriptTag, directives, declarati
ons, _currentToken); | 1786 return new CompilationUnit.full(firstToken, scriptTag, directives, declarati
ons, _currentToken); |
1763 } | 1787 } |
1764 | 1788 |
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1930 bool reportedMuliplePositionalGroups = false; | 1954 bool reportedMuliplePositionalGroups = false; |
1931 bool reportedMulipleNamedGroups = false; | 1955 bool reportedMulipleNamedGroups = false; |
1932 bool reportedMixedGroups = false; | 1956 bool reportedMixedGroups = false; |
1933 bool wasOptionalParameter = false; | 1957 bool wasOptionalParameter = false; |
1934 Token initialToken = null; | 1958 Token initialToken = null; |
1935 do { | 1959 do { |
1936 if (firstParameter) { | 1960 if (firstParameter) { |
1937 firstParameter = false; | 1961 firstParameter = false; |
1938 } else if (!optional(TokenType.COMMA)) { | 1962 } else if (!optional(TokenType.COMMA)) { |
1939 if (getEndToken(leftParenthesis) != null) { | 1963 if (getEndToken(leftParenthesis) != null) { |
1940 reportError9(ParserErrorCode.EXPECTED_TOKEN, [TokenType.COMMA.lexeme])
; | 1964 reportError10(ParserErrorCode.EXPECTED_TOKEN, [TokenType.COMMA.lexeme]
); |
1941 } else { | 1965 } else { |
1942 reportError10(ParserErrorCode.MISSING_CLOSING_PARENTHESIS, _currentTok
en.previous, []); | 1966 reportError11(ParserErrorCode.MISSING_CLOSING_PARENTHESIS, _currentTok
en.previous, []); |
1943 break; | 1967 break; |
1944 } | 1968 } |
1945 } | 1969 } |
1946 initialToken = _currentToken; | 1970 initialToken = _currentToken; |
1947 if (matches5(TokenType.OPEN_SQUARE_BRACKET)) { | 1971 if (matches5(TokenType.OPEN_SQUARE_BRACKET)) { |
1948 wasOptionalParameter = true; | 1972 wasOptionalParameter = true; |
1949 if (leftSquareBracket != null && !reportedMuliplePositionalGroups) { | 1973 if (leftSquareBracket != null && !reportedMuliplePositionalGroups) { |
1950 reportError9(ParserErrorCode.MULTIPLE_POSITIONAL_PARAMETER_GROUPS, [])
; | 1974 reportError10(ParserErrorCode.MULTIPLE_POSITIONAL_PARAMETER_GROUPS, []
); |
1951 reportedMuliplePositionalGroups = true; | 1975 reportedMuliplePositionalGroups = true; |
1952 } | 1976 } |
1953 if (leftCurlyBracket != null && !reportedMixedGroups) { | 1977 if (leftCurlyBracket != null && !reportedMixedGroups) { |
1954 reportError9(ParserErrorCode.MIXED_PARAMETER_GROUPS, []); | 1978 reportError10(ParserErrorCode.MIXED_PARAMETER_GROUPS, []); |
1955 reportedMixedGroups = true; | 1979 reportedMixedGroups = true; |
1956 } | 1980 } |
1957 leftSquareBracket = andAdvance; | 1981 leftSquareBracket = andAdvance; |
1958 currentParameters = positionalParameters; | 1982 currentParameters = positionalParameters; |
1959 kind = ParameterKind.POSITIONAL; | 1983 kind = ParameterKind.POSITIONAL; |
1960 } else if (matches5(TokenType.OPEN_CURLY_BRACKET)) { | 1984 } else if (matches5(TokenType.OPEN_CURLY_BRACKET)) { |
1961 wasOptionalParameter = true; | 1985 wasOptionalParameter = true; |
1962 if (leftCurlyBracket != null && !reportedMulipleNamedGroups) { | 1986 if (leftCurlyBracket != null && !reportedMulipleNamedGroups) { |
1963 reportError9(ParserErrorCode.MULTIPLE_NAMED_PARAMETER_GROUPS, []); | 1987 reportError10(ParserErrorCode.MULTIPLE_NAMED_PARAMETER_GROUPS, []); |
1964 reportedMulipleNamedGroups = true; | 1988 reportedMulipleNamedGroups = true; |
1965 } | 1989 } |
1966 if (leftSquareBracket != null && !reportedMixedGroups) { | 1990 if (leftSquareBracket != null && !reportedMixedGroups) { |
1967 reportError9(ParserErrorCode.MIXED_PARAMETER_GROUPS, []); | 1991 reportError10(ParserErrorCode.MIXED_PARAMETER_GROUPS, []); |
1968 reportedMixedGroups = true; | 1992 reportedMixedGroups = true; |
1969 } | 1993 } |
1970 leftCurlyBracket = andAdvance; | 1994 leftCurlyBracket = andAdvance; |
1971 currentParameters = namedParameters; | 1995 currentParameters = namedParameters; |
1972 kind = ParameterKind.NAMED; | 1996 kind = ParameterKind.NAMED; |
1973 } | 1997 } |
1974 FormalParameter parameter = parseFormalParameter(kind); | 1998 FormalParameter parameter = parseFormalParameter(kind); |
1975 parameters.add(parameter); | 1999 parameters.add(parameter); |
1976 currentParameters.add(parameter); | 2000 currentParameters.add(parameter); |
1977 if (identical(kind, ParameterKind.REQUIRED) && wasOptionalParameter) { | 2001 if (identical(kind, ParameterKind.REQUIRED) && wasOptionalParameter) { |
1978 reportError(ParserErrorCode.NORMAL_BEFORE_OPTIONAL_PARAMETERS, parameter
, []); | 2002 reportError9(ParserErrorCode.NORMAL_BEFORE_OPTIONAL_PARAMETERS, paramete
r, []); |
1979 } | 2003 } |
1980 if (matches5(TokenType.CLOSE_SQUARE_BRACKET)) { | 2004 if (matches5(TokenType.CLOSE_SQUARE_BRACKET)) { |
1981 rightSquareBracket = andAdvance; | 2005 rightSquareBracket = andAdvance; |
1982 currentParameters = normalParameters; | 2006 currentParameters = normalParameters; |
1983 if (leftSquareBracket == null) { | 2007 if (leftSquareBracket == null) { |
1984 if (leftCurlyBracket != null) { | 2008 if (leftCurlyBracket != null) { |
1985 reportError9(ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP, [
"}"]); | 2009 reportError10(ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP,
["}"]); |
1986 rightCurlyBracket = rightSquareBracket; | 2010 rightCurlyBracket = rightSquareBracket; |
1987 rightSquareBracket = null; | 2011 rightSquareBracket = null; |
1988 } else { | 2012 } else { |
1989 reportError9(ParserErrorCode.UNEXPECTED_TERMINATOR_FOR_PARAMETER_GRO
UP, ["["]); | 2013 reportError10(ParserErrorCode.UNEXPECTED_TERMINATOR_FOR_PARAMETER_GR
OUP, ["["]); |
1990 } | 2014 } |
1991 } | 2015 } |
1992 kind = ParameterKind.REQUIRED; | 2016 kind = ParameterKind.REQUIRED; |
1993 } else if (matches5(TokenType.CLOSE_CURLY_BRACKET)) { | 2017 } else if (matches5(TokenType.CLOSE_CURLY_BRACKET)) { |
1994 rightCurlyBracket = andAdvance; | 2018 rightCurlyBracket = andAdvance; |
1995 currentParameters = normalParameters; | 2019 currentParameters = normalParameters; |
1996 if (leftCurlyBracket == null) { | 2020 if (leftCurlyBracket == null) { |
1997 if (leftSquareBracket != null) { | 2021 if (leftSquareBracket != null) { |
1998 reportError9(ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP, [
"]"]); | 2022 reportError10(ParserErrorCode.WRONG_TERMINATOR_FOR_PARAMETER_GROUP,
["]"]); |
1999 rightSquareBracket = rightCurlyBracket; | 2023 rightSquareBracket = rightCurlyBracket; |
2000 rightCurlyBracket = null; | 2024 rightCurlyBracket = null; |
2001 } else { | 2025 } else { |
2002 reportError9(ParserErrorCode.UNEXPECTED_TERMINATOR_FOR_PARAMETER_GRO
UP, ["{"]); | 2026 reportError10(ParserErrorCode.UNEXPECTED_TERMINATOR_FOR_PARAMETER_GR
OUP, ["{"]); |
2003 } | 2027 } |
2004 } | 2028 } |
2005 kind = ParameterKind.REQUIRED; | 2029 kind = ParameterKind.REQUIRED; |
2006 } | 2030 } |
2007 } while (!matches5(TokenType.CLOSE_PAREN) && initialToken != _currentToken); | 2031 } while (!matches5(TokenType.CLOSE_PAREN) && initialToken != _currentToken); |
2008 Token rightParenthesis = expect2(TokenType.CLOSE_PAREN); | 2032 Token rightParenthesis = expect2(TokenType.CLOSE_PAREN); |
2009 if (leftSquareBracket != null && rightSquareBracket == null) { | 2033 if (leftSquareBracket != null && rightSquareBracket == null) { |
2010 reportError9(ParserErrorCode.MISSING_TERMINATOR_FOR_PARAMETER_GROUP, ["]"]
); | 2034 reportError10(ParserErrorCode.MISSING_TERMINATOR_FOR_PARAMETER_GROUP, ["]"
]); |
2011 } | 2035 } |
2012 if (leftCurlyBracket != null && rightCurlyBracket == null) { | 2036 if (leftCurlyBracket != null && rightCurlyBracket == null) { |
2013 reportError9(ParserErrorCode.MISSING_TERMINATOR_FOR_PARAMETER_GROUP, ["}"]
); | 2037 reportError10(ParserErrorCode.MISSING_TERMINATOR_FOR_PARAMETER_GROUP, ["}"
]); |
2014 } | 2038 } |
2015 if (leftSquareBracket == null) { | 2039 if (leftSquareBracket == null) { |
2016 leftSquareBracket = leftCurlyBracket; | 2040 leftSquareBracket = leftCurlyBracket; |
2017 } | 2041 } |
2018 if (rightSquareBracket == null) { | 2042 if (rightSquareBracket == null) { |
2019 rightSquareBracket = rightCurlyBracket; | 2043 rightSquareBracket = rightCurlyBracket; |
2020 } | 2044 } |
2021 return new FormalParameterList.full(leftParenthesis, parameters, leftSquareB
racket, rightSquareBracket, rightParenthesis); | 2045 return new FormalParameterList.full(leftParenthesis, parameters, leftSquareB
racket, rightSquareBracket, rightParenthesis); |
2022 } | 2046 } |
2023 | 2047 |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2159 Token period = null; | 2183 Token period = null; |
2160 if (matches(Keyword.THIS)) { | 2184 if (matches(Keyword.THIS)) { |
2161 thisKeyword = andAdvance; | 2185 thisKeyword = andAdvance; |
2162 period = expect2(TokenType.PERIOD); | 2186 period = expect2(TokenType.PERIOD); |
2163 } | 2187 } |
2164 SimpleIdentifier identifier = parseSimpleIdentifier(); | 2188 SimpleIdentifier identifier = parseSimpleIdentifier(); |
2165 if (matches5(TokenType.OPEN_PAREN)) { | 2189 if (matches5(TokenType.OPEN_PAREN)) { |
2166 FormalParameterList parameters = parseFormalParameterList(); | 2190 FormalParameterList parameters = parseFormalParameterList(); |
2167 if (thisKeyword == null) { | 2191 if (thisKeyword == null) { |
2168 if (holder.keyword != null) { | 2192 if (holder.keyword != null) { |
2169 reportError10(ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR, holder.key
word, []); | 2193 reportError11(ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR, holder.key
word, []); |
2170 } | 2194 } |
2171 return new FunctionTypedFormalParameter.full(commentAndMetadata.comment,
commentAndMetadata.metadata, holder.type, identifier, parameters); | 2195 return new FunctionTypedFormalParameter.full(commentAndMetadata.comment,
commentAndMetadata.metadata, holder.type, identifier, parameters); |
2172 } else { | 2196 } else { |
2173 return new FieldFormalParameter.full(commentAndMetadata.comment, comment
AndMetadata.metadata, holder.keyword, holder.type, thisKeyword, period, identifi
er, parameters); | 2197 return new FieldFormalParameter.full(commentAndMetadata.comment, comment
AndMetadata.metadata, holder.keyword, holder.type, thisKeyword, period, identifi
er, parameters); |
2174 } | 2198 } |
2175 } | 2199 } |
2176 TypeName type = holder.type; | 2200 TypeName type = holder.type; |
2177 if (type != null) { | 2201 if (type != null) { |
2178 if (matches3(type.name.beginToken, Keyword.VOID)) { | 2202 if (matches3(type.name.beginToken, Keyword.VOID)) { |
2179 reportError10(ParserErrorCode.VOID_PARAMETER, type.name.beginToken, []); | 2203 reportError11(ParserErrorCode.VOID_PARAMETER, type.name.beginToken, []); |
2180 } else if (holder.keyword != null && matches3(holder.keyword, Keyword.VAR)
) { | 2204 } else if (holder.keyword != null && matches3(holder.keyword, Keyword.VAR)
) { |
2181 reportError10(ParserErrorCode.VAR_AND_TYPE, holder.keyword, []); | 2205 reportError11(ParserErrorCode.VAR_AND_TYPE, holder.keyword, []); |
2182 } | 2206 } |
2183 } | 2207 } |
2184 if (thisKeyword != null) { | 2208 if (thisKeyword != null) { |
2185 return new FieldFormalParameter.full(commentAndMetadata.comment, commentAn
dMetadata.metadata, holder.keyword, holder.type, thisKeyword, period, identifier
, null); | 2209 return new FieldFormalParameter.full(commentAndMetadata.comment, commentAn
dMetadata.metadata, holder.keyword, holder.type, thisKeyword, period, identifier
, null); |
2186 } | 2210 } |
2187 return new SimpleFormalParameter.full(commentAndMetadata.comment, commentAnd
Metadata.metadata, holder.keyword, holder.type, identifier); | 2211 return new SimpleFormalParameter.full(commentAndMetadata.comment, commentAnd
Metadata.metadata, holder.keyword, holder.type, identifier); |
2188 } | 2212 } |
2189 | 2213 |
2190 /** | 2214 /** |
2191 * Parse a prefixed identifier. | 2215 * Parse a prefixed identifier. |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2233 * identifier ::= | 2257 * identifier ::= |
2234 * IDENTIFIER | 2258 * IDENTIFIER |
2235 * </pre> | 2259 * </pre> |
2236 * | 2260 * |
2237 * @return the simple identifier that was parsed | 2261 * @return the simple identifier that was parsed |
2238 */ | 2262 */ |
2239 SimpleIdentifier parseSimpleIdentifier() { | 2263 SimpleIdentifier parseSimpleIdentifier() { |
2240 if (matchesIdentifier()) { | 2264 if (matchesIdentifier()) { |
2241 return new SimpleIdentifier.full(andAdvance); | 2265 return new SimpleIdentifier.full(andAdvance); |
2242 } | 2266 } |
2243 reportError9(ParserErrorCode.MISSING_IDENTIFIER, []); | 2267 reportError10(ParserErrorCode.MISSING_IDENTIFIER, []); |
2244 return createSyntheticIdentifier(); | 2268 return createSyntheticIdentifier(); |
2245 } | 2269 } |
2246 | 2270 |
2247 /** | 2271 /** |
2248 * Parse a statement. | 2272 * Parse a statement. |
2249 * | 2273 * |
2250 * <pre> | 2274 * <pre> |
2251 * statement ::= | 2275 * statement ::= |
2252 * label* nonLabeledStatement | 2276 * label* nonLabeledStatement |
2253 * </pre> | 2277 * </pre> |
(...skipping 27 matching lines...) Expand all Loading... |
2281 List<StringLiteral> strings = new List<StringLiteral>(); | 2305 List<StringLiteral> strings = new List<StringLiteral>(); |
2282 while (matches5(TokenType.STRING)) { | 2306 while (matches5(TokenType.STRING)) { |
2283 Token string = andAdvance; | 2307 Token string = andAdvance; |
2284 if (matches5(TokenType.STRING_INTERPOLATION_EXPRESSION) || matches5(TokenT
ype.STRING_INTERPOLATION_IDENTIFIER)) { | 2308 if (matches5(TokenType.STRING_INTERPOLATION_EXPRESSION) || matches5(TokenT
ype.STRING_INTERPOLATION_IDENTIFIER)) { |
2285 strings.add(parseStringInterpolation(string)); | 2309 strings.add(parseStringInterpolation(string)); |
2286 } else { | 2310 } else { |
2287 strings.add(new SimpleStringLiteral.full(string, computeStringValue(stri
ng.lexeme, true, true))); | 2311 strings.add(new SimpleStringLiteral.full(string, computeStringValue(stri
ng.lexeme, true, true))); |
2288 } | 2312 } |
2289 } | 2313 } |
2290 if (strings.length < 1) { | 2314 if (strings.length < 1) { |
2291 reportError9(ParserErrorCode.EXPECTED_STRING_LITERAL, []); | 2315 reportError10(ParserErrorCode.EXPECTED_STRING_LITERAL, []); |
2292 return createSyntheticStringLiteral(); | 2316 return createSyntheticStringLiteral(); |
2293 } else if (strings.length == 1) { | 2317 } else if (strings.length == 1) { |
2294 return strings[0]; | 2318 return strings[0]; |
2295 } else { | 2319 } else { |
2296 return new AdjacentStrings.full(strings); | 2320 return new AdjacentStrings.full(strings); |
2297 } | 2321 } |
2298 } | 2322 } |
2299 | 2323 |
2300 /** | 2324 /** |
2301 * Parse a list of type arguments. | 2325 * Parse a list of type arguments. |
(...skipping 25 matching lines...) Expand all Loading... |
2327 * <pre> | 2351 * <pre> |
2328 * type ::= | 2352 * type ::= |
2329 * qualified typeArguments? | 2353 * qualified typeArguments? |
2330 * </pre> | 2354 * </pre> |
2331 * | 2355 * |
2332 * @return the type name that was parsed | 2356 * @return the type name that was parsed |
2333 */ | 2357 */ |
2334 TypeName parseTypeName() { | 2358 TypeName parseTypeName() { |
2335 Identifier typeName; | 2359 Identifier typeName; |
2336 if (matches(Keyword.VAR)) { | 2360 if (matches(Keyword.VAR)) { |
2337 reportError9(ParserErrorCode.VAR_AS_TYPE_NAME, []); | 2361 reportError10(ParserErrorCode.VAR_AS_TYPE_NAME, []); |
2338 typeName = new SimpleIdentifier.full(andAdvance); | 2362 typeName = new SimpleIdentifier.full(andAdvance); |
2339 } else if (matchesIdentifier()) { | 2363 } else if (matchesIdentifier()) { |
2340 typeName = parsePrefixedIdentifier(); | 2364 typeName = parsePrefixedIdentifier(); |
2341 } else { | 2365 } else { |
2342 typeName = createSyntheticIdentifier(); | 2366 typeName = createSyntheticIdentifier(); |
2343 reportError9(ParserErrorCode.EXPECTED_TYPE_NAME, []); | 2367 reportError10(ParserErrorCode.EXPECTED_TYPE_NAME, []); |
2344 } | 2368 } |
2345 TypeArgumentList typeArguments = null; | 2369 TypeArgumentList typeArguments = null; |
2346 if (matches5(TokenType.LT)) { | 2370 if (matches5(TokenType.LT)) { |
2347 typeArguments = parseTypeArgumentList(); | 2371 typeArguments = parseTypeArgumentList(); |
2348 } | 2372 } |
2349 return new TypeName.full(typeName, typeArguments); | 2373 return new TypeName.full(typeName, typeArguments); |
2350 } | 2374 } |
2351 | 2375 |
2352 /** | 2376 /** |
2353 * Parse a type parameter. | 2377 * Parse a type parameter. |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2428 * value is invalid. | 2452 * value is invalid. |
2429 * | 2453 * |
2430 * @param builder the builder to which the scalar value is to be appended | 2454 * @param builder the builder to which the scalar value is to be appended |
2431 * @param escapeSequence the escape sequence that was parsed to produce the sc
alar value | 2455 * @param escapeSequence the escape sequence that was parsed to produce the sc
alar value |
2432 * @param scalarValue the value to be appended | 2456 * @param scalarValue the value to be appended |
2433 * @param startIndex the index of the first character representing the scalar
value | 2457 * @param startIndex the index of the first character representing the scalar
value |
2434 * @param endIndex the index of the last character representing the scalar val
ue | 2458 * @param endIndex the index of the last character representing the scalar val
ue |
2435 */ | 2459 */ |
2436 void appendScalarValue(JavaStringBuilder builder, String escapeSequence, int s
calarValue, int startIndex, int endIndex) { | 2460 void appendScalarValue(JavaStringBuilder builder, String escapeSequence, int s
calarValue, int startIndex, int endIndex) { |
2437 if (scalarValue < 0 || scalarValue > Character.MAX_CODE_POINT || (scalarValu
e >= 0xD800 && scalarValue <= 0xDFFF)) { | 2461 if (scalarValue < 0 || scalarValue > Character.MAX_CODE_POINT || (scalarValu
e >= 0xD800 && scalarValue <= 0xDFFF)) { |
2438 reportError9(ParserErrorCode.INVALID_CODE_POINT, [escapeSequence]); | 2462 reportError10(ParserErrorCode.INVALID_CODE_POINT, [escapeSequence]); |
2439 return; | 2463 return; |
2440 } | 2464 } |
2441 if (scalarValue < Character.MAX_VALUE) { | 2465 if (scalarValue < Character.MAX_VALUE) { |
2442 builder.appendChar(scalarValue as int); | 2466 builder.appendChar(scalarValue as int); |
2443 } else { | 2467 } else { |
2444 builder.append(Character.toChars(scalarValue)); | 2468 builder.append(Character.toChars(scalarValue)); |
2445 } | 2469 } |
2446 } | 2470 } |
2447 | 2471 |
2448 /** | 2472 /** |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2579 * | 2603 * |
2580 * assignableSelector ::= | 2604 * assignableSelector ::= |
2581 * '[' expression ']' | 2605 * '[' expression ']' |
2582 * | '.' identifier | 2606 * | '.' identifier |
2583 * </pre> | 2607 * </pre> |
2584 * | 2608 * |
2585 * @param expression the expression being checked | 2609 * @param expression the expression being checked |
2586 */ | 2610 */ |
2587 void ensureAssignable(Expression expression) { | 2611 void ensureAssignable(Expression expression) { |
2588 if (expression != null && !expression.isAssignable) { | 2612 if (expression != null && !expression.isAssignable) { |
2589 reportError9(ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE, []); | 2613 reportError10(ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE, []); |
2590 } | 2614 } |
2591 } | 2615 } |
2592 | 2616 |
2593 /** | 2617 /** |
2594 * If the current token is a keyword matching the given string, return it afte
r advancing to the | 2618 * If the current token is a keyword matching the given string, return it afte
r advancing to the |
2595 * next token. Otherwise report an error and return the current token without
advancing. | 2619 * next token. Otherwise report an error and return the current token without
advancing. |
2596 * | 2620 * |
2597 * @param keyword the keyword that is expected | 2621 * @param keyword the keyword that is expected |
2598 * @return the token that matched the given type | 2622 * @return the token that matched the given type |
2599 */ | 2623 */ |
2600 Token expect(Keyword keyword) { | 2624 Token expect(Keyword keyword) { |
2601 if (matches(keyword)) { | 2625 if (matches(keyword)) { |
2602 return andAdvance; | 2626 return andAdvance; |
2603 } | 2627 } |
2604 reportError9(ParserErrorCode.EXPECTED_TOKEN, [keyword.syntax]); | 2628 reportError10(ParserErrorCode.EXPECTED_TOKEN, [keyword.syntax]); |
2605 return _currentToken; | 2629 return _currentToken; |
2606 } | 2630 } |
2607 | 2631 |
2608 /** | 2632 /** |
2609 * If the current token has the expected type, return it after advancing to th
e next token. | 2633 * If the current token has the expected type, return it after advancing to th
e next token. |
2610 * Otherwise report an error and return the current token without advancing. | 2634 * Otherwise report an error and return the current token without advancing. |
2611 * | 2635 * |
2612 * @param type the type of token that is expected | 2636 * @param type the type of token that is expected |
2613 * @return the token that matched the given type | 2637 * @return the token that matched the given type |
2614 */ | 2638 */ |
2615 Token expect2(TokenType type) { | 2639 Token expect2(TokenType type) { |
2616 if (matches5(type)) { | 2640 if (matches5(type)) { |
2617 return andAdvance; | 2641 return andAdvance; |
2618 } | 2642 } |
2619 if (identical(type, TokenType.SEMICOLON)) { | 2643 if (identical(type, TokenType.SEMICOLON)) { |
2620 reportError10(ParserErrorCode.EXPECTED_TOKEN, _currentToken.previous, [typ
e.lexeme]); | 2644 reportError11(ParserErrorCode.EXPECTED_TOKEN, _currentToken.previous, [typ
e.lexeme]); |
2621 } else { | 2645 } else { |
2622 reportError9(ParserErrorCode.EXPECTED_TOKEN, [type.lexeme]); | 2646 reportError10(ParserErrorCode.EXPECTED_TOKEN, [type.lexeme]); |
2623 } | 2647 } |
2624 return _currentToken; | 2648 return _currentToken; |
2625 } | 2649 } |
2626 | 2650 |
2627 /** | 2651 /** |
2628 * Search the given list of ranges for a range that contains the given index.
Return the range | 2652 * Search the given list of ranges for a range that contains the given index.
Return the range |
2629 * that was found, or `null` if none of the ranges contain the index. | 2653 * that was found, or `null` if none of the ranges contain the index. |
2630 * | 2654 * |
2631 * @param ranges the ranges to be searched | 2655 * @param ranges the ranges to be searched |
2632 * @param index the index contained in the returned range | 2656 * @param index the index contained in the returned range |
(...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2955 if (offset < firstOffset) { | 2979 if (offset < firstOffset) { |
2956 first = token; | 2980 first = token; |
2957 firstOffset = offset; | 2981 firstOffset = offset; |
2958 } | 2982 } |
2959 } | 2983 } |
2960 } | 2984 } |
2961 return first; | 2985 return first; |
2962 } | 2986 } |
2963 | 2987 |
2964 /** | 2988 /** |
| 2989 * Increments the error reporting lock level. If level is more than `0`, then |
| 2990 * [reportError] wont report any error. |
| 2991 */ |
| 2992 void lockErrorListener() { |
| 2993 _errorListenerLock++; |
| 2994 } |
| 2995 |
| 2996 /** |
2965 * Return `true` if the current token matches the given keyword. | 2997 * Return `true` if the current token matches the given keyword. |
2966 * | 2998 * |
2967 * @param keyword the keyword that can optionally appear in the current locati
on | 2999 * @param keyword the keyword that can optionally appear in the current locati
on |
2968 * @return `true` if the current token matches the given keyword | 3000 * @return `true` if the current token matches the given keyword |
2969 */ | 3001 */ |
2970 bool matches(Keyword keyword) => matches3(_currentToken, keyword); | 3002 bool matches(Keyword keyword) => matches3(_currentToken, keyword); |
2971 | 3003 |
2972 /** | 3004 /** |
2973 * Return `true` if the current token matches the given identifier. | 3005 * Return `true` if the current token matches the given identifier. |
2974 * | 3006 * |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3123 * <pre> | 3155 * <pre> |
3124 * argumentDefinitionTest ::= | 3156 * argumentDefinitionTest ::= |
3125 * '?' identifier | 3157 * '?' identifier |
3126 * </pre> | 3158 * </pre> |
3127 * | 3159 * |
3128 * @return the argument definition test that was parsed | 3160 * @return the argument definition test that was parsed |
3129 */ | 3161 */ |
3130 ArgumentDefinitionTest parseArgumentDefinitionTest() { | 3162 ArgumentDefinitionTest parseArgumentDefinitionTest() { |
3131 Token question = expect2(TokenType.QUESTION); | 3163 Token question = expect2(TokenType.QUESTION); |
3132 SimpleIdentifier identifier = parseSimpleIdentifier(); | 3164 SimpleIdentifier identifier = parseSimpleIdentifier(); |
3133 reportError10(ParserErrorCode.DEPRECATED_ARGUMENT_DEFINITION_TEST, question,
[]); | 3165 reportError11(ParserErrorCode.DEPRECATED_ARGUMENT_DEFINITION_TEST, question,
[]); |
3134 return new ArgumentDefinitionTest.full(question, identifier); | 3166 return new ArgumentDefinitionTest.full(question, identifier); |
3135 } | 3167 } |
3136 | 3168 |
3137 /** | 3169 /** |
3138 * Parse an assert statement. | 3170 * Parse an assert statement. |
3139 * | 3171 * |
3140 * <pre> | 3172 * <pre> |
3141 * assertStatement ::= | 3173 * assertStatement ::= |
3142 * 'assert' '(' conditionalExpression ')' ';' | 3174 * 'assert' '(' conditionalExpression ')' ';' |
3143 * </pre> | 3175 * </pre> |
3144 * | 3176 * |
3145 * @return the assert statement | 3177 * @return the assert statement |
3146 */ | 3178 */ |
3147 AssertStatement parseAssertStatement() { | 3179 AssertStatement parseAssertStatement() { |
3148 Token keyword = expect(Keyword.ASSERT); | 3180 Token keyword = expect(Keyword.ASSERT); |
3149 Token leftParen = expect2(TokenType.OPEN_PAREN); | 3181 Token leftParen = expect2(TokenType.OPEN_PAREN); |
3150 Expression expression = parseExpression2(); | 3182 Expression expression = parseExpression2(); |
3151 if (expression is AssignmentExpression) { | 3183 if (expression is AssignmentExpression) { |
3152 reportError(ParserErrorCode.ASSERT_DOES_NOT_TAKE_ASSIGNMENT, expression, [
]); | 3184 reportError9(ParserErrorCode.ASSERT_DOES_NOT_TAKE_ASSIGNMENT, expression,
[]); |
3153 } else if (expression is CascadeExpression) { | 3185 } else if (expression is CascadeExpression) { |
3154 reportError(ParserErrorCode.ASSERT_DOES_NOT_TAKE_CASCADE, expression, []); | 3186 reportError9(ParserErrorCode.ASSERT_DOES_NOT_TAKE_CASCADE, expression, [])
; |
3155 } else if (expression is ThrowExpression) { | 3187 } else if (expression is ThrowExpression) { |
3156 reportError(ParserErrorCode.ASSERT_DOES_NOT_TAKE_THROW, expression, []); | 3188 reportError9(ParserErrorCode.ASSERT_DOES_NOT_TAKE_THROW, expression, []); |
3157 } else if (expression is RethrowExpression) { | 3189 } else if (expression is RethrowExpression) { |
3158 reportError(ParserErrorCode.ASSERT_DOES_NOT_TAKE_RETHROW, expression, []); | 3190 reportError9(ParserErrorCode.ASSERT_DOES_NOT_TAKE_RETHROW, expression, [])
; |
3159 } | 3191 } |
3160 Token rightParen = expect2(TokenType.CLOSE_PAREN); | 3192 Token rightParen = expect2(TokenType.CLOSE_PAREN); |
3161 Token semicolon = expect2(TokenType.SEMICOLON); | 3193 Token semicolon = expect2(TokenType.SEMICOLON); |
3162 return new AssertStatement.full(keyword, leftParen, expression, rightParen,
semicolon); | 3194 return new AssertStatement.full(keyword, leftParen, expression, rightParen,
semicolon); |
3163 } | 3195 } |
3164 | 3196 |
3165 /** | 3197 /** |
3166 * Parse an assignable expression. | 3198 * Parse an assignable expression. |
3167 * | 3199 * |
3168 * <pre> | 3200 * <pre> |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3230 if (matches5(TokenType.OPEN_SQUARE_BRACKET)) { | 3262 if (matches5(TokenType.OPEN_SQUARE_BRACKET)) { |
3231 Token leftBracket = andAdvance; | 3263 Token leftBracket = andAdvance; |
3232 Expression index = parseExpression2(); | 3264 Expression index = parseExpression2(); |
3233 Token rightBracket = expect2(TokenType.CLOSE_SQUARE_BRACKET); | 3265 Token rightBracket = expect2(TokenType.CLOSE_SQUARE_BRACKET); |
3234 return new IndexExpression.forTarget_full(prefix, leftBracket, index, righ
tBracket); | 3266 return new IndexExpression.forTarget_full(prefix, leftBracket, index, righ
tBracket); |
3235 } else if (matches5(TokenType.PERIOD)) { | 3267 } else if (matches5(TokenType.PERIOD)) { |
3236 Token period = andAdvance; | 3268 Token period = andAdvance; |
3237 return new PropertyAccess.full(prefix, period, parseSimpleIdentifier()); | 3269 return new PropertyAccess.full(prefix, period, parseSimpleIdentifier()); |
3238 } else { | 3270 } else { |
3239 if (!optional) { | 3271 if (!optional) { |
3240 reportError9(ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR, []); | 3272 reportError10(ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR, []); |
3241 } | 3273 } |
3242 return prefix; | 3274 return prefix; |
3243 } | 3275 } |
3244 } | 3276 } |
3245 | 3277 |
3246 /** | 3278 /** |
3247 * Parse a bitwise and expression. | 3279 * Parse a bitwise and expression. |
3248 * | 3280 * |
3249 * <pre> | 3281 * <pre> |
3250 * bitwiseAndExpression ::= | 3282 * bitwiseAndExpression ::= |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3303 * | 3335 * |
3304 * @return the break statement that was parsed | 3336 * @return the break statement that was parsed |
3305 */ | 3337 */ |
3306 Statement parseBreakStatement() { | 3338 Statement parseBreakStatement() { |
3307 Token breakKeyword = expect(Keyword.BREAK); | 3339 Token breakKeyword = expect(Keyword.BREAK); |
3308 SimpleIdentifier label = null; | 3340 SimpleIdentifier label = null; |
3309 if (matchesIdentifier()) { | 3341 if (matchesIdentifier()) { |
3310 label = parseSimpleIdentifier(); | 3342 label = parseSimpleIdentifier(); |
3311 } | 3343 } |
3312 if (!_inLoop && !_inSwitch && label == null) { | 3344 if (!_inLoop && !_inSwitch && label == null) { |
3313 reportError10(ParserErrorCode.BREAK_OUTSIDE_OF_LOOP, breakKeyword, []); | 3345 reportError11(ParserErrorCode.BREAK_OUTSIDE_OF_LOOP, breakKeyword, []); |
3314 } | 3346 } |
3315 Token semicolon = expect2(TokenType.SEMICOLON); | 3347 Token semicolon = expect2(TokenType.SEMICOLON); |
3316 return new BreakStatement.full(breakKeyword, label, semicolon); | 3348 return new BreakStatement.full(breakKeyword, label, semicolon); |
3317 } | 3349 } |
3318 | 3350 |
3319 /** | 3351 /** |
3320 * Parse a cascade section. | 3352 * Parse a cascade section. |
3321 * | 3353 * |
3322 * <pre> | 3354 * <pre> |
3323 * cascadeSection ::= | 3355 * cascadeSection ::= |
(...skipping 15 matching lines...) Expand all Loading... |
3339 SimpleIdentifier functionName = null; | 3371 SimpleIdentifier functionName = null; |
3340 if (matchesIdentifier()) { | 3372 if (matchesIdentifier()) { |
3341 functionName = parseSimpleIdentifier(); | 3373 functionName = parseSimpleIdentifier(); |
3342 } else if (identical(_currentToken.type, TokenType.OPEN_SQUARE_BRACKET)) { | 3374 } else if (identical(_currentToken.type, TokenType.OPEN_SQUARE_BRACKET)) { |
3343 Token leftBracket = andAdvance; | 3375 Token leftBracket = andAdvance; |
3344 Expression index = parseExpression2(); | 3376 Expression index = parseExpression2(); |
3345 Token rightBracket = expect2(TokenType.CLOSE_SQUARE_BRACKET); | 3377 Token rightBracket = expect2(TokenType.CLOSE_SQUARE_BRACKET); |
3346 expression = new IndexExpression.forCascade_full(period, leftBracket, inde
x, rightBracket); | 3378 expression = new IndexExpression.forCascade_full(period, leftBracket, inde
x, rightBracket); |
3347 period = null; | 3379 period = null; |
3348 } else { | 3380 } else { |
3349 reportError10(ParserErrorCode.MISSING_IDENTIFIER, _currentToken, [_current
Token.lexeme]); | 3381 reportError11(ParserErrorCode.MISSING_IDENTIFIER, _currentToken, [_current
Token.lexeme]); |
3350 functionName = createSyntheticIdentifier(); | 3382 functionName = createSyntheticIdentifier(); |
3351 } | 3383 } |
3352 if (identical(_currentToken.type, TokenType.OPEN_PAREN)) { | 3384 if (identical(_currentToken.type, TokenType.OPEN_PAREN)) { |
3353 while (identical(_currentToken.type, TokenType.OPEN_PAREN)) { | 3385 while (identical(_currentToken.type, TokenType.OPEN_PAREN)) { |
3354 if (functionName != null) { | 3386 if (functionName != null) { |
3355 expression = new MethodInvocation.full(expression, period, functionNam
e, parseArgumentList()); | 3387 expression = new MethodInvocation.full(expression, period, functionNam
e, parseArgumentList()); |
3356 period = null; | 3388 period = null; |
3357 functionName = null; | 3389 functionName = null; |
3358 } else if (expression == null) { | 3390 } else if (expression == null) { |
3359 expression = new MethodInvocation.full(expression, period, createSynth
eticIdentifier(), parseArgumentList()); | 3391 expression = new MethodInvocation.full(expression, period, createSynth
eticIdentifier(), parseArgumentList()); |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3425 } | 3457 } |
3426 ExtendsClause extendsClause = null; | 3458 ExtendsClause extendsClause = null; |
3427 WithClause withClause = null; | 3459 WithClause withClause = null; |
3428 ImplementsClause implementsClause = null; | 3460 ImplementsClause implementsClause = null; |
3429 bool foundClause = true; | 3461 bool foundClause = true; |
3430 while (foundClause) { | 3462 while (foundClause) { |
3431 if (matches(Keyword.EXTENDS)) { | 3463 if (matches(Keyword.EXTENDS)) { |
3432 if (extendsClause == null) { | 3464 if (extendsClause == null) { |
3433 extendsClause = parseExtendsClause(); | 3465 extendsClause = parseExtendsClause(); |
3434 if (withClause != null) { | 3466 if (withClause != null) { |
3435 reportError10(ParserErrorCode.WITH_BEFORE_EXTENDS, withClause.withKe
yword, []); | 3467 reportError11(ParserErrorCode.WITH_BEFORE_EXTENDS, withClause.withKe
yword, []); |
3436 } else if (implementsClause != null) { | 3468 } else if (implementsClause != null) { |
3437 reportError10(ParserErrorCode.IMPLEMENTS_BEFORE_EXTENDS, implementsC
lause.keyword, []); | 3469 reportError11(ParserErrorCode.IMPLEMENTS_BEFORE_EXTENDS, implementsC
lause.keyword, []); |
3438 } | 3470 } |
3439 } else { | 3471 } else { |
3440 reportError10(ParserErrorCode.MULTIPLE_EXTENDS_CLAUSES, extendsClause.
keyword, []); | 3472 reportError11(ParserErrorCode.MULTIPLE_EXTENDS_CLAUSES, extendsClause.
keyword, []); |
3441 parseExtendsClause(); | 3473 parseExtendsClause(); |
3442 } | 3474 } |
3443 } else if (matches(Keyword.WITH)) { | 3475 } else if (matches(Keyword.WITH)) { |
3444 if (withClause == null) { | 3476 if (withClause == null) { |
3445 withClause = parseWithClause(); | 3477 withClause = parseWithClause(); |
3446 if (implementsClause != null) { | 3478 if (implementsClause != null) { |
3447 reportError10(ParserErrorCode.IMPLEMENTS_BEFORE_WITH, implementsClau
se.keyword, []); | 3479 reportError11(ParserErrorCode.IMPLEMENTS_BEFORE_WITH, implementsClau
se.keyword, []); |
3448 } | 3480 } |
3449 } else { | 3481 } else { |
3450 reportError10(ParserErrorCode.MULTIPLE_WITH_CLAUSES, withClause.withKe
yword, []); | 3482 reportError11(ParserErrorCode.MULTIPLE_WITH_CLAUSES, withClause.withKe
yword, []); |
3451 parseWithClause(); | 3483 parseWithClause(); |
3452 } | 3484 } |
3453 } else if (matches(Keyword.IMPLEMENTS)) { | 3485 } else if (matches(Keyword.IMPLEMENTS)) { |
3454 if (implementsClause == null) { | 3486 if (implementsClause == null) { |
3455 implementsClause = parseImplementsClause(); | 3487 implementsClause = parseImplementsClause(); |
3456 } else { | 3488 } else { |
3457 reportError10(ParserErrorCode.MULTIPLE_IMPLEMENTS_CLAUSES, implementsC
lause.keyword, []); | 3489 reportError11(ParserErrorCode.MULTIPLE_IMPLEMENTS_CLAUSES, implementsC
lause.keyword, []); |
3458 parseImplementsClause(); | 3490 parseImplementsClause(); |
3459 } | 3491 } |
3460 } else { | 3492 } else { |
3461 foundClause = false; | 3493 foundClause = false; |
3462 } | 3494 } |
3463 } | 3495 } |
3464 if (withClause != null && extendsClause == null) { | 3496 if (withClause != null && extendsClause == null) { |
3465 reportError10(ParserErrorCode.WITH_WITHOUT_EXTENDS, withClause.withKeyword
, []); | 3497 reportError11(ParserErrorCode.WITH_WITHOUT_EXTENDS, withClause.withKeyword
, []); |
3466 } | 3498 } |
3467 NativeClause nativeClause = null; | 3499 NativeClause nativeClause = null; |
3468 if (matches2(_NATIVE) && matches4(peek(), TokenType.STRING)) { | 3500 if (matches2(_NATIVE) && matches4(peek(), TokenType.STRING)) { |
3469 nativeClause = parseNativeClause(); | 3501 nativeClause = parseNativeClause(); |
3470 } | 3502 } |
3471 Token leftBracket = null; | 3503 Token leftBracket = null; |
3472 List<ClassMember> members = null; | 3504 List<ClassMember> members = null; |
3473 Token rightBracket = null; | 3505 Token rightBracket = null; |
3474 if (matches5(TokenType.OPEN_CURLY_BRACKET)) { | 3506 if (matches5(TokenType.OPEN_CURLY_BRACKET)) { |
3475 leftBracket = expect2(TokenType.OPEN_CURLY_BRACKET); | 3507 leftBracket = expect2(TokenType.OPEN_CURLY_BRACKET); |
3476 members = parseClassMembers(className, getEndToken(leftBracket)); | 3508 members = parseClassMembers(className, getEndToken(leftBracket)); |
3477 rightBracket = expect2(TokenType.CLOSE_CURLY_BRACKET); | 3509 rightBracket = expect2(TokenType.CLOSE_CURLY_BRACKET); |
3478 } else { | 3510 } else { |
3479 leftBracket = createSyntheticToken2(TokenType.OPEN_CURLY_BRACKET); | 3511 leftBracket = createSyntheticToken2(TokenType.OPEN_CURLY_BRACKET); |
3480 rightBracket = createSyntheticToken2(TokenType.CLOSE_CURLY_BRACKET); | 3512 rightBracket = createSyntheticToken2(TokenType.CLOSE_CURLY_BRACKET); |
3481 reportError9(ParserErrorCode.MISSING_CLASS_BODY, []); | 3513 reportError10(ParserErrorCode.MISSING_CLASS_BODY, []); |
3482 } | 3514 } |
3483 ClassDeclaration classDeclaration = new ClassDeclaration.full(commentAndMeta
data.comment, commentAndMetadata.metadata, abstractKeyword, keyword, name, typeP
arameters, extendsClause, withClause, implementsClause, leftBracket, members, ri
ghtBracket); | 3515 ClassDeclaration classDeclaration = new ClassDeclaration.full(commentAndMeta
data.comment, commentAndMetadata.metadata, abstractKeyword, keyword, name, typeP
arameters, extendsClause, withClause, implementsClause, leftBracket, members, ri
ghtBracket); |
3484 classDeclaration.nativeClause = nativeClause; | 3516 classDeclaration.nativeClause = nativeClause; |
3485 return classDeclaration; | 3517 return classDeclaration; |
3486 } | 3518 } |
3487 | 3519 |
3488 /** | 3520 /** |
3489 * Parse a list of class members. | 3521 * Parse a list of class members. |
3490 * | 3522 * |
3491 * <pre> | 3523 * <pre> |
3492 * classMembers ::= | 3524 * classMembers ::= |
3493 * (metadata memberDefinition)* | 3525 * (metadata memberDefinition)* |
3494 * </pre> | 3526 * </pre> |
3495 * | 3527 * |
3496 * @param className the name of the class whose members are being parsed | 3528 * @param className the name of the class whose members are being parsed |
3497 * @param closingBracket the closing bracket for the class, or `null` if the c
losing bracket | 3529 * @param closingBracket the closing bracket for the class, or `null` if the c
losing bracket |
3498 * is missing | 3530 * is missing |
3499 * @return the list of class members that were parsed | 3531 * @return the list of class members that were parsed |
3500 */ | 3532 */ |
3501 List<ClassMember> parseClassMembers(String className, Token closingBracket) { | 3533 List<ClassMember> parseClassMembers(String className, Token closingBracket) { |
3502 List<ClassMember> members = new List<ClassMember>(); | 3534 List<ClassMember> members = new List<ClassMember>(); |
3503 Token memberStart = _currentToken; | 3535 Token memberStart = _currentToken; |
3504 while (!matches5(TokenType.EOF) && !matches5(TokenType.CLOSE_CURLY_BRACKET)
&& (closingBracket != null || (!matches(Keyword.CLASS) && !matches(Keyword.TYPED
EF)))) { | 3536 while (!matches5(TokenType.EOF) && !matches5(TokenType.CLOSE_CURLY_BRACKET)
&& (closingBracket != null || (!matches(Keyword.CLASS) && !matches(Keyword.TYPED
EF)))) { |
3505 if (matches5(TokenType.SEMICOLON)) { | 3537 if (matches5(TokenType.SEMICOLON)) { |
3506 reportError10(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_current
Token.lexeme]); | 3538 reportError11(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_current
Token.lexeme]); |
3507 advance(); | 3539 advance(); |
3508 } else { | 3540 } else { |
3509 ClassMember member = parseClassMember(className); | 3541 ClassMember member = parseClassMember(className); |
3510 if (member != null) { | 3542 if (member != null) { |
3511 members.add(member); | 3543 members.add(member); |
3512 } | 3544 } |
3513 } | 3545 } |
3514 if (identical(_currentToken, memberStart)) { | 3546 if (identical(_currentToken, memberStart)) { |
3515 reportError10(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_current
Token.lexeme]); | 3547 reportError11(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_current
Token.lexeme]); |
3516 advance(); | 3548 advance(); |
3517 } | 3549 } |
3518 memberStart = _currentToken; | 3550 memberStart = _currentToken; |
3519 } | 3551 } |
3520 return members; | 3552 return members; |
3521 } | 3553 } |
3522 | 3554 |
3523 /** | 3555 /** |
3524 * Parse a class type alias. | 3556 * Parse a class type alias. |
3525 * | 3557 * |
(...skipping 27 matching lines...) Expand all Loading... |
3553 } | 3585 } |
3554 ImplementsClause implementsClause = null; | 3586 ImplementsClause implementsClause = null; |
3555 if (matches(Keyword.IMPLEMENTS)) { | 3587 if (matches(Keyword.IMPLEMENTS)) { |
3556 implementsClause = parseImplementsClause(); | 3588 implementsClause = parseImplementsClause(); |
3557 } | 3589 } |
3558 Token semicolon; | 3590 Token semicolon; |
3559 if (matches5(TokenType.SEMICOLON)) { | 3591 if (matches5(TokenType.SEMICOLON)) { |
3560 semicolon = andAdvance; | 3592 semicolon = andAdvance; |
3561 } else { | 3593 } else { |
3562 if (matches5(TokenType.OPEN_CURLY_BRACKET)) { | 3594 if (matches5(TokenType.OPEN_CURLY_BRACKET)) { |
3563 reportError9(ParserErrorCode.EXPECTED_TOKEN, [TokenType.SEMICOLON.lexeme
]); | 3595 reportError10(ParserErrorCode.EXPECTED_TOKEN, [TokenType.SEMICOLON.lexem
e]); |
3564 Token leftBracket = andAdvance; | 3596 Token leftBracket = andAdvance; |
3565 parseClassMembers(className.name, getEndToken(leftBracket)); | 3597 parseClassMembers(className.name, getEndToken(leftBracket)); |
3566 expect2(TokenType.CLOSE_CURLY_BRACKET); | 3598 expect2(TokenType.CLOSE_CURLY_BRACKET); |
3567 } else { | 3599 } else { |
3568 reportError10(ParserErrorCode.EXPECTED_TOKEN, _currentToken.previous, [T
okenType.SEMICOLON.lexeme]); | 3600 reportError11(ParserErrorCode.EXPECTED_TOKEN, _currentToken.previous, [T
okenType.SEMICOLON.lexeme]); |
3569 } | 3601 } |
3570 semicolon = createSyntheticToken2(TokenType.SEMICOLON); | 3602 semicolon = createSyntheticToken2(TokenType.SEMICOLON); |
3571 } | 3603 } |
3572 return new ClassTypeAlias.full(commentAndMetadata.comment, commentAndMetadat
a.metadata, keyword, className, typeParameters, equals, abstractKeyword, supercl
ass, withClause, implementsClause, semicolon); | 3604 return new ClassTypeAlias.full(commentAndMetadata.comment, commentAndMetadat
a.metadata, keyword, className, typeParameters, equals, abstractKeyword, supercl
ass, withClause, implementsClause, semicolon); |
3573 } | 3605 } |
3574 | 3606 |
3575 /** | 3607 /** |
3576 * Parse a list of combinators in a directive. | 3608 * Parse a list of combinators in a directive. |
3577 * | 3609 * |
3578 * <pre> | 3610 * <pre> |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3752 } else if (matches(Keyword.TYPEDEF) && !matches4(peek(), TokenType.PERIOD) &
& !matches4(peek(), TokenType.LT) && !matches4(peek(), TokenType.OPEN_PAREN)) { | 3784 } else if (matches(Keyword.TYPEDEF) && !matches4(peek(), TokenType.PERIOD) &
& !matches4(peek(), TokenType.LT) && !matches4(peek(), TokenType.OPEN_PAREN)) { |
3753 validateModifiersForTypedef(modifiers); | 3785 validateModifiersForTypedef(modifiers); |
3754 return parseTypeAlias(commentAndMetadata); | 3786 return parseTypeAlias(commentAndMetadata); |
3755 } | 3787 } |
3756 if (matches(Keyword.VOID)) { | 3788 if (matches(Keyword.VOID)) { |
3757 TypeName returnType = parseReturnType(); | 3789 TypeName returnType = parseReturnType(); |
3758 if ((matches(Keyword.GET) || matches(Keyword.SET)) && matchesIdentifier2(p
eek())) { | 3790 if ((matches(Keyword.GET) || matches(Keyword.SET)) && matchesIdentifier2(p
eek())) { |
3759 validateModifiersForTopLevelFunction(modifiers); | 3791 validateModifiersForTopLevelFunction(modifiers); |
3760 return parseFunctionDeclaration(commentAndMetadata, modifiers.externalKe
yword, null); | 3792 return parseFunctionDeclaration(commentAndMetadata, modifiers.externalKe
yword, null); |
3761 } else if (matches(Keyword.OPERATOR) && isOperator(peek())) { | 3793 } else if (matches(Keyword.OPERATOR) && isOperator(peek())) { |
3762 reportError10(ParserErrorCode.TOP_LEVEL_OPERATOR, _currentToken, []); | 3794 reportError11(ParserErrorCode.TOP_LEVEL_OPERATOR, _currentToken, []); |
3763 return convertToFunctionDeclaration(parseOperator(commentAndMetadata, mo
difiers.externalKeyword, returnType)); | 3795 return convertToFunctionDeclaration(parseOperator(commentAndMetadata, mo
difiers.externalKeyword, returnType)); |
3764 } else if (matchesIdentifier() && matchesAny(peek(), [ | 3796 } else if (matchesIdentifier() && matchesAny(peek(), [ |
3765 TokenType.OPEN_PAREN, | 3797 TokenType.OPEN_PAREN, |
3766 TokenType.OPEN_CURLY_BRACKET, | 3798 TokenType.OPEN_CURLY_BRACKET, |
3767 TokenType.FUNCTION])) { | 3799 TokenType.FUNCTION])) { |
3768 validateModifiersForTopLevelFunction(modifiers); | 3800 validateModifiersForTopLevelFunction(modifiers); |
3769 return parseFunctionDeclaration(commentAndMetadata, modifiers.externalKe
yword, returnType); | 3801 return parseFunctionDeclaration(commentAndMetadata, modifiers.externalKe
yword, returnType); |
3770 } else { | 3802 } else { |
3771 if (matchesIdentifier()) { | 3803 if (matchesIdentifier()) { |
3772 if (matchesAny(peek(), [TokenType.EQ, TokenType.COMMA, TokenType.SEMIC
OLON])) { | 3804 if (matchesAny(peek(), [TokenType.EQ, TokenType.COMMA, TokenType.SEMIC
OLON])) { |
3773 reportError(ParserErrorCode.VOID_VARIABLE, returnType, []); | 3805 reportError9(ParserErrorCode.VOID_VARIABLE, returnType, []); |
3774 return new TopLevelVariableDeclaration.full(commentAndMetadata.comme
nt, commentAndMetadata.metadata, parseVariableDeclarationList2(null, validateMod
ifiersForTopLevelVariable(modifiers), null), expect2(TokenType.SEMICOLON)); | 3806 return new TopLevelVariableDeclaration.full(commentAndMetadata.comme
nt, commentAndMetadata.metadata, parseVariableDeclarationList2(null, validateMod
ifiersForTopLevelVariable(modifiers), null), expect2(TokenType.SEMICOLON)); |
3775 } | 3807 } |
3776 } | 3808 } |
3777 reportError10(ParserErrorCode.EXPECTED_EXECUTABLE, _currentToken, []); | 3809 reportError11(ParserErrorCode.EXPECTED_EXECUTABLE, _currentToken, []); |
3778 return null; | 3810 return null; |
3779 } | 3811 } |
3780 } else if ((matches(Keyword.GET) || matches(Keyword.SET)) && matchesIdentifi
er2(peek())) { | 3812 } else if ((matches(Keyword.GET) || matches(Keyword.SET)) && matchesIdentifi
er2(peek())) { |
3781 validateModifiersForTopLevelFunction(modifiers); | 3813 validateModifiersForTopLevelFunction(modifiers); |
3782 return parseFunctionDeclaration(commentAndMetadata, modifiers.externalKeyw
ord, null); | 3814 return parseFunctionDeclaration(commentAndMetadata, modifiers.externalKeyw
ord, null); |
3783 } else if (matches(Keyword.OPERATOR) && isOperator(peek())) { | 3815 } else if (matches(Keyword.OPERATOR) && isOperator(peek())) { |
3784 reportError10(ParserErrorCode.TOP_LEVEL_OPERATOR, _currentToken, []); | 3816 reportError11(ParserErrorCode.TOP_LEVEL_OPERATOR, _currentToken, []); |
3785 return convertToFunctionDeclaration(parseOperator(commentAndMetadata, modi
fiers.externalKeyword, null)); | 3817 return convertToFunctionDeclaration(parseOperator(commentAndMetadata, modi
fiers.externalKeyword, null)); |
3786 } else if (!matchesIdentifier()) { | 3818 } else if (!matchesIdentifier()) { |
3787 reportError10(ParserErrorCode.EXPECTED_EXECUTABLE, _currentToken, []); | 3819 reportError11(ParserErrorCode.EXPECTED_EXECUTABLE, _currentToken, []); |
3788 return null; | 3820 return null; |
3789 } else if (matches4(peek(), TokenType.OPEN_PAREN)) { | 3821 } else if (matches4(peek(), TokenType.OPEN_PAREN)) { |
3790 validateModifiersForTopLevelFunction(modifiers); | 3822 validateModifiersForTopLevelFunction(modifiers); |
3791 return parseFunctionDeclaration(commentAndMetadata, modifiers.externalKeyw
ord, null); | 3823 return parseFunctionDeclaration(commentAndMetadata, modifiers.externalKeyw
ord, null); |
3792 } else if (matchesAny(peek(), [TokenType.EQ, TokenType.COMMA, TokenType.SEMI
COLON])) { | 3824 } else if (matchesAny(peek(), [TokenType.EQ, TokenType.COMMA, TokenType.SEMI
COLON])) { |
3793 if (modifiers.constKeyword == null && modifiers.finalKeyword == null && mo
difiers.varKeyword == null) { | 3825 if (modifiers.constKeyword == null && modifiers.finalKeyword == null && mo
difiers.varKeyword == null) { |
3794 reportError9(ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, []); | 3826 reportError10(ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, []); |
3795 } | 3827 } |
3796 return new TopLevelVariableDeclaration.full(commentAndMetadata.comment, co
mmentAndMetadata.metadata, parseVariableDeclarationList2(null, validateModifiers
ForTopLevelVariable(modifiers), null), expect2(TokenType.SEMICOLON)); | 3828 return new TopLevelVariableDeclaration.full(commentAndMetadata.comment, co
mmentAndMetadata.metadata, parseVariableDeclarationList2(null, validateModifiers
ForTopLevelVariable(modifiers), null), expect2(TokenType.SEMICOLON)); |
3797 } | 3829 } |
3798 TypeName returnType = parseReturnType(); | 3830 TypeName returnType = parseReturnType(); |
3799 if ((matches(Keyword.GET) || matches(Keyword.SET)) && matchesIdentifier2(pee
k())) { | 3831 if ((matches(Keyword.GET) || matches(Keyword.SET)) && matchesIdentifier2(pee
k())) { |
3800 validateModifiersForTopLevelFunction(modifiers); | 3832 validateModifiersForTopLevelFunction(modifiers); |
3801 return parseFunctionDeclaration(commentAndMetadata, modifiers.externalKeyw
ord, returnType); | 3833 return parseFunctionDeclaration(commentAndMetadata, modifiers.externalKeyw
ord, returnType); |
3802 } else if (matches(Keyword.OPERATOR) && isOperator(peek())) { | 3834 } else if (matches(Keyword.OPERATOR) && isOperator(peek())) { |
3803 reportError10(ParserErrorCode.TOP_LEVEL_OPERATOR, _currentToken, []); | 3835 reportError11(ParserErrorCode.TOP_LEVEL_OPERATOR, _currentToken, []); |
3804 return convertToFunctionDeclaration(parseOperator(commentAndMetadata, modi
fiers.externalKeyword, returnType)); | 3836 return convertToFunctionDeclaration(parseOperator(commentAndMetadata, modi
fiers.externalKeyword, returnType)); |
3805 } else if (matches5(TokenType.AT)) { | 3837 } else if (matches5(TokenType.AT)) { |
3806 return new TopLevelVariableDeclaration.full(commentAndMetadata.comment, co
mmentAndMetadata.metadata, parseVariableDeclarationList2(null, validateModifiers
ForTopLevelVariable(modifiers), returnType), expect2(TokenType.SEMICOLON)); | 3838 return new TopLevelVariableDeclaration.full(commentAndMetadata.comment, co
mmentAndMetadata.metadata, parseVariableDeclarationList2(null, validateModifiers
ForTopLevelVariable(modifiers), returnType), expect2(TokenType.SEMICOLON)); |
3807 } else if (!matchesIdentifier()) { | 3839 } else if (!matchesIdentifier()) { |
3808 reportError10(ParserErrorCode.EXPECTED_EXECUTABLE, _currentToken, []); | 3840 reportError11(ParserErrorCode.EXPECTED_EXECUTABLE, _currentToken, []); |
3809 Token semicolon; | 3841 Token semicolon; |
3810 if (matches5(TokenType.SEMICOLON)) { | 3842 if (matches5(TokenType.SEMICOLON)) { |
3811 semicolon = andAdvance; | 3843 semicolon = andAdvance; |
3812 } else { | 3844 } else { |
3813 semicolon = createSyntheticToken2(TokenType.SEMICOLON); | 3845 semicolon = createSyntheticToken2(TokenType.SEMICOLON); |
3814 } | 3846 } |
3815 List<VariableDeclaration> variables = new List<VariableDeclaration>(); | 3847 List<VariableDeclaration> variables = new List<VariableDeclaration>(); |
3816 variables.add(new VariableDeclaration.full(null, null, createSyntheticIden
tifier(), null, null)); | 3848 variables.add(new VariableDeclaration.full(null, null, createSyntheticIden
tifier(), null, null)); |
3817 return new TopLevelVariableDeclaration.full(commentAndMetadata.comment, co
mmentAndMetadata.metadata, new VariableDeclarationList.full(null, null, null, re
turnType, variables), semicolon); | 3849 return new TopLevelVariableDeclaration.full(commentAndMetadata.comment, co
mmentAndMetadata.metadata, new VariableDeclarationList.full(null, null, null, re
turnType, variables), semicolon); |
3818 } | 3850 } |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3875 } | 3907 } |
3876 } while (optional(TokenType.COMMA)); | 3908 } while (optional(TokenType.COMMA)); |
3877 } | 3909 } |
3878 ConstructorName redirectedConstructor = null; | 3910 ConstructorName redirectedConstructor = null; |
3879 FunctionBody body; | 3911 FunctionBody body; |
3880 if (matches5(TokenType.EQ)) { | 3912 if (matches5(TokenType.EQ)) { |
3881 separator = andAdvance; | 3913 separator = andAdvance; |
3882 redirectedConstructor = parseConstructorName(); | 3914 redirectedConstructor = parseConstructorName(); |
3883 body = new EmptyFunctionBody.full(expect2(TokenType.SEMICOLON)); | 3915 body = new EmptyFunctionBody.full(expect2(TokenType.SEMICOLON)); |
3884 if (factoryKeyword == null) { | 3916 if (factoryKeyword == null) { |
3885 reportError(ParserErrorCode.REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR, redi
rectedConstructor, []); | 3917 reportError9(ParserErrorCode.REDIRECTION_IN_NON_FACTORY_CONSTRUCTOR, red
irectedConstructor, []); |
3886 } | 3918 } |
3887 } else { | 3919 } else { |
3888 body = parseFunctionBody(true, ParserErrorCode.MISSING_FUNCTION_BODY, fals
e); | 3920 body = parseFunctionBody(true, ParserErrorCode.MISSING_FUNCTION_BODY, fals
e); |
3889 if (constKeyword != null && factoryKeyword != null && externalKeyword == n
ull) { | 3921 if (constKeyword != null && factoryKeyword != null && externalKeyword == n
ull) { |
3890 reportError10(ParserErrorCode.CONST_FACTORY, factoryKeyword, []); | 3922 reportError11(ParserErrorCode.CONST_FACTORY, factoryKeyword, []); |
3891 } else if (body is EmptyFunctionBody) { | 3923 } else if (body is EmptyFunctionBody) { |
3892 if (factoryKeyword != null && externalKeyword == null) { | 3924 if (factoryKeyword != null && externalKeyword == null) { |
3893 reportError10(ParserErrorCode.FACTORY_WITHOUT_BODY, factoryKeyword, []
); | 3925 reportError11(ParserErrorCode.FACTORY_WITHOUT_BODY, factoryKeyword, []
); |
3894 } | 3926 } |
3895 } else { | 3927 } else { |
3896 if (constKeyword != null) { | 3928 if (constKeyword != null) { |
3897 reportError(ParserErrorCode.CONST_CONSTRUCTOR_WITH_BODY, body, []); | 3929 reportError9(ParserErrorCode.CONST_CONSTRUCTOR_WITH_BODY, body, []); |
3898 } else if (!bodyAllowed) { | 3930 } else if (!bodyAllowed) { |
3899 reportError(ParserErrorCode.EXTERNAL_CONSTRUCTOR_WITH_BODY, body, []); | 3931 reportError9(ParserErrorCode.EXTERNAL_CONSTRUCTOR_WITH_BODY, body, [])
; |
3900 } | 3932 } |
3901 } | 3933 } |
3902 } | 3934 } |
3903 return new ConstructorDeclaration.full(commentAndMetadata.comment, commentAn
dMetadata.metadata, externalKeyword, constKeyword, factoryKeyword, returnType, p
eriod, name, parameters, separator, initializers, redirectedConstructor, body); | 3935 return new ConstructorDeclaration.full(commentAndMetadata.comment, commentAn
dMetadata.metadata, externalKeyword, constKeyword, factoryKeyword, returnType, p
eriod, name, parameters, separator, initializers, redirectedConstructor, body); |
3904 } | 3936 } |
3905 | 3937 |
3906 /** | 3938 /** |
3907 * Parse a field initializer within a constructor. | 3939 * Parse a field initializer within a constructor. |
3908 * | 3940 * |
3909 * <pre> | 3941 * <pre> |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3944 * <pre> | 3976 * <pre> |
3945 * continueStatement ::= | 3977 * continueStatement ::= |
3946 * 'continue' identifier? ';' | 3978 * 'continue' identifier? ';' |
3947 * </pre> | 3979 * </pre> |
3948 * | 3980 * |
3949 * @return the continue statement that was parsed | 3981 * @return the continue statement that was parsed |
3950 */ | 3982 */ |
3951 Statement parseContinueStatement() { | 3983 Statement parseContinueStatement() { |
3952 Token continueKeyword = expect(Keyword.CONTINUE); | 3984 Token continueKeyword = expect(Keyword.CONTINUE); |
3953 if (!_inLoop && !_inSwitch) { | 3985 if (!_inLoop && !_inSwitch) { |
3954 reportError10(ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP, continueKeyword, [
]); | 3986 reportError11(ParserErrorCode.CONTINUE_OUTSIDE_OF_LOOP, continueKeyword, [
]); |
3955 } | 3987 } |
3956 SimpleIdentifier label = null; | 3988 SimpleIdentifier label = null; |
3957 if (matchesIdentifier()) { | 3989 if (matchesIdentifier()) { |
3958 label = parseSimpleIdentifier(); | 3990 label = parseSimpleIdentifier(); |
3959 } | 3991 } |
3960 if (_inSwitch && !_inLoop && label == null) { | 3992 if (_inSwitch && !_inLoop && label == null) { |
3961 reportError10(ParserErrorCode.CONTINUE_WITHOUT_LABEL_IN_CASE, continueKeyw
ord, []); | 3993 reportError11(ParserErrorCode.CONTINUE_WITHOUT_LABEL_IN_CASE, continueKeyw
ord, []); |
3962 } | 3994 } |
3963 Token semicolon = expect2(TokenType.SEMICOLON); | 3995 Token semicolon = expect2(TokenType.SEMICOLON); |
3964 return new ContinueStatement.full(continueKeyword, label, semicolon); | 3996 return new ContinueStatement.full(continueKeyword, label, semicolon); |
3965 } | 3997 } |
3966 | 3998 |
3967 /** | 3999 /** |
3968 * Parse a directive. | 4000 * Parse a directive. |
3969 * | 4001 * |
3970 * <pre> | 4002 * <pre> |
3971 * directive ::= | 4003 * directive ::= |
(...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4084 Expression expression; | 4116 Expression expression; |
4085 if (matches(Keyword.SUPER) && _currentToken.next.type.isEqualityOperator) { | 4117 if (matches(Keyword.SUPER) && _currentToken.next.type.isEqualityOperator) { |
4086 expression = new SuperExpression.full(andAdvance); | 4118 expression = new SuperExpression.full(andAdvance); |
4087 } else { | 4119 } else { |
4088 expression = parseRelationalExpression(); | 4120 expression = parseRelationalExpression(); |
4089 } | 4121 } |
4090 bool leftEqualityExpression = false; | 4122 bool leftEqualityExpression = false; |
4091 while (_currentToken.type.isEqualityOperator) { | 4123 while (_currentToken.type.isEqualityOperator) { |
4092 Token operator = andAdvance; | 4124 Token operator = andAdvance; |
4093 if (leftEqualityExpression) { | 4125 if (leftEqualityExpression) { |
4094 reportError(ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND, express
ion, []); | 4126 reportError9(ParserErrorCode.EQUALITY_CANNOT_BE_EQUALITY_OPERAND, expres
sion, []); |
4095 } | 4127 } |
4096 expression = new BinaryExpression.full(expression, operator, parseRelation
alExpression()); | 4128 expression = new BinaryExpression.full(expression, operator, parseRelation
alExpression()); |
4097 leftEqualityExpression = true; | 4129 leftEqualityExpression = true; |
4098 } | 4130 } |
4099 return expression; | 4131 return expression; |
4100 } | 4132 } |
4101 | 4133 |
4102 /** | 4134 /** |
4103 * Parse an export directive. | 4135 * Parse an export directive. |
4104 * | 4136 * |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4158 keyword = andAdvance; | 4190 keyword = andAdvance; |
4159 if (isTypedIdentifier(_currentToken)) { | 4191 if (isTypedIdentifier(_currentToken)) { |
4160 type = parseTypeName(); | 4192 type = parseTypeName(); |
4161 } | 4193 } |
4162 } else if (matches(Keyword.VAR)) { | 4194 } else if (matches(Keyword.VAR)) { |
4163 keyword = andAdvance; | 4195 keyword = andAdvance; |
4164 } else { | 4196 } else { |
4165 if (isTypedIdentifier(_currentToken)) { | 4197 if (isTypedIdentifier(_currentToken)) { |
4166 type = parseReturnType(); | 4198 type = parseReturnType(); |
4167 } else if (!optional) { | 4199 } else if (!optional) { |
4168 reportError9(ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, []); | 4200 reportError10(ParserErrorCode.MISSING_CONST_FINAL_VAR_OR_TYPE, []); |
4169 } | 4201 } |
4170 } | 4202 } |
4171 return new FinalConstVarOrType(keyword, type); | 4203 return new FinalConstVarOrType(keyword, type); |
4172 } | 4204 } |
4173 | 4205 |
4174 /** | 4206 /** |
4175 * Parse a formal parameter. At most one of `isOptional` and `isNamed` can be | 4207 * Parse a formal parameter. At most one of `isOptional` and `isNamed` can be |
4176 * `true`. | 4208 * `true`. |
4177 * | 4209 * |
4178 * <pre> | 4210 * <pre> |
4179 * defaultFormalParameter ::= | 4211 * defaultFormalParameter ::= |
4180 * normalFormalParameter ('=' expression)? | 4212 * normalFormalParameter ('=' expression)? |
4181 * | 4213 * |
4182 * defaultNamedParameter ::= | 4214 * defaultNamedParameter ::= |
4183 * normalFormalParameter (':' expression)? | 4215 * normalFormalParameter (':' expression)? |
4184 * </pre> | 4216 * </pre> |
4185 * | 4217 * |
4186 * @param kind the kind of parameter being expected based on the presence or a
bsence of group | 4218 * @param kind the kind of parameter being expected based on the presence or a
bsence of group |
4187 * delimiters | 4219 * delimiters |
4188 * @return the formal parameter that was parsed | 4220 * @return the formal parameter that was parsed |
4189 */ | 4221 */ |
4190 FormalParameter parseFormalParameter(ParameterKind kind) { | 4222 FormalParameter parseFormalParameter(ParameterKind kind) { |
4191 NormalFormalParameter parameter = parseNormalFormalParameter(); | 4223 NormalFormalParameter parameter = parseNormalFormalParameter(); |
4192 if (matches5(TokenType.EQ)) { | 4224 if (matches5(TokenType.EQ)) { |
4193 Token seperator = andAdvance; | 4225 Token seperator = andAdvance; |
4194 Expression defaultValue = parseExpression2(); | 4226 Expression defaultValue = parseExpression2(); |
4195 if (identical(kind, ParameterKind.NAMED)) { | 4227 if (identical(kind, ParameterKind.NAMED)) { |
4196 reportError10(ParserErrorCode.WRONG_SEPARATOR_FOR_NAMED_PARAMETER, seper
ator, []); | 4228 reportError11(ParserErrorCode.WRONG_SEPARATOR_FOR_NAMED_PARAMETER, seper
ator, []); |
4197 } else if (identical(kind, ParameterKind.REQUIRED)) { | 4229 } else if (identical(kind, ParameterKind.REQUIRED)) { |
4198 reportError(ParserErrorCode.POSITIONAL_PARAMETER_OUTSIDE_GROUP, paramete
r, []); | 4230 reportError9(ParserErrorCode.POSITIONAL_PARAMETER_OUTSIDE_GROUP, paramet
er, []); |
4199 } | 4231 } |
4200 return new DefaultFormalParameter.full(parameter, kind, seperator, default
Value); | 4232 return new DefaultFormalParameter.full(parameter, kind, seperator, default
Value); |
4201 } else if (matches5(TokenType.COLON)) { | 4233 } else if (matches5(TokenType.COLON)) { |
4202 Token seperator = andAdvance; | 4234 Token seperator = andAdvance; |
4203 Expression defaultValue = parseExpression2(); | 4235 Expression defaultValue = parseExpression2(); |
4204 if (identical(kind, ParameterKind.POSITIONAL)) { | 4236 if (identical(kind, ParameterKind.POSITIONAL)) { |
4205 reportError10(ParserErrorCode.WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER,
seperator, []); | 4237 reportError11(ParserErrorCode.WRONG_SEPARATOR_FOR_POSITIONAL_PARAMETER,
seperator, []); |
4206 } else if (identical(kind, ParameterKind.REQUIRED)) { | 4238 } else if (identical(kind, ParameterKind.REQUIRED)) { |
4207 reportError(ParserErrorCode.NAMED_PARAMETER_OUTSIDE_GROUP, parameter, []
); | 4239 reportError9(ParserErrorCode.NAMED_PARAMETER_OUTSIDE_GROUP, parameter, [
]); |
4208 } | 4240 } |
4209 return new DefaultFormalParameter.full(parameter, kind, seperator, default
Value); | 4241 return new DefaultFormalParameter.full(parameter, kind, seperator, default
Value); |
4210 } else if (kind != ParameterKind.REQUIRED) { | 4242 } else if (kind != ParameterKind.REQUIRED) { |
4211 return new DefaultFormalParameter.full(parameter, kind, null, null); | 4243 return new DefaultFormalParameter.full(parameter, kind, null, null); |
4212 } | 4244 } |
4213 return parameter; | 4245 return parameter; |
4214 } | 4246 } |
4215 | 4247 |
4216 /** | 4248 /** |
4217 * Parse a for statement. | 4249 * Parse a for statement. |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4249 variableList = new VariableDeclarationList.full(commentAndMetadata.com
ment, commentAndMetadata.metadata, null, null, variables); | 4281 variableList = new VariableDeclarationList.full(commentAndMetadata.com
ment, commentAndMetadata.metadata, null, null, variables); |
4250 } else if (isInitializedVariableDeclaration()) { | 4282 } else if (isInitializedVariableDeclaration()) { |
4251 variableList = parseVariableDeclarationList(commentAndMetadata); | 4283 variableList = parseVariableDeclarationList(commentAndMetadata); |
4252 } else { | 4284 } else { |
4253 initialization = parseExpression2(); | 4285 initialization = parseExpression2(); |
4254 } | 4286 } |
4255 if (matches(Keyword.IN)) { | 4287 if (matches(Keyword.IN)) { |
4256 DeclaredIdentifier loopVariable = null; | 4288 DeclaredIdentifier loopVariable = null; |
4257 SimpleIdentifier identifier = null; | 4289 SimpleIdentifier identifier = null; |
4258 if (variableList == null) { | 4290 if (variableList == null) { |
4259 reportError9(ParserErrorCode.MISSING_VARIABLE_IN_FOR_EACH, []); | 4291 reportError10(ParserErrorCode.MISSING_VARIABLE_IN_FOR_EACH, []); |
4260 } else { | 4292 } else { |
4261 NodeList<VariableDeclaration> variables = variableList.variables; | 4293 NodeList<VariableDeclaration> variables = variableList.variables; |
4262 if (variables.length > 1) { | 4294 if (variables.length > 1) { |
4263 reportError9(ParserErrorCode.MULTIPLE_VARIABLES_IN_FOR_EACH, [vari
ables.length.toString()]); | 4295 reportError10(ParserErrorCode.MULTIPLE_VARIABLES_IN_FOR_EACH, [var
iables.length.toString()]); |
4264 } | 4296 } |
4265 VariableDeclaration variable = variables[0]; | 4297 VariableDeclaration variable = variables[0]; |
4266 if (variable.initializer != null) { | 4298 if (variable.initializer != null) { |
4267 reportError9(ParserErrorCode.INITIALIZED_VARIABLE_IN_FOR_EACH, [])
; | 4299 reportError10(ParserErrorCode.INITIALIZED_VARIABLE_IN_FOR_EACH, []
); |
4268 } | 4300 } |
4269 Token keyword = variableList.keyword; | 4301 Token keyword = variableList.keyword; |
4270 TypeName type = variableList.type; | 4302 TypeName type = variableList.type; |
4271 if (keyword != null || type != null) { | 4303 if (keyword != null || type != null) { |
4272 loopVariable = new DeclaredIdentifier.full(commentAndMetadata.comm
ent, commentAndMetadata.metadata, keyword, type, variable.name); | 4304 loopVariable = new DeclaredIdentifier.full(commentAndMetadata.comm
ent, commentAndMetadata.metadata, keyword, type, variable.name); |
4273 } else { | 4305 } else { |
4274 if (!commentAndMetadata.metadata.isEmpty) { | 4306 if (!commentAndMetadata.metadata.isEmpty) { |
4275 } | 4307 } |
4276 identifier = variable.name; | 4308 identifier = variable.name; |
4277 } | 4309 } |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4311 * functionBody ::= | 4343 * functionBody ::= |
4312 * '=>' expression ';' | 4344 * '=>' expression ';' |
4313 * | block | 4345 * | block |
4314 * | 4346 * |
4315 * functionExpressionBody ::= | 4347 * functionExpressionBody ::= |
4316 * '=>' expression | 4348 * '=>' expression |
4317 * | block | 4349 * | block |
4318 * </pre> | 4350 * </pre> |
4319 * | 4351 * |
4320 * @param mayBeEmpty `true` if the function body is allowed to be empty | 4352 * @param mayBeEmpty `true` if the function body is allowed to be empty |
4321 * @param emptyErrorCode the error code to report if function body expecte, bu
t not found | 4353 * @param emptyErrorCode the error code to report if function body expected, b
ut not found |
4322 * @param inExpression `true` if the function body is being parsed as part of
an expression | 4354 * @param inExpression `true` if the function body is being parsed as part of
an expression |
4323 * and therefore does not have a terminating semicolon | 4355 * and therefore does not have a terminating semicolon |
4324 * @return the function body that was parsed | 4356 * @return the function body that was parsed |
4325 */ | 4357 */ |
4326 FunctionBody parseFunctionBody(bool mayBeEmpty, ParserErrorCode emptyErrorCode
, bool inExpression) { | 4358 FunctionBody parseFunctionBody(bool mayBeEmpty, ParserErrorCode emptyErrorCode
, bool inExpression) { |
4327 bool wasInLoop = _inLoop; | 4359 bool wasInLoop = _inLoop; |
4328 bool wasInSwitch = _inSwitch; | 4360 bool wasInSwitch = _inSwitch; |
4329 _inLoop = false; | 4361 _inLoop = false; |
4330 _inSwitch = false; | 4362 _inSwitch = false; |
4331 try { | 4363 try { |
4332 if (matches5(TokenType.SEMICOLON)) { | 4364 if (matches5(TokenType.SEMICOLON)) { |
4333 if (!mayBeEmpty) { | 4365 if (!mayBeEmpty) { |
4334 reportError9(emptyErrorCode, []); | 4366 reportError10(emptyErrorCode, []); |
4335 } | 4367 } |
4336 return new EmptyFunctionBody.full(andAdvance); | 4368 return new EmptyFunctionBody.full(andAdvance); |
4337 } else if (matches5(TokenType.FUNCTION)) { | 4369 } else if (matches5(TokenType.FUNCTION)) { |
4338 Token functionDefinition = andAdvance; | 4370 Token functionDefinition = andAdvance; |
4339 Expression expression = parseExpression2(); | 4371 Expression expression = parseExpression2(); |
4340 Token semicolon = null; | 4372 Token semicolon = null; |
4341 if (!inExpression) { | 4373 if (!inExpression) { |
4342 semicolon = expect2(TokenType.SEMICOLON); | 4374 semicolon = expect2(TokenType.SEMICOLON); |
4343 } | 4375 } |
| 4376 if (!_parseFunctionBodies) { |
| 4377 return new EmptyFunctionBody.full(createSyntheticToken2(TokenType.SEMI
COLON)); |
| 4378 } |
4344 return new ExpressionFunctionBody.full(functionDefinition, expression, s
emicolon); | 4379 return new ExpressionFunctionBody.full(functionDefinition, expression, s
emicolon); |
4345 } else if (matches5(TokenType.OPEN_CURLY_BRACKET)) { | 4380 } else if (matches5(TokenType.OPEN_CURLY_BRACKET)) { |
| 4381 if (!_parseFunctionBodies) { |
| 4382 skipBlock(); |
| 4383 return new EmptyFunctionBody.full(createSyntheticToken2(TokenType.SEMI
COLON)); |
| 4384 } |
4346 return new BlockFunctionBody.full(parseBlock()); | 4385 return new BlockFunctionBody.full(parseBlock()); |
4347 } else if (matches2(_NATIVE)) { | 4386 } else if (matches2(_NATIVE)) { |
4348 Token nativeToken = andAdvance; | 4387 Token nativeToken = andAdvance; |
4349 StringLiteral stringLiteral = null; | 4388 StringLiteral stringLiteral = null; |
4350 if (matches5(TokenType.STRING)) { | 4389 if (matches5(TokenType.STRING)) { |
4351 stringLiteral = parseStringLiteral(); | 4390 stringLiteral = parseStringLiteral(); |
4352 } | 4391 } |
4353 return new NativeFunctionBody.full(nativeToken, stringLiteral, expect2(T
okenType.SEMICOLON)); | 4392 return new NativeFunctionBody.full(nativeToken, stringLiteral, expect2(T
okenType.SEMICOLON)); |
4354 } else { | 4393 } else { |
4355 reportError9(emptyErrorCode, []); | 4394 reportError10(emptyErrorCode, []); |
4356 return new EmptyFunctionBody.full(createSyntheticToken2(TokenType.SEMICO
LON)); | 4395 return new EmptyFunctionBody.full(createSyntheticToken2(TokenType.SEMICO
LON)); |
4357 } | 4396 } |
4358 } finally { | 4397 } finally { |
4359 _inLoop = wasInLoop; | 4398 _inLoop = wasInLoop; |
4360 _inSwitch = wasInSwitch; | 4399 _inSwitch = wasInSwitch; |
4361 } | 4400 } |
4362 } | 4401 } |
4363 | 4402 |
4364 /** | 4403 /** |
4365 * Parse a function declaration. | 4404 * Parse a function declaration. |
(...skipping 20 matching lines...) Expand all Loading... |
4386 } else if (matches(Keyword.SET) && !matches4(peek(), TokenType.OPEN_PAREN))
{ | 4425 } else if (matches(Keyword.SET) && !matches4(peek(), TokenType.OPEN_PAREN))
{ |
4387 keyword = andAdvance; | 4426 keyword = andAdvance; |
4388 } | 4427 } |
4389 SimpleIdentifier name = parseSimpleIdentifier(); | 4428 SimpleIdentifier name = parseSimpleIdentifier(); |
4390 FormalParameterList parameters = null; | 4429 FormalParameterList parameters = null; |
4391 if (!isGetter) { | 4430 if (!isGetter) { |
4392 if (matches5(TokenType.OPEN_PAREN)) { | 4431 if (matches5(TokenType.OPEN_PAREN)) { |
4393 parameters = parseFormalParameterList(); | 4432 parameters = parseFormalParameterList(); |
4394 validateFormalParameterList(parameters); | 4433 validateFormalParameterList(parameters); |
4395 } else { | 4434 } else { |
4396 reportError9(ParserErrorCode.MISSING_FUNCTION_PARAMETERS, []); | 4435 reportError10(ParserErrorCode.MISSING_FUNCTION_PARAMETERS, []); |
4397 } | 4436 } |
4398 } else if (matches5(TokenType.OPEN_PAREN)) { | 4437 } else if (matches5(TokenType.OPEN_PAREN)) { |
4399 reportError9(ParserErrorCode.GETTER_WITH_PARAMETERS, []); | 4438 reportError10(ParserErrorCode.GETTER_WITH_PARAMETERS, []); |
4400 parseFormalParameterList(); | 4439 parseFormalParameterList(); |
4401 } | 4440 } |
4402 FunctionBody body; | 4441 FunctionBody body; |
4403 if (externalKeyword == null) { | 4442 if (externalKeyword == null) { |
4404 body = parseFunctionBody(false, ParserErrorCode.MISSING_FUNCTION_BODY, fal
se); | 4443 body = parseFunctionBody(false, ParserErrorCode.MISSING_FUNCTION_BODY, fal
se); |
4405 } else { | 4444 } else { |
4406 body = new EmptyFunctionBody.full(expect2(TokenType.SEMICOLON)); | 4445 body = new EmptyFunctionBody.full(expect2(TokenType.SEMICOLON)); |
4407 } | 4446 } |
4408 return new FunctionDeclaration.full(commentAndMetadata.comment, commentAndMe
tadata.metadata, externalKeyword, returnType, keyword, name, new FunctionExpress
ion.full(parameters, body)); | 4447 return new FunctionDeclaration.full(commentAndMetadata.comment, commentAndMe
tadata.metadata, externalKeyword, returnType, keyword, name, new FunctionExpress
ion.full(parameters, body)); |
4409 } | 4448 } |
(...skipping 25 matching lines...) Expand all Loading... |
4435 * @param commentAndMetadata the documentation comment and metadata to be asso
ciated with the | 4474 * @param commentAndMetadata the documentation comment and metadata to be asso
ciated with the |
4436 * declaration | 4475 * declaration |
4437 * @param returnType the return type, or `null` if there is no return type | 4476 * @param returnType the return type, or `null` if there is no return type |
4438 * @return the function declaration statement that was parsed | 4477 * @return the function declaration statement that was parsed |
4439 */ | 4478 */ |
4440 Statement parseFunctionDeclarationStatement2(CommentAndMetadata commentAndMeta
data, TypeName returnType) { | 4479 Statement parseFunctionDeclarationStatement2(CommentAndMetadata commentAndMeta
data, TypeName returnType) { |
4441 FunctionDeclaration declaration = parseFunctionDeclaration(commentAndMetadat
a, null, returnType); | 4480 FunctionDeclaration declaration = parseFunctionDeclaration(commentAndMetadat
a, null, returnType); |
4442 Token propertyKeyword = declaration.propertyKeyword; | 4481 Token propertyKeyword = declaration.propertyKeyword; |
4443 if (propertyKeyword != null) { | 4482 if (propertyKeyword != null) { |
4444 if (identical((propertyKeyword as KeywordToken).keyword, Keyword.GET)) { | 4483 if (identical((propertyKeyword as KeywordToken).keyword, Keyword.GET)) { |
4445 reportError10(ParserErrorCode.GETTER_IN_FUNCTION, propertyKeyword, []); | 4484 reportError11(ParserErrorCode.GETTER_IN_FUNCTION, propertyKeyword, []); |
4446 } else { | 4485 } else { |
4447 reportError10(ParserErrorCode.SETTER_IN_FUNCTION, propertyKeyword, []); | 4486 reportError11(ParserErrorCode.SETTER_IN_FUNCTION, propertyKeyword, []); |
4448 } | 4487 } |
4449 } | 4488 } |
4450 return new FunctionDeclarationStatement.full(declaration); | 4489 return new FunctionDeclarationStatement.full(declaration); |
4451 } | 4490 } |
4452 | 4491 |
4453 /** | 4492 /** |
4454 * Parse a function type alias. | 4493 * Parse a function type alias. |
4455 * | 4494 * |
4456 * <pre> | 4495 * <pre> |
4457 * functionTypeAlias ::= | 4496 * functionTypeAlias ::= |
(...skipping 11 matching lines...) Expand all Loading... |
4469 TypeName returnType = null; | 4508 TypeName returnType = null; |
4470 if (hasReturnTypeInTypeAlias()) { | 4509 if (hasReturnTypeInTypeAlias()) { |
4471 returnType = parseReturnType(); | 4510 returnType = parseReturnType(); |
4472 } | 4511 } |
4473 SimpleIdentifier name = parseSimpleIdentifier(); | 4512 SimpleIdentifier name = parseSimpleIdentifier(); |
4474 TypeParameterList typeParameters = null; | 4513 TypeParameterList typeParameters = null; |
4475 if (matches5(TokenType.LT)) { | 4514 if (matches5(TokenType.LT)) { |
4476 typeParameters = parseTypeParameterList(); | 4515 typeParameters = parseTypeParameterList(); |
4477 } | 4516 } |
4478 if (matches5(TokenType.SEMICOLON) || matches5(TokenType.EOF)) { | 4517 if (matches5(TokenType.SEMICOLON) || matches5(TokenType.EOF)) { |
4479 reportError9(ParserErrorCode.MISSING_TYPEDEF_PARAMETERS, []); | 4518 reportError10(ParserErrorCode.MISSING_TYPEDEF_PARAMETERS, []); |
4480 FormalParameterList parameters = new FormalParameterList.full(createSynthe
ticToken2(TokenType.OPEN_PAREN), null, null, null, createSyntheticToken2(TokenTy
pe.CLOSE_PAREN)); | 4519 FormalParameterList parameters = new FormalParameterList.full(createSynthe
ticToken2(TokenType.OPEN_PAREN), null, null, null, createSyntheticToken2(TokenTy
pe.CLOSE_PAREN)); |
4481 Token semicolon = expect2(TokenType.SEMICOLON); | 4520 Token semicolon = expect2(TokenType.SEMICOLON); |
4482 return new FunctionTypeAlias.full(commentAndMetadata.comment, commentAndMe
tadata.metadata, keyword, returnType, name, typeParameters, parameters, semicolo
n); | 4521 return new FunctionTypeAlias.full(commentAndMetadata.comment, commentAndMe
tadata.metadata, keyword, returnType, name, typeParameters, parameters, semicolo
n); |
4483 } else if (!matches5(TokenType.OPEN_PAREN)) { | 4522 } else if (!matches5(TokenType.OPEN_PAREN)) { |
4484 reportError9(ParserErrorCode.MISSING_TYPEDEF_PARAMETERS, []); | 4523 reportError10(ParserErrorCode.MISSING_TYPEDEF_PARAMETERS, []); |
4485 return new FunctionTypeAlias.full(commentAndMetadata.comment, commentAndMe
tadata.metadata, keyword, returnType, name, typeParameters, new FormalParameterL
ist.full(createSyntheticToken2(TokenType.OPEN_PAREN), null, null, null, createSy
ntheticToken2(TokenType.CLOSE_PAREN)), createSyntheticToken2(TokenType.SEMICOLON
)); | 4524 return new FunctionTypeAlias.full(commentAndMetadata.comment, commentAndMe
tadata.metadata, keyword, returnType, name, typeParameters, new FormalParameterL
ist.full(createSyntheticToken2(TokenType.OPEN_PAREN), null, null, null, createSy
ntheticToken2(TokenType.CLOSE_PAREN)), createSyntheticToken2(TokenType.SEMICOLON
)); |
4486 } | 4525 } |
4487 FormalParameterList parameters = parseFormalParameterList(); | 4526 FormalParameterList parameters = parseFormalParameterList(); |
4488 validateFormalParameterList(parameters); | 4527 validateFormalParameterList(parameters); |
4489 Token semicolon = expect2(TokenType.SEMICOLON); | 4528 Token semicolon = expect2(TokenType.SEMICOLON); |
4490 return new FunctionTypeAlias.full(commentAndMetadata.comment, commentAndMeta
data.metadata, keyword, returnType, name, typeParameters, parameters, semicolon)
; | 4529 return new FunctionTypeAlias.full(commentAndMetadata.comment, commentAndMeta
data.metadata, keyword, returnType, name, typeParameters, parameters, semicolon)
; |
4491 } | 4530 } |
4492 | 4531 |
4493 /** | 4532 /** |
4494 * Parse a getter. | 4533 * Parse a getter. |
(...skipping 11 matching lines...) Expand all Loading... |
4506 * @param externalKeyword the 'external' token | 4545 * @param externalKeyword the 'external' token |
4507 * @param staticKeyword the static keyword, or `null` if the getter is not sta
tic | 4546 * @param staticKeyword the static keyword, or `null` if the getter is not sta
tic |
4508 * @param the return type that has already been parsed, or `null` if there was
no return | 4547 * @param the return type that has already been parsed, or `null` if there was
no return |
4509 * type | 4548 * type |
4510 * @return the getter that was parsed | 4549 * @return the getter that was parsed |
4511 */ | 4550 */ |
4512 MethodDeclaration parseGetter(CommentAndMetadata commentAndMetadata, Token ext
ernalKeyword, Token staticKeyword, TypeName returnType) { | 4551 MethodDeclaration parseGetter(CommentAndMetadata commentAndMetadata, Token ext
ernalKeyword, Token staticKeyword, TypeName returnType) { |
4513 Token propertyKeyword = expect(Keyword.GET); | 4552 Token propertyKeyword = expect(Keyword.GET); |
4514 SimpleIdentifier name = parseSimpleIdentifier(); | 4553 SimpleIdentifier name = parseSimpleIdentifier(); |
4515 if (matches5(TokenType.OPEN_PAREN) && matches4(peek(), TokenType.CLOSE_PAREN
)) { | 4554 if (matches5(TokenType.OPEN_PAREN) && matches4(peek(), TokenType.CLOSE_PAREN
)) { |
4516 reportError9(ParserErrorCode.GETTER_WITH_PARAMETERS, []); | 4555 reportError10(ParserErrorCode.GETTER_WITH_PARAMETERS, []); |
4517 advance(); | 4556 advance(); |
4518 advance(); | 4557 advance(); |
4519 } | 4558 } |
4520 FunctionBody body = parseFunctionBody(externalKeyword != null || staticKeywo
rd == null, ParserErrorCode.STATIC_GETTER_WITHOUT_BODY, false); | 4559 FunctionBody body = parseFunctionBody(externalKeyword != null || staticKeywo
rd == null, ParserErrorCode.STATIC_GETTER_WITHOUT_BODY, false); |
4521 if (externalKeyword != null && body is! EmptyFunctionBody) { | 4560 if (externalKeyword != null && body is! EmptyFunctionBody) { |
4522 reportError9(ParserErrorCode.EXTERNAL_GETTER_WITH_BODY, []); | 4561 reportError10(ParserErrorCode.EXTERNAL_GETTER_WITH_BODY, []); |
4523 } | 4562 } |
4524 return new MethodDeclaration.full(commentAndMetadata.comment, commentAndMeta
data.metadata, externalKeyword, staticKeyword, returnType, propertyKeyword, null
, name, null, body); | 4563 return new MethodDeclaration.full(commentAndMetadata.comment, commentAndMeta
data.metadata, externalKeyword, staticKeyword, returnType, propertyKeyword, null
, name, null, body); |
4525 } | 4564 } |
4526 | 4565 |
4527 /** | 4566 /** |
4528 * Parse a list of identifiers. | 4567 * Parse a list of identifiers. |
4529 * | 4568 * |
4530 * <pre> | 4569 * <pre> |
4531 * identifierList ::= | 4570 * identifierList ::= |
4532 * identifier (',' identifier)* | 4571 * identifier (',' identifier)* |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4668 * @param missingNameError the error code to be used if the library name is mi
ssing | 4707 * @param missingNameError the error code to be used if the library name is mi
ssing |
4669 * @param missingNameToken the token associated with the error produced if the
library name is | 4708 * @param missingNameToken the token associated with the error produced if the
library name is |
4670 * missing | 4709 * missing |
4671 * @return the library name that was parsed | 4710 * @return the library name that was parsed |
4672 */ | 4711 */ |
4673 LibraryIdentifier parseLibraryName(ParserErrorCode missingNameError, Token mis
singNameToken) { | 4712 LibraryIdentifier parseLibraryName(ParserErrorCode missingNameError, Token mis
singNameToken) { |
4674 if (matchesIdentifier()) { | 4713 if (matchesIdentifier()) { |
4675 return parseLibraryIdentifier(); | 4714 return parseLibraryIdentifier(); |
4676 } else if (matches5(TokenType.STRING)) { | 4715 } else if (matches5(TokenType.STRING)) { |
4677 StringLiteral string = parseStringLiteral(); | 4716 StringLiteral string = parseStringLiteral(); |
4678 reportError(ParserErrorCode.NON_IDENTIFIER_LIBRARY_NAME, string, []); | 4717 reportError9(ParserErrorCode.NON_IDENTIFIER_LIBRARY_NAME, string, []); |
4679 } else { | 4718 } else { |
4680 reportError10(missingNameError, missingNameToken, []); | 4719 reportError11(missingNameError, missingNameToken, []); |
4681 } | 4720 } |
4682 List<SimpleIdentifier> components = new List<SimpleIdentifier>(); | 4721 List<SimpleIdentifier> components = new List<SimpleIdentifier>(); |
4683 components.add(createSyntheticIdentifier()); | 4722 components.add(createSyntheticIdentifier()); |
4684 return new LibraryIdentifier.full(components); | 4723 return new LibraryIdentifier.full(components); |
4685 } | 4724 } |
4686 | 4725 |
4687 /** | 4726 /** |
4688 * Parse a list literal. | 4727 * Parse a list literal. |
4689 * | 4728 * |
4690 * <pre> | 4729 * <pre> |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4741 TypedLiteral parseListOrMapLiteral(Token modifier) { | 4780 TypedLiteral parseListOrMapLiteral(Token modifier) { |
4742 TypeArgumentList typeArguments = null; | 4781 TypeArgumentList typeArguments = null; |
4743 if (matches5(TokenType.LT)) { | 4782 if (matches5(TokenType.LT)) { |
4744 typeArguments = parseTypeArgumentList(); | 4783 typeArguments = parseTypeArgumentList(); |
4745 } | 4784 } |
4746 if (matches5(TokenType.OPEN_CURLY_BRACKET)) { | 4785 if (matches5(TokenType.OPEN_CURLY_BRACKET)) { |
4747 return parseMapLiteral(modifier, typeArguments); | 4786 return parseMapLiteral(modifier, typeArguments); |
4748 } else if (matches5(TokenType.OPEN_SQUARE_BRACKET) || matches5(TokenType.IND
EX)) { | 4787 } else if (matches5(TokenType.OPEN_SQUARE_BRACKET) || matches5(TokenType.IND
EX)) { |
4749 return parseListLiteral(modifier, typeArguments); | 4788 return parseListLiteral(modifier, typeArguments); |
4750 } | 4789 } |
4751 reportError9(ParserErrorCode.EXPECTED_LIST_OR_MAP_LITERAL, []); | 4790 reportError10(ParserErrorCode.EXPECTED_LIST_OR_MAP_LITERAL, []); |
4752 return new ListLiteral.full(modifier, typeArguments, createSyntheticToken2(T
okenType.OPEN_SQUARE_BRACKET), null, createSyntheticToken2(TokenType.CLOSE_SQUAR
E_BRACKET)); | 4791 return new ListLiteral.full(modifier, typeArguments, createSyntheticToken2(T
okenType.OPEN_SQUARE_BRACKET), null, createSyntheticToken2(TokenType.CLOSE_SQUAR
E_BRACKET)); |
4753 } | 4792 } |
4754 | 4793 |
4755 /** | 4794 /** |
4756 * Parse a logical and expression. | 4795 * Parse a logical and expression. |
4757 * | 4796 * |
4758 * <pre> | 4797 * <pre> |
4759 * logicalAndExpression ::= | 4798 * logicalAndExpression ::= |
4760 * equalityExpression ('&&' equalityExpression)* | 4799 * equalityExpression ('&&' equalityExpression)* |
4761 * </pre> | 4800 * </pre> |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4840 * @param staticKeyword the static keyword, or `null` if the getter is not sta
tic | 4879 * @param staticKeyword the static keyword, or `null` if the getter is not sta
tic |
4841 * @param returnType the return type of the method | 4880 * @param returnType the return type of the method |
4842 * @param name the name of the method | 4881 * @param name the name of the method |
4843 * @param parameters the parameters to the method | 4882 * @param parameters the parameters to the method |
4844 * @return the method declaration that was parsed | 4883 * @return the method declaration that was parsed |
4845 */ | 4884 */ |
4846 MethodDeclaration parseMethodDeclaration2(CommentAndMetadata commentAndMetadat
a, Token externalKeyword, Token staticKeyword, TypeName returnType, SimpleIdenti
fier name, FormalParameterList parameters) { | 4885 MethodDeclaration parseMethodDeclaration2(CommentAndMetadata commentAndMetadat
a, Token externalKeyword, Token staticKeyword, TypeName returnType, SimpleIdenti
fier name, FormalParameterList parameters) { |
4847 FunctionBody body = parseFunctionBody(externalKeyword != null || staticKeywo
rd == null, ParserErrorCode.MISSING_FUNCTION_BODY, false); | 4886 FunctionBody body = parseFunctionBody(externalKeyword != null || staticKeywo
rd == null, ParserErrorCode.MISSING_FUNCTION_BODY, false); |
4848 if (externalKeyword != null) { | 4887 if (externalKeyword != null) { |
4849 if (body is! EmptyFunctionBody) { | 4888 if (body is! EmptyFunctionBody) { |
4850 reportError(ParserErrorCode.EXTERNAL_METHOD_WITH_BODY, body, []); | 4889 reportError9(ParserErrorCode.EXTERNAL_METHOD_WITH_BODY, body, []); |
4851 } | 4890 } |
4852 } else if (staticKeyword != null) { | 4891 } else if (staticKeyword != null) { |
4853 if (body is EmptyFunctionBody) { | 4892 if (body is EmptyFunctionBody) { |
4854 reportError(ParserErrorCode.ABSTRACT_STATIC_METHOD, body, []); | 4893 reportError9(ParserErrorCode.ABSTRACT_STATIC_METHOD, body, []); |
4855 } | 4894 } |
4856 } | 4895 } |
4857 return new MethodDeclaration.full(commentAndMetadata.comment, commentAndMeta
data.metadata, externalKeyword, staticKeyword, returnType, null, null, name, par
ameters, body); | 4896 return new MethodDeclaration.full(commentAndMetadata.comment, commentAndMeta
data.metadata, externalKeyword, staticKeyword, returnType, null, null, name, par
ameters, body); |
4858 } | 4897 } |
4859 | 4898 |
4860 /** | 4899 /** |
4861 * Parse the modifiers preceding a declaration. This method allows the modifie
rs to appear in any | 4900 * Parse the modifiers preceding a declaration. This method allows the modifie
rs to appear in any |
4862 * order but does generate errors for duplicated modifiers. Checks for other p
roblems, such as | 4901 * order but does generate errors for duplicated modifiers. Checks for other p
roblems, such as |
4863 * having the modifiers appear in the wrong order or specifying both 'const' a
nd 'final', are | 4902 * having the modifiers appear in the wrong order or specifying both 'const' a
nd 'final', are |
4864 * reported in one of the methods whose name is prefixed with `validateModifie
rsFor`. | 4903 * reported in one of the methods whose name is prefixed with `validateModifie
rsFor`. |
4865 * | 4904 * |
4866 * <pre> | 4905 * <pre> |
4867 * modifiers ::= | 4906 * modifiers ::= |
4868 * ('abstract' | 'const' | 'external' | 'factory' | 'final' | 'static' | '
var')* | 4907 * ('abstract' | 'const' | 'external' | 'factory' | 'final' | 'static' | '
var')* |
4869 * </pre> | 4908 * </pre> |
4870 * | 4909 * |
4871 * @return the modifiers that were parsed | 4910 * @return the modifiers that were parsed |
4872 */ | 4911 */ |
4873 Modifiers parseModifiers() { | 4912 Modifiers parseModifiers() { |
4874 Modifiers modifiers = new Modifiers(); | 4913 Modifiers modifiers = new Modifiers(); |
4875 bool progress = true; | 4914 bool progress = true; |
4876 while (progress) { | 4915 while (progress) { |
4877 if (matches4(peek(), TokenType.PERIOD) || matches4(peek(), TokenType.LT) |
| matches4(peek(), TokenType.OPEN_PAREN)) { | 4916 if (matches4(peek(), TokenType.PERIOD) || matches4(peek(), TokenType.LT) |
| matches4(peek(), TokenType.OPEN_PAREN)) { |
4878 return modifiers; | 4917 return modifiers; |
4879 } | 4918 } |
4880 if (matches(Keyword.ABSTRACT)) { | 4919 if (matches(Keyword.ABSTRACT)) { |
4881 if (modifiers.abstractKeyword != null) { | 4920 if (modifiers.abstractKeyword != null) { |
4882 reportError9(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexem
e]); | 4921 reportError10(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexe
me]); |
4883 advance(); | 4922 advance(); |
4884 } else { | 4923 } else { |
4885 modifiers.abstractKeyword = andAdvance; | 4924 modifiers.abstractKeyword = andAdvance; |
4886 } | 4925 } |
4887 } else if (matches(Keyword.CONST)) { | 4926 } else if (matches(Keyword.CONST)) { |
4888 if (modifiers.constKeyword != null) { | 4927 if (modifiers.constKeyword != null) { |
4889 reportError9(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexem
e]); | 4928 reportError10(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexe
me]); |
4890 advance(); | 4929 advance(); |
4891 } else { | 4930 } else { |
4892 modifiers.constKeyword = andAdvance; | 4931 modifiers.constKeyword = andAdvance; |
4893 } | 4932 } |
4894 } else if (matches(Keyword.EXTERNAL) && !matches4(peek(), TokenType.PERIOD
) && !matches4(peek(), TokenType.LT)) { | 4933 } else if (matches(Keyword.EXTERNAL) && !matches4(peek(), TokenType.PERIOD
) && !matches4(peek(), TokenType.LT)) { |
4895 if (modifiers.externalKeyword != null) { | 4934 if (modifiers.externalKeyword != null) { |
4896 reportError9(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexem
e]); | 4935 reportError10(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexe
me]); |
4897 advance(); | 4936 advance(); |
4898 } else { | 4937 } else { |
4899 modifiers.externalKeyword = andAdvance; | 4938 modifiers.externalKeyword = andAdvance; |
4900 } | 4939 } |
4901 } else if (matches(Keyword.FACTORY) && !matches4(peek(), TokenType.PERIOD)
&& !matches4(peek(), TokenType.LT)) { | 4940 } else if (matches(Keyword.FACTORY) && !matches4(peek(), TokenType.PERIOD)
&& !matches4(peek(), TokenType.LT)) { |
4902 if (modifiers.factoryKeyword != null) { | 4941 if (modifiers.factoryKeyword != null) { |
4903 reportError9(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexem
e]); | 4942 reportError10(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexe
me]); |
4904 advance(); | 4943 advance(); |
4905 } else { | 4944 } else { |
4906 modifiers.factoryKeyword = andAdvance; | 4945 modifiers.factoryKeyword = andAdvance; |
4907 } | 4946 } |
4908 } else if (matches(Keyword.FINAL)) { | 4947 } else if (matches(Keyword.FINAL)) { |
4909 if (modifiers.finalKeyword != null) { | 4948 if (modifiers.finalKeyword != null) { |
4910 reportError9(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexem
e]); | 4949 reportError10(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexe
me]); |
4911 advance(); | 4950 advance(); |
4912 } else { | 4951 } else { |
4913 modifiers.finalKeyword = andAdvance; | 4952 modifiers.finalKeyword = andAdvance; |
4914 } | 4953 } |
4915 } else if (matches(Keyword.STATIC) && !matches4(peek(), TokenType.PERIOD)
&& !matches4(peek(), TokenType.LT)) { | 4954 } else if (matches(Keyword.STATIC) && !matches4(peek(), TokenType.PERIOD)
&& !matches4(peek(), TokenType.LT)) { |
4916 if (modifiers.staticKeyword != null) { | 4955 if (modifiers.staticKeyword != null) { |
4917 reportError9(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexem
e]); | 4956 reportError10(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexe
me]); |
4918 advance(); | 4957 advance(); |
4919 } else { | 4958 } else { |
4920 modifiers.staticKeyword = andAdvance; | 4959 modifiers.staticKeyword = andAdvance; |
4921 } | 4960 } |
4922 } else if (matches(Keyword.VAR)) { | 4961 } else if (matches(Keyword.VAR)) { |
4923 if (modifiers.varKeyword != null) { | 4962 if (modifiers.varKeyword != null) { |
4924 reportError9(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexem
e]); | 4963 reportError10(ParserErrorCode.DUPLICATED_MODIFIER, [_currentToken.lexe
me]); |
4925 advance(); | 4964 advance(); |
4926 } else { | 4965 } else { |
4927 modifiers.varKeyword = andAdvance; | 4966 modifiers.varKeyword = andAdvance; |
4928 } | 4967 } |
4929 } else { | 4968 } else { |
4930 progress = false; | 4969 progress = false; |
4931 } | 4970 } |
4932 } | 4971 } |
4933 return modifiers; | 4972 return modifiers; |
4934 } | 4973 } |
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5050 } else if (identical(keyword, Keyword.VOID)) { | 5089 } else if (identical(keyword, Keyword.VOID)) { |
5051 TypeName returnType = parseReturnType(); | 5090 TypeName returnType = parseReturnType(); |
5052 if (matchesIdentifier() && matchesAny(peek(), [ | 5091 if (matchesIdentifier() && matchesAny(peek(), [ |
5053 TokenType.OPEN_PAREN, | 5092 TokenType.OPEN_PAREN, |
5054 TokenType.OPEN_CURLY_BRACKET, | 5093 TokenType.OPEN_CURLY_BRACKET, |
5055 TokenType.FUNCTION])) { | 5094 TokenType.FUNCTION])) { |
5056 return parseFunctionDeclarationStatement2(commentAndMetadata, returnTy
pe); | 5095 return parseFunctionDeclarationStatement2(commentAndMetadata, returnTy
pe); |
5057 } else { | 5096 } else { |
5058 if (matchesIdentifier()) { | 5097 if (matchesIdentifier()) { |
5059 if (matchesAny(peek(), [TokenType.EQ, TokenType.COMMA, TokenType.SEM
ICOLON])) { | 5098 if (matchesAny(peek(), [TokenType.EQ, TokenType.COMMA, TokenType.SEM
ICOLON])) { |
5060 reportError(ParserErrorCode.VOID_VARIABLE, returnType, []); | 5099 reportError9(ParserErrorCode.VOID_VARIABLE, returnType, []); |
5061 return parseVariableDeclarationStatement(commentAndMetadata); | 5100 return parseVariableDeclarationStatement(commentAndMetadata); |
5062 } | 5101 } |
5063 } else if (matches5(TokenType.CLOSE_CURLY_BRACKET)) { | 5102 } else if (matches5(TokenType.CLOSE_CURLY_BRACKET)) { |
5064 return parseVariableDeclarationStatement2(commentAndMetadata, null,
returnType); | 5103 return parseVariableDeclarationStatement2(commentAndMetadata, null,
returnType); |
5065 } | 5104 } |
5066 reportError9(ParserErrorCode.MISSING_STATEMENT, []); | 5105 reportError10(ParserErrorCode.MISSING_STATEMENT, []); |
5067 return new EmptyStatement.full(createSyntheticToken2(TokenType.SEMICOL
ON)); | 5106 return new EmptyStatement.full(createSyntheticToken2(TokenType.SEMICOL
ON)); |
5068 } | 5107 } |
5069 } else if (identical(keyword, Keyword.CONST)) { | 5108 } else if (identical(keyword, Keyword.CONST)) { |
5070 if (matchesAny(peek(), [ | 5109 if (matchesAny(peek(), [ |
5071 TokenType.LT, | 5110 TokenType.LT, |
5072 TokenType.OPEN_CURLY_BRACKET, | 5111 TokenType.OPEN_CURLY_BRACKET, |
5073 TokenType.OPEN_SQUARE_BRACKET, | 5112 TokenType.OPEN_SQUARE_BRACKET, |
5074 TokenType.INDEX])) { | 5113 TokenType.INDEX])) { |
5075 return new ExpressionStatement.full(parseExpression2(), expect2(TokenT
ype.SEMICOLON)); | 5114 return new ExpressionStatement.full(parseExpression2(), expect2(TokenT
ype.SEMICOLON)); |
5076 } else if (matches4(peek(), TokenType.IDENTIFIER)) { | 5115 } else if (matches4(peek(), TokenType.IDENTIFIER)) { |
5077 Token afterType = skipTypeName(peek()); | 5116 Token afterType = skipTypeName(peek()); |
5078 if (afterType != null) { | 5117 if (afterType != null) { |
5079 if (matches4(afterType, TokenType.OPEN_PAREN) || (matches4(afterType
, TokenType.PERIOD) && matches4(afterType.next, TokenType.IDENTIFIER) && matches
4(afterType.next.next, TokenType.OPEN_PAREN))) { | 5118 if (matches4(afterType, TokenType.OPEN_PAREN) || (matches4(afterType
, TokenType.PERIOD) && matches4(afterType.next, TokenType.IDENTIFIER) && matches
4(afterType.next.next, TokenType.OPEN_PAREN))) { |
5080 return new ExpressionStatement.full(parseExpression2(), expect2(To
kenType.SEMICOLON)); | 5119 return new ExpressionStatement.full(parseExpression2(), expect2(To
kenType.SEMICOLON)); |
5081 } | 5120 } |
5082 } | 5121 } |
5083 } | 5122 } |
5084 return parseVariableDeclarationStatement(commentAndMetadata); | 5123 return parseVariableDeclarationStatement(commentAndMetadata); |
5085 } else if (identical(keyword, Keyword.NEW) || identical(keyword, Keyword.T
RUE) || identical(keyword, Keyword.FALSE) || identical(keyword, Keyword.NULL) ||
identical(keyword, Keyword.SUPER) || identical(keyword, Keyword.THIS)) { | 5124 } else if (identical(keyword, Keyword.NEW) || identical(keyword, Keyword.T
RUE) || identical(keyword, Keyword.FALSE) || identical(keyword, Keyword.NULL) ||
identical(keyword, Keyword.SUPER) || identical(keyword, Keyword.THIS)) { |
5086 return new ExpressionStatement.full(parseExpression2(), expect2(TokenTyp
e.SEMICOLON)); | 5125 return new ExpressionStatement.full(parseExpression2(), expect2(TokenTyp
e.SEMICOLON)); |
5087 } else { | 5126 } else { |
5088 reportError9(ParserErrorCode.MISSING_STATEMENT, []); | 5127 reportError10(ParserErrorCode.MISSING_STATEMENT, []); |
5089 return new EmptyStatement.full(createSyntheticToken2(TokenType.SEMICOLON
)); | 5128 return new EmptyStatement.full(createSyntheticToken2(TokenType.SEMICOLON
)); |
5090 } | 5129 } |
5091 } else if (matches5(TokenType.SEMICOLON)) { | 5130 } else if (matches5(TokenType.SEMICOLON)) { |
5092 return parseEmptyStatement(); | 5131 return parseEmptyStatement(); |
5093 } else if (isInitializedVariableDeclaration()) { | 5132 } else if (isInitializedVariableDeclaration()) { |
5094 return parseVariableDeclarationStatement(commentAndMetadata); | 5133 return parseVariableDeclarationStatement(commentAndMetadata); |
5095 } else if (isFunctionDeclaration()) { | 5134 } else if (isFunctionDeclaration()) { |
5096 return parseFunctionDeclarationStatement(); | 5135 return parseFunctionDeclarationStatement(); |
5097 } else if (matches5(TokenType.CLOSE_CURLY_BRACKET)) { | 5136 } else if (matches5(TokenType.CLOSE_CURLY_BRACKET)) { |
5098 reportError9(ParserErrorCode.MISSING_STATEMENT, []); | 5137 reportError10(ParserErrorCode.MISSING_STATEMENT, []); |
5099 return new EmptyStatement.full(createSyntheticToken2(TokenType.SEMICOLON))
; | 5138 return new EmptyStatement.full(createSyntheticToken2(TokenType.SEMICOLON))
; |
5100 } else { | 5139 } else { |
5101 return new ExpressionStatement.full(parseExpression2(), expect2(TokenType.
SEMICOLON)); | 5140 return new ExpressionStatement.full(parseExpression2(), expect2(TokenType.
SEMICOLON)); |
5102 } | 5141 } |
5103 } | 5142 } |
5104 | 5143 |
5105 /** | 5144 /** |
5106 * Parse an operator declaration. | 5145 * Parse an operator declaration. |
5107 * | 5146 * |
5108 * <pre> | 5147 * <pre> |
5109 * operatorDeclaration ::= | 5148 * operatorDeclaration ::= |
5110 * operatorSignature (';' | functionBody) | 5149 * operatorSignature (';' | functionBody) |
5111 * | 5150 * |
5112 * operatorSignature ::= | 5151 * operatorSignature ::= |
5113 * 'external'? returnType? 'operator' operator formalParameterList | 5152 * 'external'? returnType? 'operator' operator formalParameterList |
5114 * </pre> | 5153 * </pre> |
5115 * | 5154 * |
5116 * @param commentAndMetadata the documentation comment and metadata to be asso
ciated with the | 5155 * @param commentAndMetadata the documentation comment and metadata to be asso
ciated with the |
5117 * declaration | 5156 * declaration |
5118 * @param externalKeyword the 'external' token | 5157 * @param externalKeyword the 'external' token |
5119 * @param the return type that has already been parsed, or `null` if there was
no return | 5158 * @param the return type that has already been parsed, or `null` if there was
no return |
5120 * type | 5159 * type |
5121 * @return the operator declaration that was parsed | 5160 * @return the operator declaration that was parsed |
5122 */ | 5161 */ |
5123 MethodDeclaration parseOperator(CommentAndMetadata commentAndMetadata, Token e
xternalKeyword, TypeName returnType) { | 5162 MethodDeclaration parseOperator(CommentAndMetadata commentAndMetadata, Token e
xternalKeyword, TypeName returnType) { |
5124 Token operatorKeyword; | 5163 Token operatorKeyword; |
5125 if (matches(Keyword.OPERATOR)) { | 5164 if (matches(Keyword.OPERATOR)) { |
5126 operatorKeyword = andAdvance; | 5165 operatorKeyword = andAdvance; |
5127 } else { | 5166 } else { |
5128 reportError10(ParserErrorCode.MISSING_KEYWORD_OPERATOR, _currentToken, [])
; | 5167 reportError11(ParserErrorCode.MISSING_KEYWORD_OPERATOR, _currentToken, [])
; |
5129 operatorKeyword = createSyntheticToken(Keyword.OPERATOR); | 5168 operatorKeyword = createSyntheticToken(Keyword.OPERATOR); |
5130 } | 5169 } |
5131 if (!_currentToken.isUserDefinableOperator) { | 5170 if (!_currentToken.isUserDefinableOperator) { |
5132 reportError9(ParserErrorCode.NON_USER_DEFINABLE_OPERATOR, [_currentToken.l
exeme]); | 5171 reportError10(ParserErrorCode.NON_USER_DEFINABLE_OPERATOR, [_currentToken.
lexeme]); |
5133 } | 5172 } |
5134 SimpleIdentifier name = new SimpleIdentifier.full(andAdvance); | 5173 SimpleIdentifier name = new SimpleIdentifier.full(andAdvance); |
5135 if (matches5(TokenType.EQ)) { | 5174 if (matches5(TokenType.EQ)) { |
5136 Token previous = _currentToken.previous; | 5175 Token previous = _currentToken.previous; |
5137 if ((matches4(previous, TokenType.EQ_EQ) || matches4(previous, TokenType.B
ANG_EQ)) && _currentToken.offset == previous.offset + 2) { | 5176 if ((matches4(previous, TokenType.EQ_EQ) || matches4(previous, TokenType.B
ANG_EQ)) && _currentToken.offset == previous.offset + 2) { |
5138 reportError9(ParserErrorCode.INVALID_OPERATOR, ["${previous.lexeme}${_cu
rrentToken.lexeme}"]); | 5177 reportError10(ParserErrorCode.INVALID_OPERATOR, ["${previous.lexeme}${_c
urrentToken.lexeme}"]); |
5139 advance(); | 5178 advance(); |
5140 } | 5179 } |
5141 } | 5180 } |
5142 FormalParameterList parameters = parseFormalParameterList(); | 5181 FormalParameterList parameters = parseFormalParameterList(); |
5143 validateFormalParameterList(parameters); | 5182 validateFormalParameterList(parameters); |
5144 FunctionBody body = parseFunctionBody(true, ParserErrorCode.MISSING_FUNCTION
_BODY, false); | 5183 FunctionBody body = parseFunctionBody(true, ParserErrorCode.MISSING_FUNCTION
_BODY, false); |
5145 if (externalKeyword != null && body is! EmptyFunctionBody) { | 5184 if (externalKeyword != null && body is! EmptyFunctionBody) { |
5146 reportError9(ParserErrorCode.EXTERNAL_OPERATOR_WITH_BODY, []); | 5185 reportError10(ParserErrorCode.EXTERNAL_OPERATOR_WITH_BODY, []); |
5147 } | 5186 } |
5148 return new MethodDeclaration.full(commentAndMetadata.comment, commentAndMeta
data.metadata, externalKeyword, null, returnType, null, operatorKeyword, name, p
arameters, body); | 5187 return new MethodDeclaration.full(commentAndMetadata.comment, commentAndMeta
data.metadata, externalKeyword, null, returnType, null, operatorKeyword, name, p
arameters, body); |
5149 } | 5188 } |
5150 | 5189 |
5151 /** | 5190 /** |
5152 * Parse a return type if one is given, otherwise return `null` without advanc
ing. | 5191 * Parse a return type if one is given, otherwise return `null` without advanc
ing. |
5153 * | 5192 * |
5154 * @return the return type that was parsed | 5193 * @return the return type that was parsed |
5155 */ | 5194 */ |
5156 TypeName parseOptionalReturnType() { | 5195 TypeName parseOptionalReturnType() { |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5221 } else { | 5260 } else { |
5222 operand = parseAssignableSelector(operand, true); | 5261 operand = parseAssignableSelector(operand, true); |
5223 } | 5262 } |
5224 } while (matches5(TokenType.OPEN_SQUARE_BRACKET) || matches5(TokenType.PER
IOD) || matches5(TokenType.OPEN_PAREN)); | 5263 } while (matches5(TokenType.OPEN_SQUARE_BRACKET) || matches5(TokenType.PER
IOD) || matches5(TokenType.OPEN_PAREN)); |
5225 return operand; | 5264 return operand; |
5226 } | 5265 } |
5227 if (!_currentToken.type.isIncrementOperator) { | 5266 if (!_currentToken.type.isIncrementOperator) { |
5228 return operand; | 5267 return operand; |
5229 } | 5268 } |
5230 if (operand is Literal || operand is FunctionExpressionInvocation) { | 5269 if (operand is Literal || operand is FunctionExpressionInvocation) { |
5231 reportError9(ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR, []); | 5270 reportError10(ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR, []); |
5232 } | 5271 } |
5233 Token operator = andAdvance; | 5272 Token operator = andAdvance; |
5234 return new PostfixExpression.full(operand, operator); | 5273 return new PostfixExpression.full(operand, operator); |
5235 } | 5274 } |
5236 | 5275 |
5237 /** | 5276 /** |
5238 * Parse a primary expression. | 5277 * Parse a primary expression. |
5239 * | 5278 * |
5240 * <pre> | 5279 * <pre> |
5241 * primary ::= | 5280 * primary ::= |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5314 } | 5353 } |
5315 Token leftParenthesis = andAdvance; | 5354 Token leftParenthesis = andAdvance; |
5316 Expression expression = parseExpression2(); | 5355 Expression expression = parseExpression2(); |
5317 Token rightParenthesis = expect2(TokenType.CLOSE_PAREN); | 5356 Token rightParenthesis = expect2(TokenType.CLOSE_PAREN); |
5318 return new ParenthesizedExpression.full(leftParenthesis, expression, right
Parenthesis); | 5357 return new ParenthesizedExpression.full(leftParenthesis, expression, right
Parenthesis); |
5319 } else if (matches5(TokenType.LT)) { | 5358 } else if (matches5(TokenType.LT)) { |
5320 return parseListOrMapLiteral(null); | 5359 return parseListOrMapLiteral(null); |
5321 } else if (matches5(TokenType.QUESTION)) { | 5360 } else if (matches5(TokenType.QUESTION)) { |
5322 return parseArgumentDefinitionTest(); | 5361 return parseArgumentDefinitionTest(); |
5323 } else if (matches(Keyword.VOID)) { | 5362 } else if (matches(Keyword.VOID)) { |
5324 reportError9(ParserErrorCode.UNEXPECTED_TOKEN, [_currentToken.lexeme]); | 5363 reportError10(ParserErrorCode.UNEXPECTED_TOKEN, [_currentToken.lexeme]); |
5325 advance(); | 5364 advance(); |
5326 return parsePrimaryExpression(); | 5365 return parsePrimaryExpression(); |
5327 } else if (matches5(TokenType.HASH)) { | 5366 } else if (matches5(TokenType.HASH)) { |
5328 return parseSymbolLiteral(); | 5367 return parseSymbolLiteral(); |
5329 } else { | 5368 } else { |
5330 reportError9(ParserErrorCode.MISSING_IDENTIFIER, []); | 5369 reportError10(ParserErrorCode.MISSING_IDENTIFIER, []); |
5331 return createSyntheticIdentifier(); | 5370 return createSyntheticIdentifier(); |
5332 } | 5371 } |
5333 } | 5372 } |
5334 | 5373 |
5335 /** | 5374 /** |
5336 * Parse a redirecting constructor invocation. | 5375 * Parse a redirecting constructor invocation. |
5337 * | 5376 * |
5338 * <pre> | 5377 * <pre> |
5339 * redirectingConstructorInvocation ::= | 5378 * redirectingConstructorInvocation ::= |
5340 * 'this' ('.' identifier)? arguments | 5379 * 'this' ('.' identifier)? arguments |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5441 * type | 5480 * type |
5442 * @return the setter that was parsed | 5481 * @return the setter that was parsed |
5443 */ | 5482 */ |
5444 MethodDeclaration parseSetter(CommentAndMetadata commentAndMetadata, Token ext
ernalKeyword, Token staticKeyword, TypeName returnType) { | 5483 MethodDeclaration parseSetter(CommentAndMetadata commentAndMetadata, Token ext
ernalKeyword, Token staticKeyword, TypeName returnType) { |
5445 Token propertyKeyword = expect(Keyword.SET); | 5484 Token propertyKeyword = expect(Keyword.SET); |
5446 SimpleIdentifier name = parseSimpleIdentifier(); | 5485 SimpleIdentifier name = parseSimpleIdentifier(); |
5447 FormalParameterList parameters = parseFormalParameterList(); | 5486 FormalParameterList parameters = parseFormalParameterList(); |
5448 validateFormalParameterList(parameters); | 5487 validateFormalParameterList(parameters); |
5449 FunctionBody body = parseFunctionBody(externalKeyword != null || staticKeywo
rd == null, ParserErrorCode.STATIC_SETTER_WITHOUT_BODY, false); | 5488 FunctionBody body = parseFunctionBody(externalKeyword != null || staticKeywo
rd == null, ParserErrorCode.STATIC_SETTER_WITHOUT_BODY, false); |
5450 if (externalKeyword != null && body is! EmptyFunctionBody) { | 5489 if (externalKeyword != null && body is! EmptyFunctionBody) { |
5451 reportError9(ParserErrorCode.EXTERNAL_SETTER_WITH_BODY, []); | 5490 reportError10(ParserErrorCode.EXTERNAL_SETTER_WITH_BODY, []); |
5452 } | 5491 } |
5453 return new MethodDeclaration.full(commentAndMetadata.comment, commentAndMeta
data.metadata, externalKeyword, staticKeyword, returnType, propertyKeyword, null
, name, parameters, body); | 5492 return new MethodDeclaration.full(commentAndMetadata.comment, commentAndMeta
data.metadata, externalKeyword, staticKeyword, returnType, propertyKeyword, null
, name, parameters, body); |
5454 } | 5493 } |
5455 | 5494 |
5456 /** | 5495 /** |
5457 * Parse a shift expression. | 5496 * Parse a shift expression. |
5458 * | 5497 * |
5459 * <pre> | 5498 * <pre> |
5460 * shiftExpression ::= | 5499 * shiftExpression ::= |
5461 * additiveExpression (shiftOperator additiveExpression)* | 5500 * additiveExpression (shiftOperator additiveExpression)* |
(...skipping 25 matching lines...) Expand all Loading... |
5487 * </pre> | 5526 * </pre> |
5488 * | 5527 * |
5489 * @return the statements that were parsed | 5528 * @return the statements that were parsed |
5490 */ | 5529 */ |
5491 List<Statement> parseStatements2() { | 5530 List<Statement> parseStatements2() { |
5492 List<Statement> statements = new List<Statement>(); | 5531 List<Statement> statements = new List<Statement>(); |
5493 Token statementStart = _currentToken; | 5532 Token statementStart = _currentToken; |
5494 while (!matches5(TokenType.EOF) && !matches5(TokenType.CLOSE_CURLY_BRACKET)
&& !isSwitchMember()) { | 5533 while (!matches5(TokenType.EOF) && !matches5(TokenType.CLOSE_CURLY_BRACKET)
&& !isSwitchMember()) { |
5495 statements.add(parseStatement2()); | 5534 statements.add(parseStatement2()); |
5496 if (identical(_currentToken, statementStart)) { | 5535 if (identical(_currentToken, statementStart)) { |
5497 reportError10(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_current
Token.lexeme]); | 5536 reportError11(ParserErrorCode.UNEXPECTED_TOKEN, _currentToken, [_current
Token.lexeme]); |
5498 advance(); | 5537 advance(); |
5499 } | 5538 } |
5500 statementStart = _currentToken; | 5539 statementStart = _currentToken; |
5501 } | 5540 } |
5502 return statements; | 5541 return statements; |
5503 } | 5542 } |
5504 | 5543 |
5505 /** | 5544 /** |
5506 * Parse a string literal that contains interpolations. | 5545 * Parse a string literal that contains interpolations. |
5507 * | 5546 * |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5585 Token rightParenthesis = expect2(TokenType.CLOSE_PAREN); | 5624 Token rightParenthesis = expect2(TokenType.CLOSE_PAREN); |
5586 Token leftBracket = expect2(TokenType.OPEN_CURLY_BRACKET); | 5625 Token leftBracket = expect2(TokenType.OPEN_CURLY_BRACKET); |
5587 Token defaultKeyword = null; | 5626 Token defaultKeyword = null; |
5588 List<SwitchMember> members = new List<SwitchMember>(); | 5627 List<SwitchMember> members = new List<SwitchMember>(); |
5589 while (!matches5(TokenType.EOF) && !matches5(TokenType.CLOSE_CURLY_BRACKET
)) { | 5628 while (!matches5(TokenType.EOF) && !matches5(TokenType.CLOSE_CURLY_BRACKET
)) { |
5590 List<Label> labels = new List<Label>(); | 5629 List<Label> labels = new List<Label>(); |
5591 while (matchesIdentifier() && matches4(peek(), TokenType.COLON)) { | 5630 while (matchesIdentifier() && matches4(peek(), TokenType.COLON)) { |
5592 SimpleIdentifier identifier = parseSimpleIdentifier(); | 5631 SimpleIdentifier identifier = parseSimpleIdentifier(); |
5593 String label = identifier.token.lexeme; | 5632 String label = identifier.token.lexeme; |
5594 if (definedLabels.contains(label)) { | 5633 if (definedLabels.contains(label)) { |
5595 reportError10(ParserErrorCode.DUPLICATE_LABEL_IN_SWITCH_STATEMENT, i
dentifier.token, [label]); | 5634 reportError11(ParserErrorCode.DUPLICATE_LABEL_IN_SWITCH_STATEMENT, i
dentifier.token, [label]); |
5596 } else { | 5635 } else { |
5597 definedLabels.add(label); | 5636 definedLabels.add(label); |
5598 } | 5637 } |
5599 Token colon = expect2(TokenType.COLON); | 5638 Token colon = expect2(TokenType.COLON); |
5600 labels.add(new Label.full(identifier, colon)); | 5639 labels.add(new Label.full(identifier, colon)); |
5601 } | 5640 } |
5602 if (matches(Keyword.CASE)) { | 5641 if (matches(Keyword.CASE)) { |
5603 Token caseKeyword = andAdvance; | 5642 Token caseKeyword = andAdvance; |
5604 Expression caseExpression = parseExpression2(); | 5643 Expression caseExpression = parseExpression2(); |
5605 Token colon = expect2(TokenType.COLON); | 5644 Token colon = expect2(TokenType.COLON); |
5606 members.add(new SwitchCase.full(labels, caseKeyword, caseExpression, c
olon, parseStatements2())); | 5645 members.add(new SwitchCase.full(labels, caseKeyword, caseExpression, c
olon, parseStatements2())); |
5607 if (defaultKeyword != null) { | 5646 if (defaultKeyword != null) { |
5608 reportError10(ParserErrorCode.SWITCH_HAS_CASE_AFTER_DEFAULT_CASE, ca
seKeyword, []); | 5647 reportError11(ParserErrorCode.SWITCH_HAS_CASE_AFTER_DEFAULT_CASE, ca
seKeyword, []); |
5609 } | 5648 } |
5610 } else if (matches(Keyword.DEFAULT)) { | 5649 } else if (matches(Keyword.DEFAULT)) { |
5611 if (defaultKeyword != null) { | 5650 if (defaultKeyword != null) { |
5612 reportError10(ParserErrorCode.SWITCH_HAS_MULTIPLE_DEFAULT_CASES, pee
k(), []); | 5651 reportError11(ParserErrorCode.SWITCH_HAS_MULTIPLE_DEFAULT_CASES, pee
k(), []); |
5613 } | 5652 } |
5614 defaultKeyword = andAdvance; | 5653 defaultKeyword = andAdvance; |
5615 Token colon = expect2(TokenType.COLON); | 5654 Token colon = expect2(TokenType.COLON); |
5616 members.add(new SwitchDefault.full(labels, defaultKeyword, colon, pars
eStatements2())); | 5655 members.add(new SwitchDefault.full(labels, defaultKeyword, colon, pars
eStatements2())); |
5617 } else { | 5656 } else { |
5618 reportError9(ParserErrorCode.EXPECTED_CASE_OR_DEFAULT, []); | 5657 reportError10(ParserErrorCode.EXPECTED_CASE_OR_DEFAULT, []); |
5619 while (!matches5(TokenType.EOF) && !matches5(TokenType.CLOSE_CURLY_BRA
CKET) && !matches(Keyword.CASE) && !matches(Keyword.DEFAULT)) { | 5658 while (!matches5(TokenType.EOF) && !matches5(TokenType.CLOSE_CURLY_BRA
CKET) && !matches(Keyword.CASE) && !matches(Keyword.DEFAULT)) { |
5620 advance(); | 5659 advance(); |
5621 } | 5660 } |
5622 } | 5661 } |
5623 } | 5662 } |
5624 Token rightBracket = expect2(TokenType.CLOSE_CURLY_BRACKET); | 5663 Token rightBracket = expect2(TokenType.CLOSE_CURLY_BRACKET); |
5625 return new SwitchStatement.full(keyword, leftParenthesis, expression, righ
tParenthesis, leftBracket, members, rightBracket); | 5664 return new SwitchStatement.full(keyword, leftParenthesis, expression, righ
tParenthesis, leftBracket, members, rightBracket); |
5626 } finally { | 5665 } finally { |
5627 _inSwitch = wasInSwitch; | 5666 _inSwitch = wasInSwitch; |
5628 } | 5667 } |
(...skipping 12 matching lines...) Expand all Loading... |
5641 SymbolLiteral parseSymbolLiteral() { | 5680 SymbolLiteral parseSymbolLiteral() { |
5642 Token poundSign = andAdvance; | 5681 Token poundSign = andAdvance; |
5643 List<Token> components = new List<Token>(); | 5682 List<Token> components = new List<Token>(); |
5644 if (matchesIdentifier()) { | 5683 if (matchesIdentifier()) { |
5645 components.add(andAdvance); | 5684 components.add(andAdvance); |
5646 while (matches5(TokenType.PERIOD)) { | 5685 while (matches5(TokenType.PERIOD)) { |
5647 advance(); | 5686 advance(); |
5648 if (matchesIdentifier()) { | 5687 if (matchesIdentifier()) { |
5649 components.add(andAdvance); | 5688 components.add(andAdvance); |
5650 } else { | 5689 } else { |
5651 reportError9(ParserErrorCode.MISSING_IDENTIFIER, []); | 5690 reportError10(ParserErrorCode.MISSING_IDENTIFIER, []); |
5652 components.add(createSyntheticToken2(TokenType.IDENTIFIER)); | 5691 components.add(createSyntheticToken2(TokenType.IDENTIFIER)); |
5653 break; | 5692 break; |
5654 } | 5693 } |
5655 } | 5694 } |
5656 } else if (_currentToken.isOperator) { | 5695 } else if (_currentToken.isOperator) { |
5657 components.add(andAdvance); | 5696 components.add(andAdvance); |
5658 } else { | 5697 } else { |
5659 reportError9(ParserErrorCode.MISSING_IDENTIFIER, []); | 5698 reportError10(ParserErrorCode.MISSING_IDENTIFIER, []); |
5660 components.add(createSyntheticToken2(TokenType.IDENTIFIER)); | 5699 components.add(createSyntheticToken2(TokenType.IDENTIFIER)); |
5661 } | 5700 } |
5662 return new SymbolLiteral.full(poundSign, new List.from(components)); | 5701 return new SymbolLiteral.full(poundSign, new List.from(components)); |
5663 } | 5702 } |
5664 | 5703 |
5665 /** | 5704 /** |
5666 * Parse a throw expression. | 5705 * Parse a throw expression. |
5667 * | 5706 * |
5668 * <pre> | 5707 * <pre> |
5669 * throwExpression ::= | 5708 * throwExpression ::= |
5670 * 'throw' expression | 5709 * 'throw' expression |
5671 * </pre> | 5710 * </pre> |
5672 * | 5711 * |
5673 * @return the throw expression that was parsed | 5712 * @return the throw expression that was parsed |
5674 */ | 5713 */ |
5675 Expression parseThrowExpression() { | 5714 Expression parseThrowExpression() { |
5676 Token keyword = expect(Keyword.THROW); | 5715 Token keyword = expect(Keyword.THROW); |
5677 if (matches5(TokenType.SEMICOLON) || matches5(TokenType.CLOSE_PAREN)) { | 5716 if (matches5(TokenType.SEMICOLON) || matches5(TokenType.CLOSE_PAREN)) { |
5678 reportError10(ParserErrorCode.MISSING_EXPRESSION_IN_THROW, _currentToken,
[]); | 5717 reportError11(ParserErrorCode.MISSING_EXPRESSION_IN_THROW, _currentToken,
[]); |
5679 return new ThrowExpression.full(keyword, createSyntheticIdentifier()); | 5718 return new ThrowExpression.full(keyword, createSyntheticIdentifier()); |
5680 } | 5719 } |
5681 Expression expression = parseExpression2(); | 5720 Expression expression = parseExpression2(); |
5682 return new ThrowExpression.full(keyword, expression); | 5721 return new ThrowExpression.full(keyword, expression); |
5683 } | 5722 } |
5684 | 5723 |
5685 /** | 5724 /** |
5686 * Parse a throw expression. | 5725 * Parse a throw expression. |
5687 * | 5726 * |
5688 * <pre> | 5727 * <pre> |
5689 * throwExpressionWithoutCascade ::= | 5728 * throwExpressionWithoutCascade ::= |
5690 * 'throw' expressionWithoutCascade | 5729 * 'throw' expressionWithoutCascade |
5691 * </pre> | 5730 * </pre> |
5692 * | 5731 * |
5693 * @return the throw expression that was parsed | 5732 * @return the throw expression that was parsed |
5694 */ | 5733 */ |
5695 Expression parseThrowExpressionWithoutCascade() { | 5734 Expression parseThrowExpressionWithoutCascade() { |
5696 Token keyword = expect(Keyword.THROW); | 5735 Token keyword = expect(Keyword.THROW); |
5697 if (matches5(TokenType.SEMICOLON) || matches5(TokenType.CLOSE_PAREN)) { | 5736 if (matches5(TokenType.SEMICOLON) || matches5(TokenType.CLOSE_PAREN)) { |
5698 reportError10(ParserErrorCode.MISSING_EXPRESSION_IN_THROW, _currentToken,
[]); | 5737 reportError11(ParserErrorCode.MISSING_EXPRESSION_IN_THROW, _currentToken,
[]); |
5699 return new ThrowExpression.full(keyword, createSyntheticIdentifier()); | 5738 return new ThrowExpression.full(keyword, createSyntheticIdentifier()); |
5700 } | 5739 } |
5701 Expression expression = parseExpressionWithoutCascade(); | 5740 Expression expression = parseExpressionWithoutCascade(); |
5702 return new ThrowExpression.full(keyword, expression); | 5741 return new ThrowExpression.full(keyword, expression); |
5703 } | 5742 } |
5704 | 5743 |
5705 /** | 5744 /** |
5706 * Parse a try statement. | 5745 * Parse a try statement. |
5707 * | 5746 * |
5708 * <pre> | 5747 * <pre> |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5752 } | 5791 } |
5753 Block catchBody = parseBlock(); | 5792 Block catchBody = parseBlock(); |
5754 catchClauses.add(new CatchClause.full(onKeyword, exceptionType, catchKeywo
rd, leftParenthesis, exceptionParameter, comma, stackTraceParameter, rightParent
hesis, catchBody)); | 5793 catchClauses.add(new CatchClause.full(onKeyword, exceptionType, catchKeywo
rd, leftParenthesis, exceptionParameter, comma, stackTraceParameter, rightParent
hesis, catchBody)); |
5755 } | 5794 } |
5756 Token finallyKeyword = null; | 5795 Token finallyKeyword = null; |
5757 if (matches(Keyword.FINALLY)) { | 5796 if (matches(Keyword.FINALLY)) { |
5758 finallyKeyword = andAdvance; | 5797 finallyKeyword = andAdvance; |
5759 finallyClause = parseBlock(); | 5798 finallyClause = parseBlock(); |
5760 } else { | 5799 } else { |
5761 if (catchClauses.isEmpty) { | 5800 if (catchClauses.isEmpty) { |
5762 reportError9(ParserErrorCode.MISSING_CATCH_OR_FINALLY, []); | 5801 reportError10(ParserErrorCode.MISSING_CATCH_OR_FINALLY, []); |
5763 } | 5802 } |
5764 } | 5803 } |
5765 return new TryStatement.full(tryKeyword, body, catchClauses, finallyKeyword,
finallyClause); | 5804 return new TryStatement.full(tryKeyword, body, catchClauses, finallyKeyword,
finallyClause); |
5766 } | 5805 } |
5767 | 5806 |
5768 /** | 5807 /** |
5769 * Parse a type alias. | 5808 * Parse a type alias. |
5770 * | 5809 * |
5771 * <pre> | 5810 * <pre> |
5772 * typeAlias ::= | 5811 * typeAlias ::= |
(...skipping 20 matching lines...) Expand all Loading... |
5793 * @return the type alias that was parsed | 5832 * @return the type alias that was parsed |
5794 */ | 5833 */ |
5795 TypeAlias parseTypeAlias(CommentAndMetadata commentAndMetadata) { | 5834 TypeAlias parseTypeAlias(CommentAndMetadata commentAndMetadata) { |
5796 Token keyword = expect(Keyword.TYPEDEF); | 5835 Token keyword = expect(Keyword.TYPEDEF); |
5797 if (matchesIdentifier()) { | 5836 if (matchesIdentifier()) { |
5798 Token next = peek(); | 5837 Token next = peek(); |
5799 if (matches4(next, TokenType.LT)) { | 5838 if (matches4(next, TokenType.LT)) { |
5800 next = skipTypeParameterList(next); | 5839 next = skipTypeParameterList(next); |
5801 if (next != null && matches4(next, TokenType.EQ)) { | 5840 if (next != null && matches4(next, TokenType.EQ)) { |
5802 TypeAlias typeAlias = parseClassTypeAlias(commentAndMetadata, keyword)
; | 5841 TypeAlias typeAlias = parseClassTypeAlias(commentAndMetadata, keyword)
; |
5803 reportError10(ParserErrorCode.DEPRECATED_CLASS_TYPE_ALIAS, keyword, []
); | 5842 reportError11(ParserErrorCode.DEPRECATED_CLASS_TYPE_ALIAS, keyword, []
); |
5804 return typeAlias; | 5843 return typeAlias; |
5805 } | 5844 } |
5806 } else if (matches4(next, TokenType.EQ)) { | 5845 } else if (matches4(next, TokenType.EQ)) { |
5807 TypeAlias typeAlias = parseClassTypeAlias(commentAndMetadata, keyword); | 5846 TypeAlias typeAlias = parseClassTypeAlias(commentAndMetadata, keyword); |
5808 reportError10(ParserErrorCode.DEPRECATED_CLASS_TYPE_ALIAS, keyword, []); | 5847 reportError11(ParserErrorCode.DEPRECATED_CLASS_TYPE_ALIAS, keyword, []); |
5809 return typeAlias; | 5848 return typeAlias; |
5810 } | 5849 } |
5811 } | 5850 } |
5812 return parseFunctionTypeAlias(commentAndMetadata, keyword); | 5851 return parseFunctionTypeAlias(commentAndMetadata, keyword); |
5813 } | 5852 } |
5814 | 5853 |
5815 /** | 5854 /** |
5816 * Parse a unary expression. | 5855 * Parse a unary expression. |
5817 * | 5856 * |
5818 * <pre> | 5857 * <pre> |
(...skipping 25 matching lines...) Expand all Loading... |
5844 } | 5883 } |
5845 if (identical(operator.type, TokenType.MINUS_MINUS)) { | 5884 if (identical(operator.type, TokenType.MINUS_MINUS)) { |
5846 int offset = operator.offset; | 5885 int offset = operator.offset; |
5847 Token firstOperator = new Token(TokenType.MINUS, offset); | 5886 Token firstOperator = new Token(TokenType.MINUS, offset); |
5848 Token secondOperator = new Token(TokenType.MINUS, offset + 1); | 5887 Token secondOperator = new Token(TokenType.MINUS, offset + 1); |
5849 secondOperator.setNext(_currentToken); | 5888 secondOperator.setNext(_currentToken); |
5850 firstOperator.setNext(secondOperator); | 5889 firstOperator.setNext(secondOperator); |
5851 operator.previous.setNext(firstOperator); | 5890 operator.previous.setNext(firstOperator); |
5852 return new PrefixExpression.full(firstOperator, new PrefixExpression.f
ull(secondOperator, new SuperExpression.full(andAdvance))); | 5891 return new PrefixExpression.full(firstOperator, new PrefixExpression.f
ull(secondOperator, new SuperExpression.full(andAdvance))); |
5853 } else { | 5892 } else { |
5854 reportError9(ParserErrorCode.INVALID_OPERATOR_FOR_SUPER, [operator.lex
eme]); | 5893 reportError10(ParserErrorCode.INVALID_OPERATOR_FOR_SUPER, [operator.le
xeme]); |
5855 return new PrefixExpression.full(operator, new SuperExpression.full(an
dAdvance)); | 5894 return new PrefixExpression.full(operator, new SuperExpression.full(an
dAdvance)); |
5856 } | 5895 } |
5857 } | 5896 } |
5858 return new PrefixExpression.full(operator, parseAssignableExpression(false
)); | 5897 return new PrefixExpression.full(operator, parseAssignableExpression(false
)); |
5859 } else if (matches5(TokenType.PLUS)) { | 5898 } else if (matches5(TokenType.PLUS)) { |
5860 reportError9(ParserErrorCode.MISSING_IDENTIFIER, []); | 5899 reportError10(ParserErrorCode.MISSING_IDENTIFIER, []); |
5861 return createSyntheticIdentifier(); | 5900 return createSyntheticIdentifier(); |
5862 } | 5901 } |
5863 return parsePostfixExpression(); | 5902 return parsePostfixExpression(); |
5864 } | 5903 } |
5865 | 5904 |
5866 /** | 5905 /** |
5867 * Parse a variable declaration. | 5906 * Parse a variable declaration. |
5868 * | 5907 * |
5869 * <pre> | 5908 * <pre> |
5870 * variableDeclaration ::= | 5909 * variableDeclaration ::= |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5911 * | 5950 * |
5912 * @param commentAndMetadata the metadata to be associated with the variable d
eclaration list, or | 5951 * @param commentAndMetadata the metadata to be associated with the variable d
eclaration list, or |
5913 * `null` if there is no attempt at parsing the comment and metadata | 5952 * `null` if there is no attempt at parsing the comment and metadata |
5914 * @param keyword the token representing the 'final', 'const' or 'var' keyword
, or `null` if | 5953 * @param keyword the token representing the 'final', 'const' or 'var' keyword
, or `null` if |
5915 * there is no keyword | 5954 * there is no keyword |
5916 * @param type the type of the variables in the list | 5955 * @param type the type of the variables in the list |
5917 * @return the variable declaration list that was parsed | 5956 * @return the variable declaration list that was parsed |
5918 */ | 5957 */ |
5919 VariableDeclarationList parseVariableDeclarationList2(CommentAndMetadata comme
ntAndMetadata, Token keyword, TypeName type) { | 5958 VariableDeclarationList parseVariableDeclarationList2(CommentAndMetadata comme
ntAndMetadata, Token keyword, TypeName type) { |
5920 if (type != null && keyword != null && matches3(keyword, Keyword.VAR)) { | 5959 if (type != null && keyword != null && matches3(keyword, Keyword.VAR)) { |
5921 reportError10(ParserErrorCode.VAR_AND_TYPE, keyword, []); | 5960 reportError11(ParserErrorCode.VAR_AND_TYPE, keyword, []); |
5922 } | 5961 } |
5923 List<VariableDeclaration> variables = new List<VariableDeclaration>(); | 5962 List<VariableDeclaration> variables = new List<VariableDeclaration>(); |
5924 variables.add(parseVariableDeclaration()); | 5963 variables.add(parseVariableDeclaration()); |
5925 while (matches5(TokenType.COMMA)) { | 5964 while (matches5(TokenType.COMMA)) { |
5926 advance(); | 5965 advance(); |
5927 variables.add(parseVariableDeclaration()); | 5966 variables.add(parseVariableDeclaration()); |
5928 } | 5967 } |
5929 return new VariableDeclarationList.full(commentAndMetadata != null ? comment
AndMetadata.comment : null, commentAndMetadata != null ? commentAndMetadata.meta
data : null, keyword, type, variables); | 5968 return new VariableDeclarationList.full(commentAndMetadata != null ? comment
AndMetadata.comment : null, commentAndMetadata != null ? commentAndMetadata.meta
data : null, keyword, type, variables); |
5930 } | 5969 } |
5931 | 5970 |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6010 */ | 6049 */ |
6011 Token peek2(int distance) { | 6050 Token peek2(int distance) { |
6012 Token token = _currentToken; | 6051 Token token = _currentToken; |
6013 for (int i = 0; i < distance; i++) { | 6052 for (int i = 0; i < distance; i++) { |
6014 token = token.next; | 6053 token = token.next; |
6015 } | 6054 } |
6016 return token; | 6055 return token; |
6017 } | 6056 } |
6018 | 6057 |
6019 /** | 6058 /** |
| 6059 * Report the given [AnalysisError]. |
| 6060 * |
| 6061 * @param error the error to be reported |
| 6062 */ |
| 6063 void reportError(AnalysisError error) { |
| 6064 if (_errorListenerLock != 0) { |
| 6065 return; |
| 6066 } |
| 6067 _errorListener.onError(error); |
| 6068 } |
| 6069 |
| 6070 /** |
6020 * Report an error with the given error code and arguments. | 6071 * Report an error with the given error code and arguments. |
6021 * | 6072 * |
6022 * @param errorCode the error code of the error to be reported | 6073 * @param errorCode the error code of the error to be reported |
6023 * @param node the node specifying the location of the error | 6074 * @param node the node specifying the location of the error |
6024 * @param arguments the arguments to the error, used to compose the error mess
age | 6075 * @param arguments the arguments to the error, used to compose the error mess
age |
6025 */ | 6076 */ |
6026 void reportError(ParserErrorCode errorCode, ASTNode node, List<Object> argumen
ts) { | 6077 void reportError9(ParserErrorCode errorCode, ASTNode node, List<Object> argume
nts) { |
6027 _errorListener.onError(new AnalysisError.con2(_source, node.offset, node.len
gth, errorCode, arguments)); | 6078 reportError(new AnalysisError.con2(_source, node.offset, node.length, errorC
ode, arguments)); |
6028 } | 6079 } |
6029 | 6080 |
6030 /** | 6081 /** |
6031 * Report an error with the given error code and arguments. | 6082 * Report an error with the given error code and arguments. |
6032 * | 6083 * |
6033 * @param errorCode the error code of the error to be reported | 6084 * @param errorCode the error code of the error to be reported |
6034 * @param arguments the arguments to the error, used to compose the error mess
age | 6085 * @param arguments the arguments to the error, used to compose the error mess
age |
6035 */ | 6086 */ |
6036 void reportError9(ParserErrorCode errorCode, List<Object> arguments) { | 6087 void reportError10(ParserErrorCode errorCode, List<Object> arguments) { |
6037 reportError10(errorCode, _currentToken, arguments); | 6088 reportError11(errorCode, _currentToken, arguments); |
6038 } | 6089 } |
6039 | 6090 |
6040 /** | 6091 /** |
6041 * Report an error with the given error code and arguments. | 6092 * Report an error with the given error code and arguments. |
6042 * | 6093 * |
6043 * @param errorCode the error code of the error to be reported | 6094 * @param errorCode the error code of the error to be reported |
6044 * @param token the token specifying the location of the error | 6095 * @param token the token specifying the location of the error |
6045 * @param arguments the arguments to the error, used to compose the error mess
age | 6096 * @param arguments the arguments to the error, used to compose the error mess
age |
6046 */ | 6097 */ |
6047 void reportError10(ParserErrorCode errorCode, Token token, List<Object> argume
nts) { | 6098 void reportError11(ParserErrorCode errorCode, Token token, List<Object> argume
nts) { |
6048 _errorListener.onError(new AnalysisError.con2(_source, token.offset, token.l
ength, errorCode, arguments)); | 6099 reportError(new AnalysisError.con2(_source, token.offset, token.length, erro
rCode, arguments)); |
6049 } | 6100 } |
6050 | 6101 |
6051 /** | 6102 /** |
| 6103 * Skips a block with all containing blocks. |
| 6104 */ |
| 6105 void skipBlock() { |
| 6106 _currentToken = (_currentToken as BeginToken).endToken.next; |
| 6107 } |
| 6108 |
| 6109 /** |
6052 * Parse the 'final', 'const', 'var' or type preceding a variable declaration,
starting at the | 6110 * Parse the 'final', 'const', 'var' or type preceding a variable declaration,
starting at the |
6053 * given token, without actually creating a type or changing the current token
. Return the token | 6111 * given token, without actually creating a type or changing the current token
. Return the token |
6054 * following the type that was parsed, or `null` if the given token is not the
first token | 6112 * following the type that was parsed, or `null` if the given token is not the
first token |
6055 * in a valid type. | 6113 * in a valid type. |
6056 * | 6114 * |
6057 * <pre> | 6115 * <pre> |
6058 * finalConstVarOrType ::= | 6116 * finalConstVarOrType ::= |
6059 * | 'final' type? | 6117 * | 'final' type? |
6060 * | 'const' type? | 6118 * | 'const' type? |
6061 * | 'var' | 6119 * | 'var' |
(...skipping 417 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6479 } else if (currentChar == 0x66) { | 6537 } else if (currentChar == 0x66) { |
6480 builder.appendChar(0xC); | 6538 builder.appendChar(0xC); |
6481 } else if (currentChar == 0x62) { | 6539 } else if (currentChar == 0x62) { |
6482 builder.appendChar(0x8); | 6540 builder.appendChar(0x8); |
6483 } else if (currentChar == 0x74) { | 6541 } else if (currentChar == 0x74) { |
6484 builder.appendChar(0x9); | 6542 builder.appendChar(0x9); |
6485 } else if (currentChar == 0x76) { | 6543 } else if (currentChar == 0x76) { |
6486 builder.appendChar(0xB); | 6544 builder.appendChar(0xB); |
6487 } else if (currentChar == 0x78) { | 6545 } else if (currentChar == 0x78) { |
6488 if (currentIndex + 2 >= length) { | 6546 if (currentIndex + 2 >= length) { |
6489 reportError9(ParserErrorCode.INVALID_HEX_ESCAPE, []); | 6547 reportError10(ParserErrorCode.INVALID_HEX_ESCAPE, []); |
6490 return length; | 6548 return length; |
6491 } | 6549 } |
6492 int firstDigit = lexeme.codeUnitAt(currentIndex + 1); | 6550 int firstDigit = lexeme.codeUnitAt(currentIndex + 1); |
6493 int secondDigit = lexeme.codeUnitAt(currentIndex + 2); | 6551 int secondDigit = lexeme.codeUnitAt(currentIndex + 2); |
6494 if (!isHexDigit(firstDigit) || !isHexDigit(secondDigit)) { | 6552 if (!isHexDigit(firstDigit) || !isHexDigit(secondDigit)) { |
6495 reportError9(ParserErrorCode.INVALID_HEX_ESCAPE, []); | 6553 reportError10(ParserErrorCode.INVALID_HEX_ESCAPE, []); |
6496 } else { | 6554 } else { |
6497 builder.appendChar(((Character.digit(firstDigit, 16) << 4) + Character.d
igit(secondDigit, 16)) as int); | 6555 builder.appendChar(((Character.digit(firstDigit, 16) << 4) + Character.d
igit(secondDigit, 16)) as int); |
6498 } | 6556 } |
6499 return currentIndex + 3; | 6557 return currentIndex + 3; |
6500 } else if (currentChar == 0x75) { | 6558 } else if (currentChar == 0x75) { |
6501 currentIndex++; | 6559 currentIndex++; |
6502 if (currentIndex >= length) { | 6560 if (currentIndex >= length) { |
6503 reportError9(ParserErrorCode.INVALID_UNICODE_ESCAPE, []); | 6561 reportError10(ParserErrorCode.INVALID_UNICODE_ESCAPE, []); |
6504 return length; | 6562 return length; |
6505 } | 6563 } |
6506 currentChar = lexeme.codeUnitAt(currentIndex); | 6564 currentChar = lexeme.codeUnitAt(currentIndex); |
6507 if (currentChar == 0x7B) { | 6565 if (currentChar == 0x7B) { |
6508 currentIndex++; | 6566 currentIndex++; |
6509 if (currentIndex >= length) { | 6567 if (currentIndex >= length) { |
6510 reportError9(ParserErrorCode.INVALID_UNICODE_ESCAPE, []); | 6568 reportError10(ParserErrorCode.INVALID_UNICODE_ESCAPE, []); |
6511 return length; | 6569 return length; |
6512 } | 6570 } |
6513 currentChar = lexeme.codeUnitAt(currentIndex); | 6571 currentChar = lexeme.codeUnitAt(currentIndex); |
6514 int digitCount = 0; | 6572 int digitCount = 0; |
6515 int value = 0; | 6573 int value = 0; |
6516 while (currentChar != 0x7D) { | 6574 while (currentChar != 0x7D) { |
6517 if (!isHexDigit(currentChar)) { | 6575 if (!isHexDigit(currentChar)) { |
6518 reportError9(ParserErrorCode.INVALID_UNICODE_ESCAPE, []); | 6576 reportError10(ParserErrorCode.INVALID_UNICODE_ESCAPE, []); |
6519 currentIndex++; | 6577 currentIndex++; |
6520 while (currentIndex < length && lexeme.codeUnitAt(currentIndex) != 0
x7D) { | 6578 while (currentIndex < length && lexeme.codeUnitAt(currentIndex) != 0
x7D) { |
6521 currentIndex++; | 6579 currentIndex++; |
6522 } | 6580 } |
6523 return currentIndex + 1; | 6581 return currentIndex + 1; |
6524 } | 6582 } |
6525 digitCount++; | 6583 digitCount++; |
6526 value = (value << 4) + Character.digit(currentChar, 16); | 6584 value = (value << 4) + Character.digit(currentChar, 16); |
6527 currentIndex++; | 6585 currentIndex++; |
6528 if (currentIndex >= length) { | 6586 if (currentIndex >= length) { |
6529 reportError9(ParserErrorCode.INVALID_UNICODE_ESCAPE, []); | 6587 reportError10(ParserErrorCode.INVALID_UNICODE_ESCAPE, []); |
6530 return length; | 6588 return length; |
6531 } | 6589 } |
6532 currentChar = lexeme.codeUnitAt(currentIndex); | 6590 currentChar = lexeme.codeUnitAt(currentIndex); |
6533 } | 6591 } |
6534 if (digitCount < 1 || digitCount > 6) { | 6592 if (digitCount < 1 || digitCount > 6) { |
6535 reportError9(ParserErrorCode.INVALID_UNICODE_ESCAPE, []); | 6593 reportError10(ParserErrorCode.INVALID_UNICODE_ESCAPE, []); |
6536 } | 6594 } |
6537 appendScalarValue(builder, lexeme.substring(index, currentIndex + 1), va
lue, index, currentIndex); | 6595 appendScalarValue(builder, lexeme.substring(index, currentIndex + 1), va
lue, index, currentIndex); |
6538 return currentIndex + 1; | 6596 return currentIndex + 1; |
6539 } else { | 6597 } else { |
6540 if (currentIndex + 3 >= length) { | 6598 if (currentIndex + 3 >= length) { |
6541 reportError9(ParserErrorCode.INVALID_UNICODE_ESCAPE, []); | 6599 reportError10(ParserErrorCode.INVALID_UNICODE_ESCAPE, []); |
6542 return length; | 6600 return length; |
6543 } | 6601 } |
6544 int firstDigit = currentChar; | 6602 int firstDigit = currentChar; |
6545 int secondDigit = lexeme.codeUnitAt(currentIndex + 1); | 6603 int secondDigit = lexeme.codeUnitAt(currentIndex + 1); |
6546 int thirdDigit = lexeme.codeUnitAt(currentIndex + 2); | 6604 int thirdDigit = lexeme.codeUnitAt(currentIndex + 2); |
6547 int fourthDigit = lexeme.codeUnitAt(currentIndex + 3); | 6605 int fourthDigit = lexeme.codeUnitAt(currentIndex + 3); |
6548 if (!isHexDigit(firstDigit) || !isHexDigit(secondDigit) || !isHexDigit(t
hirdDigit) || !isHexDigit(fourthDigit)) { | 6606 if (!isHexDigit(firstDigit) || !isHexDigit(secondDigit) || !isHexDigit(t
hirdDigit) || !isHexDigit(fourthDigit)) { |
6549 reportError9(ParserErrorCode.INVALID_UNICODE_ESCAPE, []); | 6607 reportError10(ParserErrorCode.INVALID_UNICODE_ESCAPE, []); |
6550 } else { | 6608 } else { |
6551 appendScalarValue(builder, lexeme.substring(index, currentIndex + 1),
(((((Character.digit(firstDigit, 16) << 4) + Character.digit(secondDigit, 16)) <
< 4) + Character.digit(thirdDigit, 16)) << 4) + Character.digit(fourthDigit, 16)
, index, currentIndex + 3); | 6609 appendScalarValue(builder, lexeme.substring(index, currentIndex + 1),
(((((Character.digit(firstDigit, 16) << 4) + Character.digit(secondDigit, 16)) <
< 4) + Character.digit(thirdDigit, 16)) << 4) + Character.digit(fourthDigit, 16)
, index, currentIndex + 3); |
6552 } | 6610 } |
6553 return currentIndex + 4; | 6611 return currentIndex + 4; |
6554 } | 6612 } |
6555 } else { | 6613 } else { |
6556 builder.appendChar(currentChar); | 6614 builder.appendChar(currentChar); |
6557 } | 6615 } |
6558 return currentIndex + 1; | 6616 return currentIndex + 1; |
6559 } | 6617 } |
6560 | 6618 |
6561 /** | 6619 /** |
| 6620 * Decrements the error reporting lock level. If level is more than `0`, then |
| 6621 * [reportError] wont report any error. |
| 6622 */ |
| 6623 void unlockErrorListener() { |
| 6624 if (_errorListenerLock == 0) { |
| 6625 throw new IllegalStateException("Attempt to unlock not locked error listen
er."); |
| 6626 } |
| 6627 _errorListenerLock--; |
| 6628 } |
| 6629 |
| 6630 /** |
6562 * Validate that the given parameter list does not contain any field initializ
ers. | 6631 * Validate that the given parameter list does not contain any field initializ
ers. |
6563 * | 6632 * |
6564 * @param parameterList the parameter list to be validated | 6633 * @param parameterList the parameter list to be validated |
6565 */ | 6634 */ |
6566 void validateFormalParameterList(FormalParameterList parameterList) { | 6635 void validateFormalParameterList(FormalParameterList parameterList) { |
6567 for (FormalParameter parameter in parameterList.parameters) { | 6636 for (FormalParameter parameter in parameterList.parameters) { |
6568 if (parameter is FieldFormalParameter) { | 6637 if (parameter is FieldFormalParameter) { |
6569 reportError(ParserErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR, (para
meter as FieldFormalParameter).identifier, []); | 6638 reportError9(ParserErrorCode.FIELD_INITIALIZER_OUTSIDE_CONSTRUCTOR, (par
ameter as FieldFormalParameter).identifier, []); |
6570 } | 6639 } |
6571 } | 6640 } |
6572 } | 6641 } |
6573 | 6642 |
6574 /** | 6643 /** |
6575 * Validate that the given set of modifiers is appropriate for a class and ret
urn the 'abstract' | 6644 * Validate that the given set of modifiers is appropriate for a class and ret
urn the 'abstract' |
6576 * keyword if there is one. | 6645 * keyword if there is one. |
6577 * | 6646 * |
6578 * @param modifiers the modifiers being validated | 6647 * @param modifiers the modifiers being validated |
6579 */ | 6648 */ |
6580 Token validateModifiersForClass(Modifiers modifiers) { | 6649 Token validateModifiersForClass(Modifiers modifiers) { |
6581 validateModifiersForTopLevelDeclaration(modifiers); | 6650 validateModifiersForTopLevelDeclaration(modifiers); |
6582 if (modifiers.constKeyword != null) { | 6651 if (modifiers.constKeyword != null) { |
6583 reportError10(ParserErrorCode.CONST_CLASS, modifiers.constKeyword, []); | 6652 reportError11(ParserErrorCode.CONST_CLASS, modifiers.constKeyword, []); |
6584 } | 6653 } |
6585 if (modifiers.externalKeyword != null) { | 6654 if (modifiers.externalKeyword != null) { |
6586 reportError10(ParserErrorCode.EXTERNAL_CLASS, modifiers.externalKeyword, [
]); | 6655 reportError11(ParserErrorCode.EXTERNAL_CLASS, modifiers.externalKeyword, [
]); |
6587 } | 6656 } |
6588 if (modifiers.finalKeyword != null) { | 6657 if (modifiers.finalKeyword != null) { |
6589 reportError10(ParserErrorCode.FINAL_CLASS, modifiers.finalKeyword, []); | 6658 reportError11(ParserErrorCode.FINAL_CLASS, modifiers.finalKeyword, []); |
6590 } | 6659 } |
6591 if (modifiers.varKeyword != null) { | 6660 if (modifiers.varKeyword != null) { |
6592 reportError10(ParserErrorCode.VAR_CLASS, modifiers.varKeyword, []); | 6661 reportError11(ParserErrorCode.VAR_CLASS, modifiers.varKeyword, []); |
6593 } | 6662 } |
6594 return modifiers.abstractKeyword; | 6663 return modifiers.abstractKeyword; |
6595 } | 6664 } |
6596 | 6665 |
6597 /** | 6666 /** |
6598 * Validate that the given set of modifiers is appropriate for a constructor a
nd return the | 6667 * Validate that the given set of modifiers is appropriate for a constructor a
nd return the |
6599 * 'const' keyword if there is one. | 6668 * 'const' keyword if there is one. |
6600 * | 6669 * |
6601 * @param modifiers the modifiers being validated | 6670 * @param modifiers the modifiers being validated |
6602 * @return the 'const' or 'final' keyword associated with the constructor | 6671 * @return the 'const' or 'final' keyword associated with the constructor |
6603 */ | 6672 */ |
6604 Token validateModifiersForConstructor(Modifiers modifiers) { | 6673 Token validateModifiersForConstructor(Modifiers modifiers) { |
6605 if (modifiers.abstractKeyword != null) { | 6674 if (modifiers.abstractKeyword != null) { |
6606 reportError9(ParserErrorCode.ABSTRACT_CLASS_MEMBER, []); | 6675 reportError10(ParserErrorCode.ABSTRACT_CLASS_MEMBER, []); |
6607 } | 6676 } |
6608 if (modifiers.finalKeyword != null) { | 6677 if (modifiers.finalKeyword != null) { |
6609 reportError10(ParserErrorCode.FINAL_CONSTRUCTOR, modifiers.finalKeyword, [
]); | 6678 reportError11(ParserErrorCode.FINAL_CONSTRUCTOR, modifiers.finalKeyword, [
]); |
6610 } | 6679 } |
6611 if (modifiers.staticKeyword != null) { | 6680 if (modifiers.staticKeyword != null) { |
6612 reportError10(ParserErrorCode.STATIC_CONSTRUCTOR, modifiers.staticKeyword,
[]); | 6681 reportError11(ParserErrorCode.STATIC_CONSTRUCTOR, modifiers.staticKeyword,
[]); |
6613 } | 6682 } |
6614 if (modifiers.varKeyword != null) { | 6683 if (modifiers.varKeyword != null) { |
6615 reportError10(ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE, modifiers.varK
eyword, []); | 6684 reportError11(ParserErrorCode.CONSTRUCTOR_WITH_RETURN_TYPE, modifiers.varK
eyword, []); |
6616 } | 6685 } |
6617 Token externalKeyword = modifiers.externalKeyword; | 6686 Token externalKeyword = modifiers.externalKeyword; |
6618 Token constKeyword = modifiers.constKeyword; | 6687 Token constKeyword = modifiers.constKeyword; |
6619 Token factoryKeyword = modifiers.factoryKeyword; | 6688 Token factoryKeyword = modifiers.factoryKeyword; |
6620 if (externalKeyword != null && constKeyword != null && constKeyword.offset <
externalKeyword.offset) { | 6689 if (externalKeyword != null && constKeyword != null && constKeyword.offset <
externalKeyword.offset) { |
6621 reportError10(ParserErrorCode.EXTERNAL_AFTER_CONST, externalKeyword, []); | 6690 reportError11(ParserErrorCode.EXTERNAL_AFTER_CONST, externalKeyword, []); |
6622 } | 6691 } |
6623 if (externalKeyword != null && factoryKeyword != null && factoryKeyword.offs
et < externalKeyword.offset) { | 6692 if (externalKeyword != null && factoryKeyword != null && factoryKeyword.offs
et < externalKeyword.offset) { |
6624 reportError10(ParserErrorCode.EXTERNAL_AFTER_FACTORY, externalKeyword, [])
; | 6693 reportError11(ParserErrorCode.EXTERNAL_AFTER_FACTORY, externalKeyword, [])
; |
6625 } | 6694 } |
6626 return constKeyword; | 6695 return constKeyword; |
6627 } | 6696 } |
6628 | 6697 |
6629 /** | 6698 /** |
6630 * Validate that the given set of modifiers is appropriate for a field and ret
urn the 'final', | 6699 * Validate that the given set of modifiers is appropriate for a field and ret
urn the 'final', |
6631 * 'const' or 'var' keyword if there is one. | 6700 * 'const' or 'var' keyword if there is one. |
6632 * | 6701 * |
6633 * @param modifiers the modifiers being validated | 6702 * @param modifiers the modifiers being validated |
6634 * @return the 'final', 'const' or 'var' keyword associated with the field | 6703 * @return the 'final', 'const' or 'var' keyword associated with the field |
6635 */ | 6704 */ |
6636 Token validateModifiersForField(Modifiers modifiers) { | 6705 Token validateModifiersForField(Modifiers modifiers) { |
6637 if (modifiers.abstractKeyword != null) { | 6706 if (modifiers.abstractKeyword != null) { |
6638 reportError9(ParserErrorCode.ABSTRACT_CLASS_MEMBER, []); | 6707 reportError10(ParserErrorCode.ABSTRACT_CLASS_MEMBER, []); |
6639 } | 6708 } |
6640 if (modifiers.externalKeyword != null) { | 6709 if (modifiers.externalKeyword != null) { |
6641 reportError10(ParserErrorCode.EXTERNAL_FIELD, modifiers.externalKeyword, [
]); | 6710 reportError11(ParserErrorCode.EXTERNAL_FIELD, modifiers.externalKeyword, [
]); |
6642 } | 6711 } |
6643 if (modifiers.factoryKeyword != null) { | 6712 if (modifiers.factoryKeyword != null) { |
6644 reportError10(ParserErrorCode.NON_CONSTRUCTOR_FACTORY, modifiers.factoryKe
yword, []); | 6713 reportError11(ParserErrorCode.NON_CONSTRUCTOR_FACTORY, modifiers.factoryKe
yword, []); |
6645 } | 6714 } |
6646 Token staticKeyword = modifiers.staticKeyword; | 6715 Token staticKeyword = modifiers.staticKeyword; |
6647 Token constKeyword = modifiers.constKeyword; | 6716 Token constKeyword = modifiers.constKeyword; |
6648 Token finalKeyword = modifiers.finalKeyword; | 6717 Token finalKeyword = modifiers.finalKeyword; |
6649 Token varKeyword = modifiers.varKeyword; | 6718 Token varKeyword = modifiers.varKeyword; |
6650 if (constKeyword != null) { | 6719 if (constKeyword != null) { |
6651 if (finalKeyword != null) { | 6720 if (finalKeyword != null) { |
6652 reportError10(ParserErrorCode.CONST_AND_FINAL, finalKeyword, []); | 6721 reportError11(ParserErrorCode.CONST_AND_FINAL, finalKeyword, []); |
6653 } | 6722 } |
6654 if (varKeyword != null) { | 6723 if (varKeyword != null) { |
6655 reportError10(ParserErrorCode.CONST_AND_VAR, varKeyword, []); | 6724 reportError11(ParserErrorCode.CONST_AND_VAR, varKeyword, []); |
6656 } | 6725 } |
6657 if (staticKeyword != null && constKeyword.offset < staticKeyword.offset) { | 6726 if (staticKeyword != null && constKeyword.offset < staticKeyword.offset) { |
6658 reportError10(ParserErrorCode.STATIC_AFTER_CONST, staticKeyword, []); | 6727 reportError11(ParserErrorCode.STATIC_AFTER_CONST, staticKeyword, []); |
6659 } | 6728 } |
6660 } else if (finalKeyword != null) { | 6729 } else if (finalKeyword != null) { |
6661 if (varKeyword != null) { | 6730 if (varKeyword != null) { |
6662 reportError10(ParserErrorCode.FINAL_AND_VAR, varKeyword, []); | 6731 reportError11(ParserErrorCode.FINAL_AND_VAR, varKeyword, []); |
6663 } | 6732 } |
6664 if (staticKeyword != null && finalKeyword.offset < staticKeyword.offset) { | 6733 if (staticKeyword != null && finalKeyword.offset < staticKeyword.offset) { |
6665 reportError10(ParserErrorCode.STATIC_AFTER_FINAL, staticKeyword, []); | 6734 reportError11(ParserErrorCode.STATIC_AFTER_FINAL, staticKeyword, []); |
6666 } | 6735 } |
6667 } else if (varKeyword != null && staticKeyword != null && varKeyword.offset
< staticKeyword.offset) { | 6736 } else if (varKeyword != null && staticKeyword != null && varKeyword.offset
< staticKeyword.offset) { |
6668 reportError10(ParserErrorCode.STATIC_AFTER_VAR, staticKeyword, []); | 6737 reportError11(ParserErrorCode.STATIC_AFTER_VAR, staticKeyword, []); |
6669 } | 6738 } |
6670 return lexicallyFirst([constKeyword, finalKeyword, varKeyword]); | 6739 return lexicallyFirst([constKeyword, finalKeyword, varKeyword]); |
6671 } | 6740 } |
6672 | 6741 |
6673 /** | 6742 /** |
6674 * Validate that the given set of modifiers is appropriate for a local functio
n. | 6743 * Validate that the given set of modifiers is appropriate for a local functio
n. |
6675 * | 6744 * |
6676 * @param modifiers the modifiers being validated | 6745 * @param modifiers the modifiers being validated |
6677 */ | 6746 */ |
6678 void validateModifiersForFunctionDeclarationStatement(Modifiers modifiers) { | 6747 void validateModifiersForFunctionDeclarationStatement(Modifiers modifiers) { |
6679 if (modifiers.abstractKeyword != null || modifiers.constKeyword != null || m
odifiers.externalKeyword != null || modifiers.factoryKeyword != null || modifier
s.finalKeyword != null || modifiers.staticKeyword != null || modifiers.varKeywor
d != null) { | 6748 if (modifiers.abstractKeyword != null || modifiers.constKeyword != null || m
odifiers.externalKeyword != null || modifiers.factoryKeyword != null || modifier
s.finalKeyword != null || modifiers.staticKeyword != null || modifiers.varKeywor
d != null) { |
6680 reportError9(ParserErrorCode.LOCAL_FUNCTION_DECLARATION_MODIFIER, []); | 6749 reportError10(ParserErrorCode.LOCAL_FUNCTION_DECLARATION_MODIFIER, []); |
6681 } | 6750 } |
6682 } | 6751 } |
6683 | 6752 |
6684 /** | 6753 /** |
6685 * Validate that the given set of modifiers is appropriate for a getter, sette
r, or method. | 6754 * Validate that the given set of modifiers is appropriate for a getter, sette
r, or method. |
6686 * | 6755 * |
6687 * @param modifiers the modifiers being validated | 6756 * @param modifiers the modifiers being validated |
6688 */ | 6757 */ |
6689 void validateModifiersForGetterOrSetterOrMethod(Modifiers modifiers) { | 6758 void validateModifiersForGetterOrSetterOrMethod(Modifiers modifiers) { |
6690 if (modifiers.abstractKeyword != null) { | 6759 if (modifiers.abstractKeyword != null) { |
6691 reportError9(ParserErrorCode.ABSTRACT_CLASS_MEMBER, []); | 6760 reportError10(ParserErrorCode.ABSTRACT_CLASS_MEMBER, []); |
6692 } | 6761 } |
6693 if (modifiers.constKeyword != null) { | 6762 if (modifiers.constKeyword != null) { |
6694 reportError10(ParserErrorCode.CONST_METHOD, modifiers.constKeyword, []); | 6763 reportError11(ParserErrorCode.CONST_METHOD, modifiers.constKeyword, []); |
6695 } | 6764 } |
6696 if (modifiers.factoryKeyword != null) { | 6765 if (modifiers.factoryKeyword != null) { |
6697 reportError10(ParserErrorCode.NON_CONSTRUCTOR_FACTORY, modifiers.factoryKe
yword, []); | 6766 reportError11(ParserErrorCode.NON_CONSTRUCTOR_FACTORY, modifiers.factoryKe
yword, []); |
6698 } | 6767 } |
6699 if (modifiers.finalKeyword != null) { | 6768 if (modifiers.finalKeyword != null) { |
6700 reportError10(ParserErrorCode.FINAL_METHOD, modifiers.finalKeyword, []); | 6769 reportError11(ParserErrorCode.FINAL_METHOD, modifiers.finalKeyword, []); |
6701 } | 6770 } |
6702 if (modifiers.varKeyword != null) { | 6771 if (modifiers.varKeyword != null) { |
6703 reportError10(ParserErrorCode.VAR_RETURN_TYPE, modifiers.varKeyword, []); | 6772 reportError11(ParserErrorCode.VAR_RETURN_TYPE, modifiers.varKeyword, []); |
6704 } | 6773 } |
6705 Token externalKeyword = modifiers.externalKeyword; | 6774 Token externalKeyword = modifiers.externalKeyword; |
6706 Token staticKeyword = modifiers.staticKeyword; | 6775 Token staticKeyword = modifiers.staticKeyword; |
6707 if (externalKeyword != null && staticKeyword != null && staticKeyword.offset
< externalKeyword.offset) { | 6776 if (externalKeyword != null && staticKeyword != null && staticKeyword.offset
< externalKeyword.offset) { |
6708 reportError10(ParserErrorCode.EXTERNAL_AFTER_STATIC, externalKeyword, []); | 6777 reportError11(ParserErrorCode.EXTERNAL_AFTER_STATIC, externalKeyword, []); |
6709 } | 6778 } |
6710 } | 6779 } |
6711 | 6780 |
6712 /** | 6781 /** |
6713 * Validate that the given set of modifiers is appropriate for a getter, sette
r, or method. | 6782 * Validate that the given set of modifiers is appropriate for a getter, sette
r, or method. |
6714 * | 6783 * |
6715 * @param modifiers the modifiers being validated | 6784 * @param modifiers the modifiers being validated |
6716 */ | 6785 */ |
6717 void validateModifiersForOperator(Modifiers modifiers) { | 6786 void validateModifiersForOperator(Modifiers modifiers) { |
6718 if (modifiers.abstractKeyword != null) { | 6787 if (modifiers.abstractKeyword != null) { |
6719 reportError9(ParserErrorCode.ABSTRACT_CLASS_MEMBER, []); | 6788 reportError10(ParserErrorCode.ABSTRACT_CLASS_MEMBER, []); |
6720 } | 6789 } |
6721 if (modifiers.constKeyword != null) { | 6790 if (modifiers.constKeyword != null) { |
6722 reportError10(ParserErrorCode.CONST_METHOD, modifiers.constKeyword, []); | 6791 reportError11(ParserErrorCode.CONST_METHOD, modifiers.constKeyword, []); |
6723 } | 6792 } |
6724 if (modifiers.factoryKeyword != null) { | 6793 if (modifiers.factoryKeyword != null) { |
6725 reportError10(ParserErrorCode.NON_CONSTRUCTOR_FACTORY, modifiers.factoryKe
yword, []); | 6794 reportError11(ParserErrorCode.NON_CONSTRUCTOR_FACTORY, modifiers.factoryKe
yword, []); |
6726 } | 6795 } |
6727 if (modifiers.finalKeyword != null) { | 6796 if (modifiers.finalKeyword != null) { |
6728 reportError10(ParserErrorCode.FINAL_METHOD, modifiers.finalKeyword, []); | 6797 reportError11(ParserErrorCode.FINAL_METHOD, modifiers.finalKeyword, []); |
6729 } | 6798 } |
6730 if (modifiers.staticKeyword != null) { | 6799 if (modifiers.staticKeyword != null) { |
6731 reportError10(ParserErrorCode.STATIC_OPERATOR, modifiers.staticKeyword, []
); | 6800 reportError11(ParserErrorCode.STATIC_OPERATOR, modifiers.staticKeyword, []
); |
6732 } | 6801 } |
6733 if (modifiers.varKeyword != null) { | 6802 if (modifiers.varKeyword != null) { |
6734 reportError10(ParserErrorCode.VAR_RETURN_TYPE, modifiers.varKeyword, []); | 6803 reportError11(ParserErrorCode.VAR_RETURN_TYPE, modifiers.varKeyword, []); |
6735 } | 6804 } |
6736 } | 6805 } |
6737 | 6806 |
6738 /** | 6807 /** |
6739 * Validate that the given set of modifiers is appropriate for a top-level dec
laration. | 6808 * Validate that the given set of modifiers is appropriate for a top-level dec
laration. |
6740 * | 6809 * |
6741 * @param modifiers the modifiers being validated | 6810 * @param modifiers the modifiers being validated |
6742 */ | 6811 */ |
6743 void validateModifiersForTopLevelDeclaration(Modifiers modifiers) { | 6812 void validateModifiersForTopLevelDeclaration(Modifiers modifiers) { |
6744 if (modifiers.factoryKeyword != null) { | 6813 if (modifiers.factoryKeyword != null) { |
6745 reportError10(ParserErrorCode.FACTORY_TOP_LEVEL_DECLARATION, modifiers.fac
toryKeyword, []); | 6814 reportError11(ParserErrorCode.FACTORY_TOP_LEVEL_DECLARATION, modifiers.fac
toryKeyword, []); |
6746 } | 6815 } |
6747 if (modifiers.staticKeyword != null) { | 6816 if (modifiers.staticKeyword != null) { |
6748 reportError10(ParserErrorCode.STATIC_TOP_LEVEL_DECLARATION, modifiers.stat
icKeyword, []); | 6817 reportError11(ParserErrorCode.STATIC_TOP_LEVEL_DECLARATION, modifiers.stat
icKeyword, []); |
6749 } | 6818 } |
6750 } | 6819 } |
6751 | 6820 |
6752 /** | 6821 /** |
6753 * Validate that the given set of modifiers is appropriate for a top-level fun
ction. | 6822 * Validate that the given set of modifiers is appropriate for a top-level fun
ction. |
6754 * | 6823 * |
6755 * @param modifiers the modifiers being validated | 6824 * @param modifiers the modifiers being validated |
6756 */ | 6825 */ |
6757 void validateModifiersForTopLevelFunction(Modifiers modifiers) { | 6826 void validateModifiersForTopLevelFunction(Modifiers modifiers) { |
6758 validateModifiersForTopLevelDeclaration(modifiers); | 6827 validateModifiersForTopLevelDeclaration(modifiers); |
6759 if (modifiers.abstractKeyword != null) { | 6828 if (modifiers.abstractKeyword != null) { |
6760 reportError9(ParserErrorCode.ABSTRACT_TOP_LEVEL_FUNCTION, []); | 6829 reportError10(ParserErrorCode.ABSTRACT_TOP_LEVEL_FUNCTION, []); |
6761 } | 6830 } |
6762 if (modifiers.constKeyword != null) { | 6831 if (modifiers.constKeyword != null) { |
6763 reportError10(ParserErrorCode.CONST_CLASS, modifiers.constKeyword, []); | 6832 reportError11(ParserErrorCode.CONST_CLASS, modifiers.constKeyword, []); |
6764 } | 6833 } |
6765 if (modifiers.finalKeyword != null) { | 6834 if (modifiers.finalKeyword != null) { |
6766 reportError10(ParserErrorCode.FINAL_CLASS, modifiers.finalKeyword, []); | 6835 reportError11(ParserErrorCode.FINAL_CLASS, modifiers.finalKeyword, []); |
6767 } | 6836 } |
6768 if (modifiers.varKeyword != null) { | 6837 if (modifiers.varKeyword != null) { |
6769 reportError10(ParserErrorCode.VAR_RETURN_TYPE, modifiers.varKeyword, []); | 6838 reportError11(ParserErrorCode.VAR_RETURN_TYPE, modifiers.varKeyword, []); |
6770 } | 6839 } |
6771 } | 6840 } |
6772 | 6841 |
6773 /** | 6842 /** |
6774 * Validate that the given set of modifiers is appropriate for a field and ret
urn the 'final', | 6843 * Validate that the given set of modifiers is appropriate for a field and ret
urn the 'final', |
6775 * 'const' or 'var' keyword if there is one. | 6844 * 'const' or 'var' keyword if there is one. |
6776 * | 6845 * |
6777 * @param modifiers the modifiers being validated | 6846 * @param modifiers the modifiers being validated |
6778 * @return the 'final', 'const' or 'var' keyword associated with the field | 6847 * @return the 'final', 'const' or 'var' keyword associated with the field |
6779 */ | 6848 */ |
6780 Token validateModifiersForTopLevelVariable(Modifiers modifiers) { | 6849 Token validateModifiersForTopLevelVariable(Modifiers modifiers) { |
6781 validateModifiersForTopLevelDeclaration(modifiers); | 6850 validateModifiersForTopLevelDeclaration(modifiers); |
6782 if (modifiers.abstractKeyword != null) { | 6851 if (modifiers.abstractKeyword != null) { |
6783 reportError9(ParserErrorCode.ABSTRACT_TOP_LEVEL_VARIABLE, []); | 6852 reportError10(ParserErrorCode.ABSTRACT_TOP_LEVEL_VARIABLE, []); |
6784 } | 6853 } |
6785 if (modifiers.externalKeyword != null) { | 6854 if (modifiers.externalKeyword != null) { |
6786 reportError10(ParserErrorCode.EXTERNAL_FIELD, modifiers.externalKeyword, [
]); | 6855 reportError11(ParserErrorCode.EXTERNAL_FIELD, modifiers.externalKeyword, [
]); |
6787 } | 6856 } |
6788 Token constKeyword = modifiers.constKeyword; | 6857 Token constKeyword = modifiers.constKeyword; |
6789 Token finalKeyword = modifiers.finalKeyword; | 6858 Token finalKeyword = modifiers.finalKeyword; |
6790 Token varKeyword = modifiers.varKeyword; | 6859 Token varKeyword = modifiers.varKeyword; |
6791 if (constKeyword != null) { | 6860 if (constKeyword != null) { |
6792 if (finalKeyword != null) { | 6861 if (finalKeyword != null) { |
6793 reportError10(ParserErrorCode.CONST_AND_FINAL, finalKeyword, []); | 6862 reportError11(ParserErrorCode.CONST_AND_FINAL, finalKeyword, []); |
6794 } | 6863 } |
6795 if (varKeyword != null) { | 6864 if (varKeyword != null) { |
6796 reportError10(ParserErrorCode.CONST_AND_VAR, varKeyword, []); | 6865 reportError11(ParserErrorCode.CONST_AND_VAR, varKeyword, []); |
6797 } | 6866 } |
6798 } else if (finalKeyword != null) { | 6867 } else if (finalKeyword != null) { |
6799 if (varKeyword != null) { | 6868 if (varKeyword != null) { |
6800 reportError10(ParserErrorCode.FINAL_AND_VAR, varKeyword, []); | 6869 reportError11(ParserErrorCode.FINAL_AND_VAR, varKeyword, []); |
6801 } | 6870 } |
6802 } | 6871 } |
6803 return lexicallyFirst([constKeyword, finalKeyword, varKeyword]); | 6872 return lexicallyFirst([constKeyword, finalKeyword, varKeyword]); |
6804 } | 6873 } |
6805 | 6874 |
6806 /** | 6875 /** |
6807 * Validate that the given set of modifiers is appropriate for a class and ret
urn the 'abstract' | 6876 * Validate that the given set of modifiers is appropriate for a class and ret
urn the 'abstract' |
6808 * keyword if there is one. | 6877 * keyword if there is one. |
6809 * | 6878 * |
6810 * @param modifiers the modifiers being validated | 6879 * @param modifiers the modifiers being validated |
6811 */ | 6880 */ |
6812 void validateModifiersForTypedef(Modifiers modifiers) { | 6881 void validateModifiersForTypedef(Modifiers modifiers) { |
6813 validateModifiersForTopLevelDeclaration(modifiers); | 6882 validateModifiersForTopLevelDeclaration(modifiers); |
6814 if (modifiers.abstractKeyword != null) { | 6883 if (modifiers.abstractKeyword != null) { |
6815 reportError10(ParserErrorCode.ABSTRACT_TYPEDEF, modifiers.abstractKeyword,
[]); | 6884 reportError11(ParserErrorCode.ABSTRACT_TYPEDEF, modifiers.abstractKeyword,
[]); |
6816 } | 6885 } |
6817 if (modifiers.constKeyword != null) { | 6886 if (modifiers.constKeyword != null) { |
6818 reportError10(ParserErrorCode.CONST_TYPEDEF, modifiers.constKeyword, []); | 6887 reportError11(ParserErrorCode.CONST_TYPEDEF, modifiers.constKeyword, []); |
6819 } | 6888 } |
6820 if (modifiers.externalKeyword != null) { | 6889 if (modifiers.externalKeyword != null) { |
6821 reportError10(ParserErrorCode.EXTERNAL_TYPEDEF, modifiers.externalKeyword,
[]); | 6890 reportError11(ParserErrorCode.EXTERNAL_TYPEDEF, modifiers.externalKeyword,
[]); |
6822 } | 6891 } |
6823 if (modifiers.finalKeyword != null) { | 6892 if (modifiers.finalKeyword != null) { |
6824 reportError10(ParserErrorCode.FINAL_TYPEDEF, modifiers.finalKeyword, []); | 6893 reportError11(ParserErrorCode.FINAL_TYPEDEF, modifiers.finalKeyword, []); |
6825 } | 6894 } |
6826 if (modifiers.varKeyword != null) { | 6895 if (modifiers.varKeyword != null) { |
6827 reportError10(ParserErrorCode.VAR_TYPEDEF, modifiers.varKeyword, []); | 6896 reportError11(ParserErrorCode.VAR_TYPEDEF, modifiers.varKeyword, []); |
6828 } | 6897 } |
6829 } | 6898 } |
6830 } | 6899 } |
6831 | 6900 |
6832 /** | 6901 /** |
6833 * Instances of the class `SyntheticKeywordToken` implement a synthetic keyword
token. | 6902 * Instances of the class `SyntheticKeywordToken` implement a synthetic keyword
token. |
6834 */ | 6903 */ |
6835 class Parser_SyntheticKeywordToken extends KeywordToken { | 6904 class Parser_SyntheticKeywordToken extends KeywordToken { |
6836 /** | 6905 /** |
6837 * Initialize a newly created token to represent the given keyword. | 6906 * Initialize a newly created token to represent the given keyword. |
(...skipping 2385 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9223 if ("\n" == separator) { | 9292 if ("\n" == separator) { |
9224 _writer.print("\n"); | 9293 _writer.print("\n"); |
9225 indent(); | 9294 indent(); |
9226 } else if (i > 0) { | 9295 } else if (i > 0) { |
9227 _writer.print(separator); | 9296 _writer.print(separator); |
9228 } | 9297 } |
9229 _writer.print(tokens[i].lexeme); | 9298 _writer.print(tokens[i].lexeme); |
9230 } | 9299 } |
9231 } | 9300 } |
9232 } | 9301 } |
OLD | NEW |