| Index: tests/language/fast_method_extraction_test.dart
|
| diff --git a/tests/language/fast_method_extraction_test.dart b/tests/language/fast_method_extraction_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..22177c75cc7953dfed097ded84c15ff61fe09ee2
|
| --- /dev/null
|
| +++ b/tests/language/fast_method_extraction_test.dart
|
| @@ -0,0 +1,104 @@
|
| +// 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.
|
| +// Test that fast method extraction returns correct closure.
|
| +
|
| +class A {
|
| + var f;
|
| + A(this.f);
|
| + foo() => 40 + f;
|
| +}
|
| +
|
| +class B {
|
| + var f;
|
| + B(this.f);
|
| + foo() => -40 - f;
|
| +}
|
| +
|
| +class X { }
|
| +
|
| +class C<T> {
|
| + foo(v) => v is T;
|
| +}
|
| +
|
| +class ChaA {
|
| + final magic;
|
| + ChaA(magic) : this.magic = magic;
|
| +
|
| + foo() {
|
| + Expect.isTrue(this is ChaA);
|
| + Expect.equals("magicA", magic);
|
| + return "A";
|
| + }
|
| +
|
| + bar() => foo;
|
| +}
|
| +
|
| +class ChaB extends ChaA {
|
| + ChaB(magic) : super(magic);
|
| +
|
| + foo() {
|
| + Expect.isTrue(this is ChaB);
|
| + Expect.equals("magicB", magic);
|
| + return "B";
|
| + }
|
| +}
|
| +
|
| +mono(a) {
|
| + var f = a.foo;
|
| + return f();
|
| +}
|
| +
|
| +poly(a) {
|
| + var f = a.foo;
|
| + return f();
|
| +}
|
| +
|
| +types(a, b) {
|
| + var f = a.foo;
|
| + Expect.isTrue(f(b));
|
| +}
|
| +
|
| +cha(a) {
|
| + var f = a.bar();
|
| + return f();
|
| +}
|
| +
|
| +extractFromNull() {
|
| + var f = (null).toString;
|
| + Expect.equals("null", f());
|
| +}
|
| +
|
| +main() {
|
| + var a = new A(2);
|
| + var b = new B(2);
|
| + for (var i = 0; i < 10000; i++) {
|
| + Expect.equals(42, mono(a));
|
| + }
|
| +
|
| + for (var i = 0; i < 10000; i++) {
|
| + Expect.equals(42, poly(a));
|
| + Expect.equals(-42, poly(b));
|
| + }
|
| +
|
| + var c = new C<X>();
|
| + var x = new X();
|
| + for (var i = 0; i < 10000; i++) {
|
| + types(c, x);
|
| + }
|
| +
|
| + var chaA = new ChaA("magicA");
|
| + for (var i = 0; i < 10000; i++) {
|
| + Expect.equals("A", cha(chaA));
|
| + }
|
| +
|
| + var chaB = new ChaB("magicB");
|
| + for (var i = 0; i < 10000; i++) {
|
| + Expect.equals("B", cha(chaB));
|
| + }
|
| +
|
| + for (var i = 0; i < 10000; i++) {
|
| + extractFromNull();
|
| + }
|
| +}
|
| +
|
|
|