// Copyright (c) 2022, 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. /*member: foo1:ignore*/ @pragma('dart2js:tryInline') int foo1() => bar1(); /*member: foo2:ignore*/ @pragma('dart2js:tryInline') @pragma('dart2js:disable-inlining') int foo2() => bar2(); /*member: foo3:ignore*/ @pragma('dart2js:noInline') int foo3() => bar3(); /*member: bar1:ignore*/ int bar1() => 1; /*member: bar2:ignore*/ int bar2() => 2; /*member: bar3:ignore*/ int bar3() => 3; // All calls to `barN` are inlined because this improves size and performance. /*member: test1:function() { A.use(1, 2, 3); }*/ @pragma('dart2js:noInline') void test1() { use(bar1(), bar2(), bar3()); } // No calls to `barN` are inlined due to `disable-inlining`. /*member: test2:function() { A.use(A.bar1(), A.bar2(), A.bar3()); }*/ @pragma('dart2js:noInline') @pragma('dart2js:disable-inlining') void test2() { use(bar1(), bar2(), bar3()); } // `foo` and `bar1` are inlined. `foo2` is inlined, but the contained call to // `bar2` is not inlined due to `disable-inlining` on `foo2`. /*member: test3:function() { A.use(1, A.bar2(), A.foo3()); }*/ @pragma('dart2js:noInline') void test3() { use(foo1(), foo2(), foo3()); } // None of the `fooN` calls are inlined due to `disable-inlining`. /*member: test4:function() { A.use(A.foo1(), A.foo2(), A.foo3()); }*/ @pragma('dart2js:noInline') @pragma('dart2js:disable-inlining') void test4() { use(foo1(), foo2(), foo3()); } /*member: use:ignore*/ @pragma('dart2js:noInline') void use(int a, int b, int c) {} /*member: main:ignore*/ main() { test1(); test2(); test3(); test4(); }