| // Copyright (c) 2026, 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 'common/test_helper.dart'; | |
| // Make sure these variables are not removed by the tree shaker. | |
| @pragma('vm:entry-point') | |
| late final Function cleanBlock; | |
| @pragma('vm:entry-point') | |
| late final Function copyingBlock; | |
| @pragma('vm:entry-point') | |
| late final Function fullBlock; | |
| @pragma('vm:entry-point') | |
| late final Function fullBlockWithChain; | |
| Function genCleanBlock() { | |
| dynamic block(x) => x; | |
| return block; | |
| } | |
| Function genCopyingBlock() { | |
| final x = 'I could be copied into the block'; | |
| String block() => x; | |
| return block; | |
| } | |
| Function genFullBlock() { | |
| var x = 42; // I must captured in a context. | |
| int block() => x; | |
| x++; | |
| return block; | |
| } | |
| Function genFullBlockWithChain() { | |
| var x = 420; // I must captured in a context. | |
| int Function() outerBlock() { | |
| var y = 4200; | |
| int innerBlock() => x + y; | |
| y++; | |
| return innerBlock; | |
| } | |
| x++; | |
| return outerBlock(); | |
| } | |
| void script() { | |
| cleanBlock = genCleanBlock(); | |
| copyingBlock = genCopyingBlock(); | |
| fullBlock = genFullBlock(); | |
| fullBlockWithChain = genFullBlockWithChain(); | |
| } | |
| Future<void> main([List<String> args = const <String>[]]) { | |
| return startServiceTest(testeeBefore: script); | |
| } |