--- a/PPGreedyRepeatingParser.st Fri Oct 03 01:59:10 2014 +0100
+++ b/PPGreedyRepeatingParser.st Fri Oct 03 02:33:08 2014 +0100
@@ -10,32 +10,32 @@
!PPGreedyRepeatingParser methodsFor:'parsing'!
-parseOn: aStream
- | start element elements positions |
- start := aStream position.
+parseOn: aPPContext
+ | memento element elements positions |
+ 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 ].
- positions := OrderedCollection with: aStream position.
- [ elements size < max and: [ (element := parser parseOn: aStream) isPetitFailure not ] ] whileTrue: [
+ positions := OrderedCollection with: aPPContext remember.
+ [ elements size < max and: [ (element := parser parseOn: aPPContext) isPetitFailure not ] ] whileTrue: [
elements addLast: element.
- positions addLast: aStream position ].
+ positions addLast: aPPContext remember ].
[ positions isEmpty ] whileFalse: [
- aStream position: positions last.
- element := limit parseOn: aStream.
+ aPPContext restore: positions last.
+ element := limit parseOn: aPPContext.
element isPetitFailure ifFalse: [
- aStream position: positions last.
+ aPPContext restore: positions last.
^ elements asArray ].
elements isEmpty ifTrue: [
- aStream position: start.
+ aPPContext restore: memento.
^ element ].
elements removeLast.
positions removeLast ].
- aStream position: start.
- ^ PPFailure message: 'overflow' at: start
+ aPPContext restore: memento.
+ ^ PPFailure message: 'overflow' context: aPPContext at: memento position
! !
!PPGreedyRepeatingParser class methodsFor:'documentation'!