| OLD | NEW | 
|---|
| 1 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file | 
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a | 
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. | 
| 4 | 4 | 
| 5 /** | 5 /** | 
| 6  * An event generating parser of Dart programs. This parser expects | 6  * An event generating parser of Dart programs. This parser expects | 
| 7  * all tokens in a linked list (aka a token stream). | 7  * all tokens in a linked list (aka a token stream). | 
| 8  * | 8  * | 
| 9  * The class [Scanner] is used to generate a token stream. See the | 9  * The class [Scanner] is used to generate a token stream. See the | 
| 10  * file scanner.dart. | 10  * file scanner.dart. | 
| (...skipping 912 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 923             token = parseArgumentOrIndexStar(token); | 923             token = parseArgumentOrIndexStar(token); | 
| 924           } else if ((info === PLUS_PLUS_INFO) || | 924           } else if ((info === PLUS_PLUS_INFO) || | 
| 925                      (info === MINUS_MINUS_INFO)) { | 925                      (info === MINUS_MINUS_INFO)) { | 
| 926             listener.handleUnaryPostfixAssignmentExpression(token); | 926             listener.handleUnaryPostfixAssignmentExpression(token); | 
| 927             token = token.next; | 927             token = token.next; | 
| 928           } else { | 928           } else { | 
| 929             token = listener.unexpected(token); | 929             token = listener.unexpected(token); | 
| 930           } | 930           } | 
| 931         } else if (info === IS_INFO) { | 931         } else if (info === IS_INFO) { | 
| 932           token = parseIsOperatorRest(token); | 932           token = parseIsOperatorRest(token); | 
|  | 933         } else if (info === AS_INFO) { | 
|  | 934           token = parseAsOperatorRest(token); | 
| 933         } else if (info === QUESTION_INFO) { | 935         } else if (info === QUESTION_INFO) { | 
| 934           token = parseConditionalExpressionRest(token); | 936           token = parseConditionalExpressionRest(token); | 
| 935         } else { | 937         } else { | 
| 936           // Left associative, so we recurse at the next higher | 938           // Left associative, so we recurse at the next higher | 
| 937           // precedence level. | 939           // precedence level. | 
| 938           token = parsePrecedenceExpression(token.next, level + 1, | 940           token = parsePrecedenceExpression(token.next, level + 1, | 
| 939                                             withoutCascades); | 941                                             withoutCascades); | 
| 940           listener.handleBinaryExpression(operator); | 942           listener.handleBinaryExpression(operator); | 
| 941         } | 943         } | 
| 942         info = token.info; | 944         info = token.info; | 
| (...skipping 406 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1349   Token parseIsOperatorRest(Token token) { | 1351   Token parseIsOperatorRest(Token token) { | 
| 1350     assert(optional('is', token)); | 1352     assert(optional('is', token)); | 
| 1351     Token operator = token; | 1353     Token operator = token; | 
| 1352     Token not = null; | 1354     Token not = null; | 
| 1353     if (optional('!', token.next)) { | 1355     if (optional('!', token.next)) { | 
| 1354       token = token.next; | 1356       token = token.next; | 
| 1355       not = token; | 1357       not = token; | 
| 1356     } | 1358     } | 
| 1357     token = parseType(token.next); | 1359     token = parseType(token.next); | 
| 1358     listener.handleIsOperator(operator, not, token); | 1360     listener.handleIsOperator(operator, not, token); | 
| 1359     if (optional('is', token)) { | 1361     if (optional('is', token) || optional('as', token)) { | 
| 1360       // The is-operator cannot be chained, but it can take part of | 1362       // The is- and as-operators cannot be chained, but they can take part of | 
| 1361       // expressions like: foo is Foo || foo is Bar. | 1363       // expressions like: foo is Foo || foo is Bar. | 
| 1362       listener.unexpected(token); | 1364       listener.unexpected(token); | 
| 1363     } | 1365     } | 
| 1364     return token; | 1366     return token; | 
| 1365   } | 1367   } | 
| 1366 | 1368 | 
|  | 1369   Token parseAsOperatorRest(Token token) { | 
|  | 1370     assert(optional('as', token)); | 
|  | 1371     Token operator = token; | 
|  | 1372     token = parseType(token.next); | 
|  | 1373     listener.handleAsOperator(operator, token); | 
|  | 1374     if (optional('is', token) || optional('as', token)) { | 
|  | 1375       // The is- and as-operators cannot be chained. | 
|  | 1376       listener.unexpected(token); | 
|  | 1377     } | 
|  | 1378     return token; | 
|  | 1379   } | 
|  | 1380 | 
| 1367   Token parseVariablesDeclaration(Token token) { | 1381   Token parseVariablesDeclaration(Token token) { | 
| 1368     token = parseVariablesDeclarationNoSemicolon(token); | 1382     token = parseVariablesDeclarationNoSemicolon(token); | 
| 1369     return expectSemicolon(token); | 1383     return expectSemicolon(token); | 
| 1370   } | 1384   } | 
| 1371 | 1385 | 
| 1372   Token parseVariablesDeclarationNoSemicolon(Token token) { | 1386   Token parseVariablesDeclarationNoSemicolon(Token token) { | 
| 1373     int count = 1; | 1387     int count = 1; | 
| 1374     listener.beginVariablesDeclaration(token); | 1388     listener.beginVariablesDeclaration(token); | 
| 1375     token = parseModifiers(token); | 1389     token = parseModifiers(token); | 
| 1376     token = parseTypeOpt(token); | 1390     token = parseTypeOpt(token); | 
| (...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1671     } | 1685     } | 
| 1672     listener.handleContinueStatement(hasTarget, continueKeyword, token); | 1686     listener.handleContinueStatement(hasTarget, continueKeyword, token); | 
| 1673     return expectSemicolon(token); | 1687     return expectSemicolon(token); | 
| 1674   } | 1688   } | 
| 1675 | 1689 | 
| 1676   Token parseEmptyStatement(Token token) { | 1690   Token parseEmptyStatement(Token token) { | 
| 1677     listener.handleEmptyStatement(token); | 1691     listener.handleEmptyStatement(token); | 
| 1678     return expectSemicolon(token); | 1692     return expectSemicolon(token); | 
| 1679   } | 1693   } | 
| 1680 } | 1694 } | 
| OLD | NEW | 
|---|