parsers: Fix variable shadowing issue.
authorDavid Thompson <dthompson2@worcester.edu>
Mon, 19 Oct 2015 13:10:54 +0000 (09:10 -0400)
committerDavid Thompson <dthompson2@worcester.edu>
Mon, 19 Oct 2015 13:10:54 +0000 (09:10 -0400)
'parse-either' and 'parse-both' shadowed the 'stream' variable, causing
failure cases to sometimes return the wrong stream.  That is, a stream
that has consumed input characters, not the original stream.

* syntax-highlight/parsers.scm (parse-either, parse-both): Use
  'remainder' variable for leftover stream variables rather than
  shadowing 'stream'.

syntax-highlight/parsers.scm

index 5d08e45..41975d6 100644 (file)
@@ -89,20 +89,20 @@ PREDICATE is satisfied with the result."
   "Create a parser that tries to parse with FIRST or, if that fails,
 parses SECOND."
   (lambda (stream)
-    (let-values (((result stream) (first stream)))
+    (let-values (((result remaining) (first stream)))
       (if result
-          (values result stream)
+          (values result remaining)
           (second stream)))))
 
 (define (parse-both first second)
   "Create a parser that returns a pair of the results of the parsers
 FIRST and SECOND if both are successful."
   (lambda (stream)
-    (let-values (((result1 stream) (first stream)))
+    (let-values (((result1 remaining) (first stream)))
       (if result1
-          (let-values (((result2 stream) (second stream)))
+          (let-values (((result2 remaining) (second remaining)))
             (if result2
-                (values (cons result1 result2) stream)
+                (values (cons result1 result2) remaining)
                 (parse-fail stream)))
           (parse-fail stream)))))