diff --git a/books/bookvol9.pamphlet b/books/bookvol9.pamphlet
index 4a608b5..f49c843 100644
--- a/books/bookvol9.pamphlet
+++ b/books/bookvol9.pamphlet
@@ -8191,6 +8191,31 @@ of the symbol being parsed. The original list read:
\end{chunk}
+\defun{postType}{postType}
+\calls{postType}{postTran}
+\calls{postType}{unTuple}
+\begin{chunk}{defun postType}
+(defun |postType| (typ)
+ (let (source target)
+ (cond
+ ((and (pairp typ) (eq (qcar typ) '->) (pairp (qcdr typ))
+ (pairp (qcdr (qcdr typ))) (eq (qcdr (qcdr (qcdr typ))) nil))
+ (setq source (qcar (qcdr typ)))
+ (setq target (qcar (qcdr (qcdr typ))))
+ (cond
+ ((eq source '|constant|)
+ (list (list (|postTran| target)) '|constant|))
+ (t
+ (list (cons '|Mapping|
+ (cons (|postTran| target)
+ (|unTuple| (|postTran| source))))))))
+ ((and (pairp typ) (eq (qcar typ) '->)
+ (pairp (qcdr typ)) (eq (qcdr (qcdr typ)) nil))
+ (list (list '|Mapping| (|postTran| (qcar (qcdr typ))))))
+ (t (list (|postTran| typ))))))
+
+\end{chunk}
+
\defplist{:BF:}{postBigFloat}
\begin{chunk}{postvars}
(eval-when (eval load)
@@ -8355,6 +8380,36 @@ of the symbol being parsed. The original list read:
\end{chunk}
+\defun{postIteratorList}{postIteratorList}
+\calls{postIteratorList}{postTran}
+\calls{postIteratorList}{postInSeq}
+\calls{postIteratorList}{postIteratorList}
+\begin{chunk}{defun postIteratorList}
+(defun |postIteratorList| (args)
+ (let (z p y u a b)
+ (cond
+ ((pairp args)
+ (setq p (|postTran| (qcar args)))
+ (setq z (qcdr args))
+ (cond
+ ((and (pairp p) (eq (qcar p) 'in) (pairp (qcdr p))
+ (pairp (qcdr (qcdr p))) (eq (qcdr (qcdr (qcdr p))) nil))
+ (setq y (qcar (qcdr p)))
+ (setq u (qcar (qcdr (qcdr p))))
+ (cond
+ ((and (pairp u) (eq (qcar u) '|\||) (pairp (qcdr u))
+ (pairp (qcdr (qcdr u))) (eq (qcdr (qcdr (qcdr u))) nil))
+ (setq a (qcar (qcdr u)))
+ (setq b (qcar (qcdr (qcdr u))))
+ (cons (list 'in y (|postInSeq| a))
+ (cons (list '|\|| b)
+ (|postIteratorList| z))))
+ (t (cons (list 'in y (|postInSeq| u)) (|postIteratorList| z)))))
+ (t (cons p (|postIteratorList| z)))))
+ (t args))))
+
+\end{chunk}
+
\defplist{:}{postColon}
\begin{chunk}{postvars}
(eval-when (eval load)
@@ -8562,6 +8617,30 @@ of the symbol being parsed. The original list read:
\end{chunk}
+\defun{postDefArgs}{postDefArgs}
+\calls{postDefArgs}{postError}
+\calls{postDefArgs}{postDefArgs}
+\begin{chunk}{defun postDefArgs}
+(defun |postDefArgs| (args)
+ (let (a b)
+ (cond
+ ((null args) args)
+ ((and (pairp args) (pairp (qcar args)) (eq (qcar (qcar args)) '|:|)
+ (pairp (qcdr (qcar args))) (eq (qcdr (qcdr (qcar args))) nil))
+ (setq a (qcar (qcdr (qcar args))))
+ (setq b (qcdr args))
+ (cond
+ (b (|postError|
+ (list " Argument" a "of indefinite length must be last")))
+ ((or (atom a) (and (pairp a) (eq (qcar a) 'quote)))
+ a)
+ (t
+ (|postError|
+ (list " Argument" a "of indefinite length must be a name")))))
+ (t (cons (car args) (|postDefArgs| (cdr args)))))))
+
+\end{chunk}
+
\defplist{$=>$}{postExit}
\begin{chunk}{postvars}
(eval-when (eval load)
@@ -8623,6 +8702,22 @@ of the symbol being parsed. The original list read:
\end{chunk}
+\defun{postInSeq}{postInSeq}
+\calls{postInSeq}{postTranSegment}
+\calls{postInSeq}{tuple2List}
+\calls{postInSeq}{postTran}
+\begin{chunk}{defun postInSeq}
+(defun |postInSeq| (seq)
+ (cond
+ ((and (pairp seq) (eq (qcar seq) 'segment) (pairp (qcdr seq))
+ (pairp (qcdr (qcdr seq))) (eq (qcdr (qcdr (qcdr seq))) nil))
+ (|postTranSegment| (second seq) (third seq)))
+ ((and (pairp seq) (eq (qcar seq) '|@Tuple|))
+ (|tuple2List| (qcdr seq)))
+ (t (|postTran| seq))))
+
+\end{chunk}
+
\defplist{In}{postIn}
\begin{chunk}{postvars}
(eval-when (eval load)
@@ -14768,11 +14863,14 @@ if \verb|$InteractiveMode| then use a null outputstream
\getchunk{defun postComma}
\getchunk{defun postConstruct}
\getchunk{defun postDef}
+\getchunk{defun postDefArgs}
\getchunk{defun postError}
\getchunk{defun postExit}
\getchunk{defun postIf}
\getchunk{defun postin}
\getchunk{defun postIn}
+\getchunk{defun postInSeq}
+\getchunk{defun postIteratorList}
\getchunk{defun postJoin}
\getchunk{defun postMapping}
\getchunk{defun postMDef}
@@ -14794,6 +14892,7 @@ if \verb|$InteractiveMode| then use a null outputstream
\getchunk{defun postTransformCheck}
\getchunk{defun postTuple}
\getchunk{defun postTupleCollect}
+\getchunk{defun postType}
\getchunk{defun postWhere}
\getchunk{defun postWith}
\getchunk{defun preparse}
diff --git a/changelog b/changelog
index d33e9ab..ccdaac4 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,6 @@
+20110301 tpd src/axiom-website/patches.html 20110301.04.tpd.patch
+20110301 tpd src/interp/parsing.lisp treeshake compiler
+20110301 tpd books/bookvol9 treeshake compiler
20110301 tpd src/axiom-website/patches.html 20110301.03.tpd.patch
20110301 tpd src/interp/parsing.lisp treeshake compiler
20110301 tpd books/bookvol9 treeshake compiler
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index 7d469f7..1848530 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -3421,5 +3421,7 @@ books/bookvol9 treeshake compiler
books/bookvol9 treeshake compiler
20110301.03.tpd.patch
books/bookvol9 treeshake compiler
+20110301.04.tpd.patch
+books/bookvol9 treeshake compiler