blob: dff913a8a56ea78dc7bc92ef7db01c45513a1354 [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.
import 'causal_stacks/utils.dart';
main() async {
StackTrace trace = StackTrace.empty;
A.visible(() => trace = StackTrace.current);
await assertStack([
r'^#0 main.<anonymous closure>',
r'^#1 new A.visible',
r'^#2 main',
IGNORE_REMAINING_STACK,
], trace);
A.invisible(() => trace = StackTrace.current);
await assertStack([
r'^#0 main.<anonymous closure>',
r'^#1 main',
IGNORE_REMAINING_STACK,
], trace);
visible(() => trace = StackTrace.current);
await assertStack([
r'^#0 main.<anonymous closure>',
r'^#1 visible',
r'^#2 main',
IGNORE_REMAINING_STACK,
], trace);
invisible(() => trace = StackTrace.current);
await assertStack([
r'^#0 main.<anonymous closure>',
r'^#1 main',
IGNORE_REMAINING_STACK,
], trace);
visibleClosure(() => trace = StackTrace.current);
await assertStack([
r'^#0 main.<anonymous closure>',
r'^#1 visibleClosure.visibleInner',
r'^#2 visibleClosure',
r'^#3 main',
IGNORE_REMAINING_STACK,
], trace);
invisibleClosure(() => trace = StackTrace.current);
await assertStack([
r'^#0 main.<anonymous closure>',
r'^#1 invisibleClosure',
r'^#2 main',
IGNORE_REMAINING_STACK,
], trace);
}
class A {
A.visible(void Function() fun) {
fun();
}
@pragma('vm:invisible')
A.invisible(void Function() fun) {
fun();
}
}
void visible(void Function() fun) => fun();
@pragma('vm:invisible')
void invisible(void Function() fun) => fun();
void visibleClosure(void Function() fun) {
visibleInner() {
fun();
}
visibleInner();
}
void invisibleClosure(void Function() fun) {
@pragma('vm:invisible')
invisibleInner() {
fun();
}
invisibleInner();
}