( self: Cause.Cause<unknown> )
| 570 | * @internal |
| 571 | */ |
| 572 | const evaluateCause = ( |
| 573 | self: Cause.Cause<unknown> |
| 574 | ): [HashSet.HashSet<unknown>, Chunk.Chunk<Cause.Cause<unknown>>] => { |
| 575 | let cause: Cause.Cause<unknown> | undefined = self |
| 576 | const stack: Array<Cause.Cause<unknown>> = [] |
| 577 | let _parallel = HashSet.empty<unknown>() |
| 578 | let _sequential = Chunk.empty<Cause.Cause<unknown>>() |
| 579 | while (cause !== undefined) { |
| 580 | switch (cause._tag) { |
| 581 | case OpCodes.OP_EMPTY: { |
| 582 | if (stack.length === 0) { |
| 583 | return [_parallel, _sequential] |
| 584 | } |
| 585 | cause = stack.pop() |
| 586 | break |
| 587 | } |
| 588 | case OpCodes.OP_FAIL: { |
| 589 | _parallel = HashSet.add(_parallel, Chunk.make(cause._tag, cause.error)) |
| 590 | if (stack.length === 0) { |
| 591 | return [_parallel, _sequential] |
| 592 | } |
| 593 | cause = stack.pop() |
| 594 | break |
| 595 | } |
| 596 | case OpCodes.OP_DIE: { |
| 597 | _parallel = HashSet.add(_parallel, Chunk.make(cause._tag, cause.defect)) |
| 598 | if (stack.length === 0) { |
| 599 | return [_parallel, _sequential] |
| 600 | } |
| 601 | cause = stack.pop() |
| 602 | break |
| 603 | } |
| 604 | case OpCodes.OP_INTERRUPT: { |
| 605 | _parallel = HashSet.add(_parallel, Chunk.make(cause._tag, cause.fiberId as unknown)) |
| 606 | if (stack.length === 0) { |
| 607 | return [_parallel, _sequential] |
| 608 | } |
| 609 | cause = stack.pop() |
| 610 | break |
| 611 | } |
| 612 | case OpCodes.OP_SEQUENTIAL: { |
| 613 | switch (cause.left._tag) { |
| 614 | case OpCodes.OP_EMPTY: { |
| 615 | cause = cause.right |
| 616 | break |
| 617 | } |
| 618 | case OpCodes.OP_SEQUENTIAL: { |
| 619 | cause = sequential(cause.left.left, sequential(cause.left.right, cause.right)) |
| 620 | break |
| 621 | } |
| 622 | case OpCodes.OP_PARALLEL: { |
| 623 | cause = parallel( |
| 624 | sequential(cause.left.left, cause.right), |
| 625 | sequential(cause.left.right, cause.right) |
| 626 | ) |
| 627 | break |
| 628 | } |
| 629 | default: { |
no test coverage detected