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 class Interceptors { | 5 class Interceptors { |
6 Compiler compiler; | 6 Compiler compiler; |
7 Interceptors(Compiler this.compiler); | 7 Interceptors(Compiler this.compiler); |
8 | 8 |
9 SourceString mapOperatorToMethodName(Operator op) { | 9 SourceString mapOperatorToMethodName(Operator op) { |
10 String name = op.source.stringValue; | 10 String name = op.source.stringValue; |
(...skipping 1001 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1012 | 1012 |
1013 void push(HInstruction instruction) { | 1013 void push(HInstruction instruction) { |
1014 add(instruction); | 1014 add(instruction); |
1015 stack.add(instruction); | 1015 stack.add(instruction); |
1016 } | 1016 } |
1017 | 1017 |
1018 HInstruction pop() { | 1018 HInstruction pop() { |
1019 return stack.removeLast(); | 1019 return stack.removeLast(); |
1020 } | 1020 } |
1021 | 1021 |
| 1022 void dup() { |
| 1023 stack.add(stack.last()); |
| 1024 } |
| 1025 |
1022 HBoolify popBoolified() { | 1026 HBoolify popBoolified() { |
1023 HBoolify boolified = new HBoolify(pop()); | 1027 HBoolify boolified = new HBoolify(pop()); |
1024 add(boolified); | 1028 add(boolified); |
1025 return boolified; | 1029 return boolified; |
1026 } | 1030 } |
1027 | 1031 |
1028 void visit(Node node) { | 1032 void visit(Node node) { |
1029 if (node !== null) node.accept(this); | 1033 if (node !== null) node.accept(this); |
1030 } | 1034 } |
1031 | 1035 |
(...skipping 1259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2291 | 2295 |
2292 void visitParenthesizedExpression(ParenthesizedExpression node) { | 2296 void visitParenthesizedExpression(ParenthesizedExpression node) { |
2293 visit(node.expression); | 2297 visit(node.expression); |
2294 } | 2298 } |
2295 | 2299 |
2296 visitOperator(Operator node) { | 2300 visitOperator(Operator node) { |
2297 // Operators are intercepted in their surrounding Send nodes. | 2301 // Operators are intercepted in their surrounding Send nodes. |
2298 unreachable(); | 2302 unreachable(); |
2299 } | 2303 } |
2300 | 2304 |
| 2305 visitCascade(Cascade node) { |
| 2306 visit(node.expression); |
| 2307 // Remove the result and reveal the duplicated receiver on the stack. |
| 2308 pop(); |
| 2309 } |
| 2310 |
| 2311 visitCascadeReceiver(CascadeReceiver node) { |
| 2312 visit(node.expression); |
| 2313 dup(); |
| 2314 } |
| 2315 |
2301 visitReturn(Return node) { | 2316 visitReturn(Return node) { |
2302 HInstruction value; | 2317 HInstruction value; |
2303 if (node.expression === null) { | 2318 if (node.expression === null) { |
2304 value = graph.addConstantNull(); | 2319 value = graph.addConstantNull(); |
2305 } else { | 2320 } else { |
2306 visit(node.expression); | 2321 visit(node.expression); |
2307 value = pop(); | 2322 value = pop(); |
2308 } | 2323 } |
2309 close(new HReturn(value)).addSuccessor(graph.exit); | 2324 close(new HReturn(value)).addSuccessor(graph.exit); |
2310 } | 2325 } |
(...skipping 713 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3024 false, | 3039 false, |
3025 <HInstruction>[target, input])); | 3040 <HInstruction>[target, input])); |
3026 return builder.pop(); | 3041 return builder.pop(); |
3027 } | 3042 } |
3028 | 3043 |
3029 HInstruction result() { | 3044 HInstruction result() { |
3030 flushLiterals(); | 3045 flushLiterals(); |
3031 return prefix; | 3046 return prefix; |
3032 } | 3047 } |
3033 } | 3048 } |
OLD | NEW |