--- a/PPLazyRepeatingParser.st Fri Oct 03 01:59:10 2014 +0100
+++ b/PPLazyRepeatingParser.st Fri Oct 03 02:33:08 2014 +0100
@@ -10,22 +10,22 @@
!PPLazyRepeatingParser methodsFor:'parsing'!
-parseOn: aStream
- | start element elements |
- start := aStream position.
+parseOn: aPPContext
+ | memento element elements |
+ memento := aPPContext remember.
elements := OrderedCollection new.
[ elements size < min ] whileTrue: [
- (element := parser parseOn: aStream) isPetitFailure ifTrue: [
- aStream position: start.
+ (element := parser parseOn: aPPContext) isPetitFailure ifTrue: [
+ aPPContext restore: memento.
^ element ].
elements addLast: element ].
- [ self matchesLimitOn: aStream ] whileFalse: [
+ [ self matchesLimitOn: aPPContext ] whileFalse: [
elements size < max ifFalse: [
- aStream position: start.
- ^ PPFailure message: 'overflow' at: start ].
- element := parser parseOn: aStream.
+ aPPContext restore: memento.
+ ^ PPFailure message: 'overflow' context: aPPContext at: memento position ].
+ element := parser parseOn: aPPContext.
element isPetitFailure ifTrue: [
- aStream position: start.
+ aPPContext restore: memento.
^ element ].
elements addLast: element ].
^ elements asArray