| 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')); | 
| +  })); | 
| +} | 
|  |