| Index: tests/language/issue10204_test.dart
|
| ===================================================================
|
| --- tests/language/issue10204_test.dart (revision 0)
|
| +++ tests/language/issue10204_test.dart (revision 0)
|
| @@ -0,0 +1,38 @@
|
| +// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
|
| +// for details. All rights reserved. Use of this source code is governed by a
|
| +// BSD-style license that can be found in the LICENSE file.
|
| +
|
| +// Regression test for dart2js that used to miscompile
|
| +// [A.visitInvokeDynamicMethod].
|
| +
|
| +import "package:expect/expect.dart";
|
| +
|
| +var a = 2;
|
| +
|
| +class Tupe {
|
| + const Tupe();
|
| + get instructionType => a == 2 ? this : new A();
|
| + refine(a, b) => '$a$b';
|
| +}
|
| +
|
| +class Node {
|
| + final selector = null;
|
| + var inputs = {"a": const Tupe(), "b": const Tupe() };
|
| + bool isCallOnInterceptor;
|
| +
|
| + getDartReceiver() {
|
| + return isCallOnInterceptor ? inputs["a"] : inputs["b"];
|
| + }
|
| +}
|
| +
|
| +class A {
|
| + visitInvokeDynamicMethod(node) {
|
| + var receiverType = node.getDartReceiver().instructionType;
|
| + return receiverType.refine(node.selector, node.selector);
|
| + }
|
| +}
|
| +
|
| +main() {
|
| + Expect.equals('nullnull',
|
| + [new A()].last.visitInvokeDynamicMethod(new Node()));
|
| +}
|
|
|