Skip to content

Commit 4913300

Browse files
committed
Fix consumed semantics
While there are no currently known bugs due to this, the consumed semantics are implemented incorrectly. Consumed should act as a Semigroup across binds (Writer).
1 parent 6a659ea commit 4913300

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

src/PureScript/CST/Parser/Monad.purs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,11 @@ initialParserState stream =
5151
, stream
5252
}
5353

54+
appendConsumed :: ParserState -> ParserState -> ParserState
55+
appendConsumed { consumed } state = case consumed, state.consumed of
56+
true, false -> state { consumed = true }
57+
_, _ -> state
58+
5459
newtype Parser a = Parser
5560
( forall r
5661
. Fn4
@@ -78,7 +83,7 @@ instance Apply Parser where
7883
more \_ ->
7984
runFn4 p2 state2 more resume
8085
( mkFn2 \state3 a ->
81-
runFn2 done state3 (f a)
86+
runFn2 done (state2 `appendConsumed` state3) (f a)
8287
)
8388
)
8489
)
@@ -96,7 +101,7 @@ instance Bind Parser where
96101
( mkFn2 \state2 a ->
97102
more \_ -> do
98103
let (Parser p2) = k a
99-
runFn4 p2 state2 more resume done
104+
runFn4 p2 (state1 `appendConsumed` state2) more resume done
100105
)
101106
)
102107

@@ -222,7 +227,7 @@ many (Parser p) = Parser
222227
runFn2 done state2 (Array.reverse (List.toUnfoldable acc))
223228
)
224229
( mkFn2 \state3 value ->
225-
runFn2 go (List.Cons value acc) state3
230+
runFn2 go (List.Cons value acc) (state2 `appendConsumed` state3)
226231
)
227232
runFn2 go List.Nil state1
228233
)

0 commit comments

Comments
 (0)