Index: trunk/parse3.lisp
===================================================================
--- trunk/parse3.lisp	(revision trunk,10)
+++ trunk/parse3.lisp	(revision trunk,11)
@@ -4,5 +4,5 @@
     ,@body))
 
-(defmacro if-matcher-parser (input parser (next match)
+(defmacro if-matches-parser (input parser (next match)
 			     &body (&optional (then t) else))
   (declare (symbol parser next match))
@@ -66,9 +66,13 @@
 	  `(if-matches ,input ,head (,head-next ,head-match)
 	    (if-matches-sequence ,head-next ,tail (,next ,tail-match)
-	      (let ((,match (cons ,head-match (list ,tail-match))))
+	      (let ((,match (cons ,head-match ,tail-match)))
 		,then)
 	      ,else)
 	    ,else))
-	`(if-matches ,input ,head (,next ,match) ,then ,else))))
+	(with-gensyms (tail-match)
+	  `(if-matches ,input ,head (,next ,tail-match)
+	    (let ((,match (list ,tail-match)))
+	      ,then)
+	    ,else)))))
 
 (defmacro if-matches-eqcount (input count rule (next match)
@@ -149,5 +153,5 @@
 (defmacro if-matches (input rule (next match) &body (&optional (then t) else))
   (etypecase rule
-    (symbol `(if-matcher-parser ,input ,rule (,next ,match) ,then ,else))
+    (symbol `(if-matches-parser ,input ,rule (,next ,match) ,then ,else))
     (character `(if-matches-char ,input ,rule (,next ,match) ,then ,else))
     (string `(if-matches-string ,input ,rule (,next ,match) ,then ,else))
