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 SsaCodeGeneratorTask extends CompilerTask { | 5 class SsaCodeGeneratorTask extends CompilerTask { |
6 | 6 |
7 final JavaScriptBackend backend; | 7 final JavaScriptBackend backend; |
8 | 8 |
9 SsaCodeGeneratorTask(JavaScriptBackend backend) | 9 SsaCodeGeneratorTask(JavaScriptBackend backend) |
10 : this.backend = backend, | 10 : this.backend = backend, |
(...skipping 1495 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1506 world.registerDynamicInvocation(name, selector); | 1506 world.registerDynamicInvocation(name, selector); |
1507 } | 1507 } |
1508 } | 1508 } |
1509 push(jsPropertyCall(object, methodName, arguments), node); | 1509 push(jsPropertyCall(object, methodName, arguments), node); |
1510 } | 1510 } |
1511 | 1511 |
1512 Selector getOptimizedSelectorFor(HInvokeDynamic node, | 1512 Selector getOptimizedSelectorFor(HInvokeDynamic node, |
1513 Selector defaultSelector) { | 1513 Selector defaultSelector) { |
1514 // TODO(4434): For private members we need to use the untyped selector. | 1514 // TODO(4434): For private members we need to use the untyped selector. |
1515 if (defaultSelector.name.isPrivate()) return defaultSelector; | 1515 if (defaultSelector.name.isPrivate()) return defaultSelector; |
| 1516 // If [InvocationMirror.invokeOn] is called we must not create a typed |
| 1517 // selector based on the receiver type. |
| 1518 if (backend.compiler.enabledNoSuchMethod && |
| 1519 backend.compiler.enabledInvokeOn) { |
| 1520 return defaultSelector; |
| 1521 } |
1516 HType receiverHType = types[node.inputs[0]]; | 1522 HType receiverHType = types[node.inputs[0]]; |
1517 DartType receiverType = receiverHType.computeType(compiler); | 1523 DartType receiverType = receiverHType.computeType(compiler); |
1518 if (receiverType != null) { | 1524 if (receiverType != null) { |
1519 return new TypedSelector(receiverType, defaultSelector); | 1525 return new TypedSelector(receiverType, defaultSelector); |
1520 } else { | 1526 } else { |
1521 return defaultSelector; | 1527 return defaultSelector; |
1522 } | 1528 } |
1523 } | 1529 } |
1524 | 1530 |
1525 visitInvokeDynamicSetter(HInvokeDynamicSetter node) { | 1531 visitInvokeDynamicSetter(HInvokeDynamicSetter node) { |
(...skipping 1464 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2990 if (leftType.canBeNull() && rightType.canBeNull()) { | 2996 if (leftType.canBeNull() && rightType.canBeNull()) { |
2991 if (left.isConstantNull() || right.isConstantNull() || | 2997 if (left.isConstantNull() || right.isConstantNull() || |
2992 (leftType.isPrimitive() && leftType == rightType)) { | 2998 (leftType.isPrimitive() && leftType == rightType)) { |
2993 return '=='; | 2999 return '=='; |
2994 } | 3000 } |
2995 return null; | 3001 return null; |
2996 } else { | 3002 } else { |
2997 return '==='; | 3003 return '==='; |
2998 } | 3004 } |
2999 } | 3005 } |
OLD | NEW |