feat: implement symmetric coroutines with fiber.call and fiber.run distinction
Add new `fiber.call` method that remembers the calling fiber for symmetric transfer, while `fiber.run` now performs tail-call style switching without preserving the caller. Introduce re-entrancy guards preventing a fiber from being called multiple times, update all test fixtures to use the new API, and add comprehensive test coverage for call semantics including direct/indirect re-entrancy, value passing, and finished fiber errors.
This commit is contained in:
@@ -6,9 +6,9 @@ var fiber = new Fiber {
|
||||
IO.print("fiber 3")
|
||||
}
|
||||
|
||||
var result = fiber.run // expect: fiber 1
|
||||
IO.print("main 1") // expect: main 1
|
||||
result = fiber.run // expect: fiber 2
|
||||
IO.print("main 2") // expect: main 2
|
||||
result = fiber.run // expect: fiber 3
|
||||
IO.print("main 3") // expect: main 3
|
||||
var result = fiber.call // expect: fiber 1
|
||||
IO.print("main 1") // expect: main 1
|
||||
result = fiber.call // expect: fiber 2
|
||||
IO.print("main 2") // expect: main 2
|
||||
result = fiber.call // expect: fiber 3
|
||||
IO.print("main 3") // expect: main 3
|
||||
|
||||
Reference in New Issue
Block a user