From c54f272296ba15f7b65c38363d077dc758065df7 Mon Sep 17 00:00:00 2001 From: "anton.bashirov" Date: Mon, 9 Sep 2024 22:25:46 +0400 Subject: [PATCH] fibers --- sdk/lib/isolate/isolate.dart | 2 +- tests/lib/fiber/fiber_exceptions.dart | 32 +++++++----- tests/lib/fiber/fiber_test.dart | 74 +++++++++++++++++++-------- 3 files changed, 73 insertions(+), 35 deletions(-) diff --git a/sdk/lib/isolate/isolate.dart b/sdk/lib/isolate/isolate.dart index e906cd76b4e7..d9362c34b5a0 100644 --- a/sdk/lib/isolate/isolate.dart +++ b/sdk/lib/isolate/isolate.dart @@ -89,7 +89,7 @@ final class Isolate { /// /// Some control messages require a specific capability to be passed along /// with the message (see [pauseCapability] and [terminateCapability]), - /// otherwise the message is ignored by the isolate. + /// otherwise the message is ignored by the isolate.ц final SendPort controlPort; /// Capability granting the ability to pause the isolate. diff --git a/tests/lib/fiber/fiber_exceptions.dart b/tests/lib/fiber/fiber_exceptions.dart index 2b4743f9c162..89961c38c13f 100644 --- a/tests/lib/fiber/fiber_exceptions.dart +++ b/tests/lib/fiber/fiber_exceptions.dart @@ -6,8 +6,6 @@ void main() { _run(mainException: true); _run(childException: true); _run(childException: true, mainCatchChild: true); - _run(mainYield: true); - _run(mainYield: true, mainCatchChild: true); _run(childYield: true); _run(childYield: true, mainCatchChild: true); } @@ -28,12 +26,16 @@ void _run({mainException = false, childException = false, mainCatchChild = false name: "child"); if (mainCatchChild) { final main = Fiber.main( - entry: () => Expect.equals( - Expect.throws(() { - Fiber.spawn(child); - Fiber.suspend(); - }).message, - "child")); + entry: () => Expect.equals( + Expect.throws( + () { + Fiber.spawn(child); + Fiber.suspend(); + }, + ).message, + "child", + ), + ); main.start(); return; } @@ -48,12 +50,14 @@ void _run({mainException = false, childException = false, mainCatchChild = false final child = Fiber.child(entry: () => Fiber.suspend(), name: "child"); if (mainCatchChild) { final main = Fiber.main( - entry: () => Expect.equals( - Expect.throws(() { - Fiber.spawn(child); - throw FiberException("main"); - }).message, - "main")); + entry: () => Expect.equals( + Expect.throws(() { + Fiber.spawn(child); + throw FiberException("main"); + }).message, + "main", + ), + ); main.start(); return; } diff --git a/tests/lib/fiber/fiber_test.dart b/tests/lib/fiber/fiber_test.dart index d66b9bb9e923..4824f50abcf9 100644 --- a/tests/lib/fiber/fiber_test.dart +++ b/tests/lib/fiber/fiber_test.dart @@ -10,29 +10,63 @@ var commonState = ""; void main() { mainFiber.start(); var variable = "variable"; - Fiber.main(entry: () { - Expect.equals("variable", variable); - variable = "after fiber"; - }).start(); + Fiber.main( + entry: () { + Expect.equals("variable", variable); + variable = "after fiber"; + }, + ).start(); Expect.equals("after fiber", variable); variable = "variable"; - Fiber.main(entry: () { - Expect.equals("variable", variable); - variable = "after main fiber"; - Fiber.spawn(Fiber.child( - entry: () { - Expect.equals("after main fiber", variable); - variable = "after child fiber"; - Fiber.suspend(); - Expect.equals("after child fiber after main fiber", variable); - variable = "finish"; - }, - name: "child")); - Expect.equals("after child fiber", variable); - variable = "after child fiber after main fiber"; - Fiber.suspend(); - }).start(); + Fiber.main( + entry: () { + Expect.equals("variable", variable); + variable = "after main fiber"; + Fiber.spawn( + Fiber.child( + entry: () { + Expect.equals("after main fiber", variable); + variable = "after child fiber"; + Fiber.suspend(); + Expect.equals("after child fiber after main fiber", variable); + variable = "finish"; + }, + name: "child", + ), + ); + Expect.equals("after child fiber", variable); + variable = "after child fiber after main fiber"; + Fiber.suspend(); + }, + ).start(); Expect.equals("finish", variable); + + variable = "level 1"; + Fiber.main( + entry: () { + Expect.equals("level 1", variable); + variable = "level 2"; + Fiber.spawn( + Fiber.child( + entry: () { + Expect.equals("level 2", variable); + variable = "level 3"; + Fiber.spawn( + Fiber.child( + name: "child", + entry: () { + Expect.equals("level 3", variable); + variable = "level 4"; + }, + ), + ); + }, + name: "child", + ), + ); + }, + ).start(); + Expect.equals("level 4", variable); } void mainEntry() {