dart-sdk/tests/dart2js_2/interface_type_optimization_test.dart
Joshua Litt 05ca544f15 [dart2js] Move tests/compiler/dart2js_extra to tests/dart2js_2.
Change-Id: Iaa0ca2b4f2d1b15f79ddca37834d3ed2497bc068
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149242
Commit-Queue: Joshua Litt <joshualitt@google.com>
Reviewed-by: Sigmund Cherem <sigmund@google.com>
2020-06-03 15:15:30 +00:00

45 lines
1.2 KiB
Dart

// Copyright (c) 2012, 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.
// @dart = 2.7
import "package:expect/expect.dart";
main() {
var a = new A();
Expect.equals(42, a.foo(42));
var b = new B();
Expect.equals(42 - 87, b.foo(42));
// Make sure we do not try to track the parameter type of the
// argument passed to test.
Expect.equals("is !A", test(0));
Expect.equals("is !A", test("fisk"));
// Passing b to test should lead to an exception because the string
// we end up passing to B.foo does not implement the - operator.
Expect.throws(() => test(b), (e) => e is NoSuchMethodError);
}
// TODO(kasperl): Make sure this does not get inlined.
test(x) {
if (x is A) {
// The selector we use for this call site has the receiver type A
// because of data flow analysis. We have to make sure that we
// realize that this does not rule out calling B.foo because B
// implements A.
return x.foo("hest");
} else {
return "is !A";
}
}
class A {
foo(var x) => x;
}
class B implements A {
foo(var x) => x - 87;
}