(effect: Primitive)
| 511 | } |
| 512 | |
| 513 | evaluate(effect: Primitive): void { |
| 514 | if (this._exit) { |
| 515 | return |
| 516 | } else if (this._yielded !== undefined) { |
| 517 | const yielded = this._yielded as () => void |
| 518 | this._yielded = undefined |
| 519 | yielded() |
| 520 | } |
| 521 | const exit = this.runLoop(effect) |
| 522 | if (exit === Yield) { |
| 523 | return |
| 524 | } |
| 525 | |
| 526 | // the interruptChildren middlware is added in Micro.fork, so it can be |
| 527 | // tree-shaken if not used |
| 528 | const interruptChildren = fiberMiddleware.interruptChildren && fiberMiddleware.interruptChildren(this) |
| 529 | if (interruptChildren !== undefined) { |
| 530 | return this.evaluate(flatMap(interruptChildren, () => exit) as any) |
| 531 | } |
| 532 | |
| 533 | this._exit = exit |
| 534 | for (let i = 0; i < this._observers.length; i++) { |
| 535 | this._observers[i](exit) |
| 536 | } |
| 537 | this._observers.length = 0 |
| 538 | } |
| 539 | |
| 540 | runLoop(effect: Primitive): MicroExit<A, E> | Yield { |
| 541 | let yielding = false |
no test coverage detected