@@ -2877,10 +2877,8 @@ export const deferredAwait = <A, E>(self: Deferred.Deferred<A, E>): Effect.Effec
2877
2877
return resume ( state . effect )
2878
2878
}
2879
2879
case DeferredOpCodes . OP_STATE_PENDING : {
2880
- pipe (
2881
- self . state ,
2882
- MutableRef . set ( deferred . pending ( [ resume , ...state . joiners ] ) )
2883
- )
2880
+ // we can push here as the internal state is mutable
2881
+ state . joiners . push ( resume )
2884
2882
return deferredInterruptJoiner ( self , resume )
2885
2883
}
2886
2884
}
@@ -2908,8 +2906,8 @@ export const deferredCompleteWith = dual<
2908
2906
return false
2909
2907
}
2910
2908
case DeferredOpCodes . OP_STATE_PENDING : {
2911
- pipe ( self . state , MutableRef . set ( deferred . done ( effect ) ) )
2912
- for ( let i = 0 ; i < state . joiners . length ; i ++ ) {
2909
+ MutableRef . set ( self . state , deferred . done ( effect ) )
2910
+ for ( let i = 0 , len = state . joiners . length ; i < len ; i ++ ) {
2913
2911
state . joiners [ i ] ( effect )
2914
2912
}
2915
2913
return true
@@ -3005,8 +3003,8 @@ export const deferredSync = dual<
3005
3003
export const deferredUnsafeDone = < A , E > ( self : Deferred . Deferred < A , E > , effect : Effect . Effect < A , E > ) : void => {
3006
3004
const state = MutableRef . get ( self . state )
3007
3005
if ( state . _tag === DeferredOpCodes . OP_STATE_PENDING ) {
3008
- pipe ( self . state , MutableRef . set ( deferred . done ( effect ) ) )
3009
- for ( let i = state . joiners . length - 1 ; i >= 0 ; i -- ) {
3006
+ MutableRef . set ( self . state , deferred . done ( effect ) )
3007
+ for ( let i = 0 , len = state . joiners . length ; i < len ; i ++ ) {
3010
3008
state . joiners [ i ] ( effect )
3011
3009
}
3012
3010
}
@@ -3019,10 +3017,11 @@ const deferredInterruptJoiner = <A, E>(
3019
3017
sync ( ( ) => {
3020
3018
const state = MutableRef . get ( self . state )
3021
3019
if ( state . _tag === DeferredOpCodes . OP_STATE_PENDING ) {
3022
- pipe (
3023
- self . state ,
3024
- MutableRef . set ( deferred . pending ( state . joiners . filter ( ( j ) => j !== joiner ) ) )
3025
- )
3020
+ const index = state . joiners . indexOf ( joiner )
3021
+ if ( index >= 0 ) {
3022
+ // we can splice here as the internal state is mutable
3023
+ state . joiners . splice ( index , 1 )
3024
+ }
3026
3025
}
3027
3026
} )
3028
3027
0 commit comments