blob: 4702bfd0147e75ea7e4e909e0dfc006d2f0506f1 [file] [log] [blame]
// 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();
}