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.
21 lines
199 B
Plaintext
21 lines
199 B
Plaintext
var a
|
|
var b
|
|
|
|
a = new Fiber {
|
|
IO.print(2)
|
|
b.run
|
|
IO.print("nope")
|
|
}
|
|
|
|
b = new Fiber {
|
|
IO.print(1)
|
|
a.run
|
|
IO.print(3)
|
|
}
|
|
|
|
b.call
|
|
// expect: 1
|
|
// expect: 2
|
|
// expect: 3
|
|
IO.print(4) // expect: 4
|