| Index: tests/compiler/dart2js/elide_callthrough_stub_test.dart
|
| diff --git a/tests/compiler/dart2js/elide_callthrough_stub_test.dart b/tests/compiler/dart2js/elide_callthrough_stub_test.dart
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..9366df99f1f893d965f640f522dab322b69e18c6
|
| --- /dev/null
|
| +++ b/tests/compiler/dart2js/elide_callthrough_stub_test.dart
|
| @@ -0,0 +1,60 @@
|
| +// Copyright (c) 2016, 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.
|
| +
|
| +// Check that calls through fields elide the call-through stub. This
|
| +// optimization is done by the simplifier, so inlining does not need to be
|
| +// enabled.
|
| +
|
| +import 'package:async_helper/async_helper.dart';
|
| +import 'package:expect/expect.dart';
|
| +import 'compiler_helper.dart';
|
| +
|
| +const String TEST1 = r'''
|
| +class W {
|
| + final Function _fun;
|
| + W(this._fun);
|
| + foo(zzz) => _fun(zzz); // this._fun$1(zzz) --> this._fun.call$1(zzz)
|
| +}
|
| +add1(x) => x + 1;
|
| +main() {
|
| + var w = new W(add1);
|
| + var x = w.foo(42);
|
| +}
|
| +''';
|
| +
|
| +const String TEST2 = r'''
|
| +class W {
|
| + final Function __fun;
|
| + Function get _fun => __fun;
|
| + W(this.__fun);
|
| + foo(zzz) => _fun(zzz); // this._fun$1(zzz) stays same.
|
| +}
|
| +add1(x) => x + 1;
|
| +main() {
|
| + var w = new W(add1);
|
| + var x = w.foo(42);
|
| +}
|
| +''';
|
| +
|
| +main() {
|
| + asyncTest(() => compileAll(TEST1).then((generated) {
|
| + // Direct call through field.
|
| + Expect.isTrue(generated.contains(r'this._fun.call$1(zzz)'));
|
| + // No stub.
|
| + Expect.isFalse(generated.contains(r'_fun$1:'));
|
| + // No call to stub.
|
| + Expect.isFalse(generated.contains(r'_fun$1('));
|
| + }));
|
| +
|
| + asyncTest(() => compileAll(TEST2).then((generated) {
|
| + // No call through field.
|
| + Expect.isFalse(generated.contains(r'this._fun.call$1(zzz)'));
|
| + // Call through stub.
|
| + Expect.isTrue(generated.contains(r'this._fun$1(zzz)'));
|
| + // Stub is generated.
|
| + Expect.isTrue(generated.contains(r'_fun$1:'));
|
| + // Call through getter (inside stub).
|
| + Expect.isTrue(generated.contains(r'get$_fun().call$1'));
|
| + }));
|
| +}
|
|
|