| 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. | 7 * all tokens in a linked list. |
| 8 */ | 8 */ |
| 9 class Parser { | 9 class Parser { |
| 10 final Listener listener; | 10 final Listener listener; |
| (...skipping 906 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 917 tokenLevel = info.precedence; | 917 tokenLevel = info.precedence; |
| 918 } | 918 } |
| 919 } | 919 } |
| 920 return token; | 920 return token; |
| 921 } | 921 } |
| 922 | 922 |
| 923 Token parseCascadeExpression(Token token) { | 923 Token parseCascadeExpression(Token token) { |
| 924 listener.beginCascade(token); | 924 listener.beginCascade(token); |
| 925 assert(optional('..', token)); | 925 assert(optional('..', token)); |
| 926 Token cascadeOperator = token; | 926 Token cascadeOperator = token; |
| 927 token = token.next; |
| 927 if (optional('[', token)) { | 928 if (optional('[', token)) { |
| 928 token = parseArgumentOrIndexStar(token); | 929 token = parseArgumentOrIndexStar(token); |
| 929 } else if (isIdentifier(token)) { | 930 } else if (isIdentifier(token)) { |
| 930 token = parseSend(token); | 931 token = parseSend(token); |
| 931 listener.handleBinaryExpression(cascadeOperator); | 932 listener.handleBinaryExpression(cascadeOperator); |
| 932 } else { | 933 } else { |
| 933 return listener.unexpected(token); | 934 return listener.unexpected(token); |
| 934 } | 935 } |
| 935 Token mark; | 936 Token mark; |
| 936 do { | 937 do { |
| 937 mark = token; | 938 mark = token; |
| 938 if (optional('.', token)) { | 939 if (optional('.', token)) { |
| 939 Token period = token; | 940 Token period = token; |
| 940 token = parseSend(token); | 941 token = parseSend(token.next); |
| 941 listener.handleBinaryExpression(period); | 942 listener.handleBinaryExpression(period); |
| 942 } | 943 } |
| 943 token = parseArgumentOrIndexStar(token); | 944 token = parseArgumentOrIndexStar(token); |
| 944 } while (mark !== token); | 945 } while (mark !== token); |
| 945 | 946 |
| 946 if (token.info.precedence === ASSIGNMENT_PRECEDENCE) { | 947 if (token.info.precedence === ASSIGNMENT_PRECEDENCE) { |
| 947 Token assignment = token; | 948 Token assignment = token; |
| 948 token = parsePrecedenceExpression(token, CASCADE_PRECEDENCE + 1); | 949 token = parsePrecedenceExpression(token.next, CASCADE_PRECEDENCE + 1); |
| 949 listener.handleAssignmentExpression(assignment); | 950 listener.handleAssignmentExpression(assignment); |
| 950 } | 951 } |
| 951 listener.endCascade(); | 952 listener.endCascade(); |
| 952 return token; | 953 return token; |
| 953 } | 954 } |
| 954 | 955 |
| 955 Token parseUnaryExpression(Token token) { | 956 Token parseUnaryExpression(Token token) { |
| 956 String value = token.stringValue; | 957 String value = token.stringValue; |
| 957 // Prefix: | 958 // Prefix: |
| 958 if (value === '+') { | 959 if (value === '+') { |
| (...skipping 659 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1618 } | 1619 } |
| 1619 listener.handleContinueStatement(hasTarget, continueKeyword, token); | 1620 listener.handleContinueStatement(hasTarget, continueKeyword, token); |
| 1620 return expectSemicolon(token); | 1621 return expectSemicolon(token); |
| 1621 } | 1622 } |
| 1622 | 1623 |
| 1623 Token parseEmptyStatement(Token token) { | 1624 Token parseEmptyStatement(Token token) { |
| 1624 listener.handleEmptyStatement(token); | 1625 listener.handleEmptyStatement(token); |
| 1625 return expectSemicolon(token); | 1626 return expectSemicolon(token); |
| 1626 } | 1627 } |
| 1627 } | 1628 } |
| OLD | NEW |