| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 // IrNodes are kept in a separate library to have precise control over their | 5 // IrNodes are kept in a separate library to have precise control over their |
| 6 // dependencies on other parts of the system. | 6 // dependencies on other parts of the system. |
| 7 library dart2js.ir_nodes; | 7 library dart2js.ir_nodes; |
| 8 | 8 |
| 9 import '../constants/expressions.dart'; | 9 import '../constants/expressions.dart'; |
| 10 import '../constants/values.dart' as values show ConstantValue; | 10 import '../constants/values.dart' as values show ConstantValue; |
| (...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 322 /// and [target]'s implementation is invoked. | 322 /// and [target]'s implementation is invoked. |
| 323 /// | 323 /// |
| 324 /// As with [InvokeMethod], this can be used to invoke a method, operator, | 324 /// As with [InvokeMethod], this can be used to invoke a method, operator, |
| 325 /// getter, setter, or index getter/setter. | 325 /// getter, setter, or index getter/setter. |
| 326 /// | 326 /// |
| 327 /// If it is known that [target] does not use its receiver argument, then | 327 /// If it is known that [target] does not use its receiver argument, then |
| 328 /// [receiver] may refer to a null constant primitive. This happens for direct | 328 /// [receiver] may refer to a null constant primitive. This happens for direct |
| 329 /// invocations to intercepted methods, where the effective receiver is instead | 329 /// invocations to intercepted methods, where the effective receiver is instead |
| 330 /// passed as a formal parameter. | 330 /// passed as a formal parameter. |
| 331 /// | 331 /// |
| 332 /// TODO(sra): Review. A direct call to a method that is mixed into a native |
| 333 /// class will still require an explicit argument. |
| 334 /// |
| 332 /// When targeting Dart, this instruction is used to represent super calls. | 335 /// When targeting Dart, this instruction is used to represent super calls. |
| 333 /// Here, [receiver] must always be a reference to `this`, and [target] must be | 336 /// Here, [receiver] must always be a reference to `this`, and [target] must be |
| 334 /// a method that is available in the super class. | 337 /// a method that is available in the super class. |
| 335 class InvokeMethodDirectly extends Expression implements Invoke { | 338 class InvokeMethodDirectly extends Expression implements Invoke { |
| 336 Reference<Primitive> receiver; | 339 Reference<Primitive> receiver; |
| 337 final Element target; | 340 final Element target; |
| 338 final Selector selector; | 341 final Selector selector; |
| 339 final List<Reference<Primitive>> arguments; | 342 final List<Reference<Primitive>> arguments; |
| 340 final Reference<Continuation> continuation; | 343 final Reference<Continuation> continuation; |
| 341 | 344 |
| (...skipping 978 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1320 processTypeExpression(node); | 1323 processTypeExpression(node); |
| 1321 node.arguments.forEach(processReference); | 1324 node.arguments.forEach(processReference); |
| 1322 } | 1325 } |
| 1323 | 1326 |
| 1324 processNonTailThrow(NonTailThrow node) {} | 1327 processNonTailThrow(NonTailThrow node) {} |
| 1325 visitNonTailThrow(NonTailThrow node) { | 1328 visitNonTailThrow(NonTailThrow node) { |
| 1326 processNonTailThrow(node); | 1329 processNonTailThrow(node); |
| 1327 processReference(node.value); | 1330 processReference(node.value); |
| 1328 } | 1331 } |
| 1329 } | 1332 } |
| OLD | NEW |