PPGreedyRepeatingParser.st
changeset 377 6112a403a52d
parent 166 749f1a5c6d3e
child 380 8fe3cb4e607f
--- 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'!