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 final bool VERBOSE = false; | 5 final bool VERBOSE = false; |
6 | 6 |
7 class Listener { | 7 class Listener { |
8 void beginArguments(Token token) { | 8 void beginArguments(Token token) { |
9 } | 9 } |
10 | 10 |
11 void endArguments(int count, Token beginToken, Token endToken) { | 11 void endArguments(int count, Token beginToken, Token endToken) { |
12 } | 12 } |
13 | 13 |
14 void beginBlock(Token token) { | 14 void beginBlock(Token token) { |
15 } | 15 } |
16 | 16 |
17 void endBlock(int count, Token beginToken, Token endToken) { | 17 void endBlock(int count, Token beginToken, Token endToken) { |
18 } | 18 } |
19 | 19 |
| 20 void beginCascade(Token token) { |
| 21 } |
| 22 |
| 23 void endCascade() { |
| 24 } |
| 25 |
20 void beginClassBody(Token token) { | 26 void beginClassBody(Token token) { |
21 } | 27 } |
22 | 28 |
23 void endClassBody(int memberCount, Token beginToken, Token endToken) { | 29 void endClassBody(int memberCount, Token beginToken, Token endToken) { |
24 } | 30 } |
25 | 31 |
26 void beginClassDeclaration(Token token) { | 32 void beginClassDeclaration(Token token) { |
27 } | 33 } |
28 | 34 |
29 void endClassDeclaration(int interfacesCount, Token beginToken, | 35 void endClassDeclaration(int interfacesCount, Token beginToken, |
(...skipping 973 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1003 pushNode(new LiteralBool(token, (t, e) => handleOnError(t, e))); | 1009 pushNode(new LiteralBool(token, (t, e) => handleOnError(t, e))); |
1004 } | 1010 } |
1005 | 1011 |
1006 void handleLiteralNull(Token token) { | 1012 void handleLiteralNull(Token token) { |
1007 pushNode(new LiteralNull(token)); | 1013 pushNode(new LiteralNull(token)); |
1008 } | 1014 } |
1009 | 1015 |
1010 void handleBinaryExpression(Token token) { | 1016 void handleBinaryExpression(Token token) { |
1011 Node argument = popNode(); | 1017 Node argument = popNode(); |
1012 Node receiver = popNode(); | 1018 Node receiver = popNode(); |
1013 if (token.stringValue === '.') { | 1019 String tokenString = token.stringValue; |
| 1020 if (tokenString === '.' || tokenString === '..') { |
1014 if (argument is !Send) internalError(node: argument); | 1021 if (argument is !Send) internalError(node: argument); |
1015 if (argument.asSend().receiver !== null) internalError(node: argument); | 1022 if (argument.asSend().receiver !== null) internalError(node: argument); |
1016 if (argument is SendSet) internalError(node: argument); | 1023 if (argument is SendSet) internalError(node: argument); |
1017 pushNode(argument.asSend().copyWithReceiver(receiver)); | 1024 pushNode(argument.asSend().copyWithReceiver(receiver)); |
1018 } else { | 1025 } else { |
1019 NodeList arguments = new NodeList.singleton(argument); | 1026 NodeList arguments = new NodeList.singleton(argument); |
1020 pushNode(new Send(receiver, new Operator(token), arguments)); | 1027 pushNode(new Send(receiver, new Operator(token), arguments)); |
1021 } | 1028 } |
1022 } | 1029 } |
1023 | 1030 |
| 1031 void beginCascade(Token token) { |
| 1032 pushNode(new CascadeReceiver(popNode(), token)); |
| 1033 } |
| 1034 |
| 1035 void endCascade() { |
| 1036 pushNode(new Cascade(popNode())); |
| 1037 } |
| 1038 |
1024 void handleAssignmentExpression(Token token) { | 1039 void handleAssignmentExpression(Token token) { |
1025 Node arg = popNode(); | 1040 Node arg = popNode(); |
1026 Node node = popNode(); | 1041 Node node = popNode(); |
1027 Send send = node.asSend(); | 1042 Send send = node.asSend(); |
1028 if (send === null) internalError(node: node); | 1043 if (send === null) internalError(node: node); |
1029 if (!(send.isPropertyAccess || send.isIndex)) internalError(node: send); | 1044 if (!(send.isPropertyAccess || send.isIndex)) internalError(node: send); |
1030 if (send.asSendSet() !== null) internalError(node: send); | 1045 if (send.asSendSet() !== null) internalError(node: send); |
1031 NodeList arguments; | 1046 NodeList arguments; |
1032 if (send.isIndex) { | 1047 if (send.isIndex) { |
1033 Link<Node> link = new Link<Node>(arg); | 1048 Link<Node> link = new Link<Node>(arg); |
(...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1467 | 1482 |
1468 Node parse(DiagnosticListener diagnosticListener, | 1483 Node parse(DiagnosticListener diagnosticListener, |
1469 CompilationUnitElement element, | 1484 CompilationUnitElement element, |
1470 doParse(Parser parser)) { | 1485 doParse(Parser parser)) { |
1471 NodeListener listener = new NodeListener(diagnosticListener, element); | 1486 NodeListener listener = new NodeListener(diagnosticListener, element); |
1472 doParse(new Parser(listener)); | 1487 doParse(new Parser(listener)); |
1473 Node node = listener.popNode(); | 1488 Node node = listener.popNode(); |
1474 assert(listener.nodes.isEmpty()); | 1489 assert(listener.nodes.isEmpty()); |
1475 return node; | 1490 return node; |
1476 } | 1491 } |
OLD | NEW |