axiom-developer
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Axiom-developer] 20090428.01.tpd.patch (apply.boot, rewrite to lisp)


From: daly
Subject: [Axiom-developer] 20090428.01.tpd.patch (apply.boot, rewrite to lisp)
Date: Sat, 2 May 2009 20:07:56 -0500

The apply.boot code has been removed from the autoload list and
rewritten in lisp.
==================================================================
diff --git a/changelog b/changelog
index 5978543..48ca34d 100644
--- a/changelog
+++ b/changelog
@@ -1,3 +1,8 @@
+20090428 tpd src/axiom-website/patches.html 20090428.01.tpd.patch
+20090428 tpd src/interp/util.lisp remove autoload properites for apply
+20090428 tpd add src/interp/Makefile rewrite apply.boot to apply.lisp
+20090428 tpd src/interp/apply.lisp rewritten from boot
+20090428 tpd src/interp/apply.boot deleted, rewritten in lisp
 20090427 tpd src/axiom-website/patches.html 20090427.01.tpd.patch
 20090427 tpd books/tangle.lisp lisp version of tangle command
 20090420 tpd src/axiom-website/patches.html 20090420.01.tpd.patch
diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html
index f6181a8..5830890 100644
--- a/src/axiom-website/patches.html
+++ b/src/axiom-website/patches.html
@@ -1110,5 +1110,7 @@ bookvol10.3 convert FRAC to +-> syntax <br/>
 parsing.lisp consolidate parsing, remove autoload <br/>
 <a href="patches/20090427.01.tpd.patch">20090427.01.tpd.patch</a>
 tangle.lisp common lisp literate tangle function <br/>
+<a href="patches/20090428.01.tpd.patch">20090428.01.tpd.patch</a>
+apply.boot removed, rewritten into lisp, not autoloaded <br/>
  </body>
 </html>
diff --git a/src/interp/Makefile.pamphlet b/src/interp/Makefile.pamphlet
index 69b845e..c2d9a16 100644
--- a/src/interp/Makefile.pamphlet
+++ b/src/interp/Makefile.pamphlet
@@ -12,18 +12,6 @@
 \section{Notes}
 Notes for understanding this makefile:
 
-Postpar and Parse contain clisp stanzas which is common lisp code
-that is generated during the translation from boot to common lisp.
-We need to cache the clisp code so the boot compiler can be bootstrapped.
-
-If you create a system from scratch for a new platform you need to add
-``:oldboot'' to the *features* list BEFORE util.lisp is loaded.
-You also must load the postpar and parse files into the depsys
-along with the other depsys files.
-
-If these two things are done then a obootsys image can be bootstrapped
-to a new platform.
-
 IMPORTANT: all source file names in this Makefile must be lowercase
 This is for cross-platform compatibility and also makes getting
 them into Lisp much easier at the Makefile level.
@@ -247,7 +235,14 @@ OBJS= ${OUT}/vmlisp.${O}      ${OUT}/hash.${O} \
       ${OUT}/union.${O}       ${OUT}/daase.${O}   \
       ${OUT}/fortcall.${O} \
       ${OUT}/parsing.${O} ${OUT}/fnewmeta.${O} \
-      ${OUT}/postprop.${LISP}  
+      ${OUT}/postprop.${LISP}  \
+      ${OUT}/apply.${O}              ${OUT}/c-doc.${O}    \
+      ${OUT}/c-util.${O}      ${OUT}/profile.${O}  \
+      ${OUT}/category.${O}    ${OUT}/compiler.${O} \
+      ${OUT}/define.${O}      ${OUT}/functor.${O}  \
+      ${OUT}/info.${O}        ${OUT}/iterator.${O} \
+      ${OUT}/modemap.${O}     ${OUT}/nruncomp.${O} \
+      ${OUT}/package.${O}     ${OUT}/htcheck.${O}
 
 
 @
@@ -285,14 +280,7 @@ OPOBJS=
 The {\bf OCOBJS} list contains files from the old compiler. Again,
 ``old'' is meaningless. These files should probably be autoloaded.
 <<environment>>=
-OCOBJS=        ${AUTO}/apply.${O}      ${AUTO}/c-doc.${O}      \
-       ${AUTO}/c-util.${O}     ${AUTO}/profile.${O}    \
-       ${AUTO}/category.${O}   ${AUTO}/compiler.${O}   \
-       ${AUTO}/define.${O}     ${AUTO}/functor.${O}    \
-       ${AUTO}/info.${O}       ${AUTO}/iterator.${O}   \
-       ${AUTO}/modemap.${O}    ${AUTO}/nruncomp.${O}   \
-       ${AUTO}/package.${O}    ${AUTO}/htcheck.${O}
-
+OCOBJS=        
 @
 
 The {\bf BROBJS} list contains files only used by the hypertex
@@ -443,7 +431,7 @@ the document files. In make's traditional "pull to the 
target"
 fashion we need to provide a list of target dvi files.
 <<environment>>=
 DOCFILES=${DOC}/alql.boot.dvi \
-        ${DOC}/apply.boot.dvi ${DOC}/as.boot.dvi \
+        ${DOC}/as.boot.dvi \
         ${DOC}/astr.boot.dvi ${DOC}/ax.boot.dvi \
         ${DOC}/axext_l.lisp.dvi \
         ${DOC}/bc-matrix.boot.dvi ${DOC}/bc-misc.boot.dvi \
@@ -844,7 +832,7 @@ compiler::*suppress-compiler-notes* to true in order to 
reduce the noise.
 <<savesys>>=
 ${SAVESYS}:    ${DEPSYS} ${OBJS} ${OUT}/bookvol5.${O} ${OUT}/util.${O} \
                 ${OUT}/nocompil.${LISP} ${OUT}/sys-pkg.${LISP} \
-               ${OUTINTERP} ${OCOBJS} ${BROBJS} ${OUT}/obey.${O} \
+               ${OUTINTERP} ${BROBJS} ${OUT}/obey.${O} \
                ${OUT}/database.date ${INOBJS} ${ASCOMP} ${ASAUTO} \
                ${NAGBROBJS} ${TRANOBJS} \
                ${LOADSYS} \
@@ -878,7 +866,7 @@ ${SAVESYS}: ${DEPSYS} ${OBJS} ${OUT}/bookvol5.${O} 
${OUT}/util.${O} \
           '(quote ($(patsubst %, "%", ${ASCOMP})))'  \
           '(quote ($(patsubst %, "%", ${INOBJS}))))' \
           nil \
-          '(quote ($(patsubst %, "%", ${OCOBJS})))'  \
+          nil \
           '(quote ($(patsubst %, "%", ${BROBJS})))'  \
           '(quote ($(patsubst %, "%", ${TRANOBJS})))'  \
           '(quote ($(patsubst %, "%", ${NAGBROBJS})))'  \
@@ -924,51 +912,25 @@ ${DEBUGSYS}: ${MID}/debugsys.lisp
 
 \section{The Interpreter files}
 
-\subsection{apply.boot \cite{7}}
-<<apply.o (AUTO from OUT)>>=
-${AUTO}/apply.${O}: ${OUT}/apply.${O}
-       @ echo 9 making ${AUTO}/apply.${O} from ${OUT}/apply.${O}
-       @ cp ${OUT}/apply.${O} ${AUTO}
-
-@
 <<apply.o (OUT from MID)>>=
-${OUT}/apply.${O}: ${MID}/apply.clisp 
-       @ echo 10 making ${OUT}/apply.${O} from ${MID}/apply.clisp
+${OUT}/apply.${O}: ${MID}/apply.lisp 
+       @ echo 10 making ${OUT}/apply.${O} from ${MID}/apply.lisp
        @ (cd ${MID} ; \
          if [ -z "${NOISE}" ] ; then \
-          echo '(progn  (compile-file "${MID}/apply.clisp"' \
+          echo '(progn  (compile-file "${MID}/apply.lisp"' \
              ':output-file "${OUT}/apply.${O}") (${BYE}))' | ${DEPSYS} ; \
          else \
-          echo '(progn  (compile-file "${MID}/apply.clisp"' \
+          echo '(progn  (compile-file "${MID}/apply.lisp"' \
              ':output-file "${OUT}/apply.${O}") (${BYE}))' | ${DEPSYS} \
              >${TMP}/trace ; \
          fi )
 
 @
-<<apply.clisp (MID from IN)>>=
-${MID}/apply.clisp: ${IN}/apply.boot.pamphlet
-       @ echo 11 making ${MID}/apply.clisp from ${IN}/apply.boot.pamphlet
+<<apply.lisp (MID from IN)>>=
+${MID}/apply.lisp: ${IN}/apply.lisp.pamphlet
+       @ echo 11 making ${MID}/apply.lisp from ${IN}/apply.lisp.pamphlet
        @( cd ${MID} ; \
-          ${TANGLE} ${IN}/apply.boot.pamphlet >apply.boot ; \
-          if [ -z "${NOISE}" ] ; then \
-          echo '(progn (boottran::boottocl "apply.boot") (${BYE}))' \
-                | ${DEPSYS} ; \
-          else \
-          echo '(progn (boottran::boottocl "apply.boot") (${BYE}))' \
-                | ${DEPSYS} >${TMP}/trace ; \
-           fi ; \
-          rm apply.boot )
-
-@
-<<apply.boot.dvi (DOC from IN)>>=
-${DOC}/apply.boot.dvi: ${IN}/apply.boot.pamphlet 
-       @echo 12 making ${DOC}/apply.boot.dvi from ${IN}/apply.boot.pamphlet
-       @(cd ${DOC} ; \
-       cp ${IN}/apply.boot.pamphlet ${DOC} ; \
-       ${DOCUMENT} ${NOISE} apply.boot ; \
-       rm -f ${DOC}/apply.boot.pamphlet ; \
-       rm -f ${DOC}/apply.boot.tex ; \
-       rm -f ${DOC}/apply.boot )
+          ${TANGLE} ${IN}/apply.lisp.pamphlet >apply.lisp )
 
 @
 
@@ -1032,53 +994,6 @@ ${DOC}/bootfuns.lisp.dvi: ${IN}/bootfuns.lisp.pamphlet
 
 @
 
-\subsection{bootlex.lisp \cite{9}}
-<<bootlex.o (AUTO from OUT)>>=
-${AUTO}/bootlex.${O}: ${OUT}/bootlex.${O}
-       @ echo 19 making ${AUTO}/bootlex.${O} from ${OUT}/bootlex.${O}
-       @ cp ${OUT}/bootlex.${O} ${AUTO}
-
-@
-<<bootlex.o (OUT from MID)>>=
-${OUT}/bootlex.${O}: ${MID}/bootlex.lisp 
-       @ echo 20 making ${OUT}/bootlex.${O} from ${MID}/bootlex.lisp
-       @ ( cd ${MID} ; \
-         if [ -z "${NOISE}" ] ; then \
-          echo '(progn  (compile-file "${MID}/bootlex.lisp"' \
-             ':output-file "${OUT}/bootlex.${O}") (${BYE}))' | ${DEPSYS} ; \
-         else \
-          echo '(progn  (compile-file "${MID}/bootlex.lisp"' \
-             ':output-file "${OUT}/bootlex.${O}") (${BYE}))' | ${DEPSYS} \
-             >${TMP}/trace ; \
-         fi )
-         
-@
-<<bootlex.lisp (OUT from MID)>>=
-${OUT}/bootlex.${LISP}: ${MID}/bootlex.lisp
-       @ echo 21 making ${OUT}/bootlex.${LISP} from ${MID}/bootlex.lisp
-       @cp ${MID}/bootlex.lisp ${OUT}/bootlex.${LISP}
-
-@
-<<bootlex.lisp (MID from IN)>>=
-${MID}/bootlex.lisp: ${IN}/bootlex.lisp.pamphlet
-       @ echo 22 making ${MID}/bootlex.lisp from ${IN}/bootlex.lisp.pamphlet
-       @ ( cd ${MID} ; \
-         ${TANGLE} ${IN}/bootlex.lisp.pamphlet >bootlex.lisp )
-         
-@
-<<bootlex.lisp.dvi (DOC from IN)>>=
-${DOC}/bootlex.lisp.dvi: ${IN}/bootlex.lisp.pamphlet 
-       @echo 23 making ${DOC}/bootlex.lisp.dvi \
-                 from ${IN}/bootlex.lisp.pamphlet
-       @(cd ${DOC} ; \
-       cp ${IN}/bootlex.lisp.pamphlet ${DOC} ; \
-       ${DOCUMENT} ${NOISE} bootlex.lisp ; \
-       rm -f ${DOC}/bootlex.lisp.pamphlet ; \
-       rm -f ${DOC}/bootlex.lisp.tex ; \
-       rm -f ${DOC}/bootlex.lisp )
-
-@
-
 \subsection{cfuns.lisp \cite{10}}
 <<cfuns.o (OUT from MID)>>=
 ${OUT}/cfuns.${O}: ${MID}/cfuns.lisp
@@ -1277,53 +1192,6 @@ ${DOC}/debugsys.lisp.dvi: ${IN}/debugsys.lisp.pamphlet
 
 @
 
-\subsection{def.lisp \cite{15}}
-<<def.o (AUTO from OUT)>>=
-${AUTO}/def.${O}: ${OUT}/def.${O}
-       @ echo 41 making ${AUTO}/def.${O} from ${OUT}/def.${O}
-       @ cp ${OUT}/def.${O} ${AUTO}
-
-@
-<<def.o (OUT from MID)>>=
-${OUT}/def.${O}: ${MID}/def.lisp 
-       @ echo 42 making ${OUT}/def.${O} from ${MID}/def.lisp
-       @ ( cd ${MID} ; \
-         if [ -z "${NOISE}" ] ; then \
-          echo '(progn  (compile-file "${MID}/def.lisp"' \
-             ':output-file "${OUT}/def.${O}") (${BYE}))' | ${DEPSYS} ; \
-         else \
-          echo '(progn  (compile-file "${MID}/def.lisp"' \
-             ':output-file "${OUT}/def.${O}") (${BYE}))' | ${DEPSYS} \
-             >${TMP}/trace ; \
-         fi )
-         
-@
-<<def.lisp (OUT from MID)>>=
-${OUT}/def.${LISP}: ${MID}/def.lisp
-       @ echo 43 making ${OUT}/def.${LISP} from ${MID}/def.lisp
-       @ rm -f ${OUT}/def.${O}
-       @ cp ${MID}/def.lisp ${OUT}/def.${LISP}
-
-@
-<<def.lisp (MID from IN)>>=
-${MID}/def.lisp: ${IN}/def.lisp.pamphlet
-       @ echo 44 making ${MID}/def.lisp from ${IN}/def.lisp.pamphlet
-       @ ( cd ${MID} ; \
-         ${TANGLE} ${IN}/def.lisp.pamphlet >def.lisp )
-         
-@
-<<def.lisp.dvi (DOC from IN)>>=
-${DOC}/def.lisp.dvi: ${IN}/def.lisp.pamphlet 
-       @echo 45 making ${DOC}/def.lisp.dvi from ${IN}/def.lisp.pamphlet
-       @(cd ${DOC} ; \
-       cp ${IN}/def.lisp.pamphlet ${DOC} ; \
-       ${DOCUMENT} ${NOISE} def.lisp ; \
-       rm -f ${DOC}/def.lisp.pamphlet ; \
-       rm -f ${DOC}/def.lisp.tex ; \
-       rm -f ${DOC}/def.lisp )
-
-@
-
 \subsection{fname.lisp \cite{17}}
 <<fname.o (OUT from MID)>>=
 ${OUT}/fname.${O}: ${MID}/fname.lisp
@@ -1554,53 +1422,6 @@ ${DOC}/macros.lisp.dvi: ${IN}/macros.lisp.pamphlet
 
 @
 
-\subsection{metalex.lisp \cite{22}}
-<<metalex.o (AUTO from OUT)>>=
-${AUTO}/metalex.${O}: ${OUT}/metalex.${O}
-       @ echo 66 making ${AUTO}/metalex.${O} from ${OUT}/metalex.${O}
-       @ cp ${OUT}/metalex.${O} ${AUTO}
-
-@
-<<metalex.o (OUT from MID)>>=
-${OUT}/metalex.${O}: ${MID}/metalex.lisp 
-       @ echo 67 making ${OUT}/metalex.${O} from ${MID}/metalex.lisp
-       @ ( cd ${MID} ; \
-         if [ -z "${NOISE}" ] ; then \
-          echo '(progn  (compile-file "${MID}/metalex.lisp"' \
-             ':output-file "${OUT}/metalex.${O}") (${BYE}))' | ${DEPSYS} ; \
-         else \
-          echo '(progn  (compile-file "${MID}/metalex.lisp"' \
-             ':output-file "${OUT}/metalex.${O}") (${BYE}))' | ${DEPSYS} \
-             >${TMP}/trace ; \
-         fi )
-         
-@
-<<metalex.lisp (OUT from MID)>>=
-${OUT}/metalex.${LISP}: ${MID}/metalex.lisp
-       @ echo 68 making ${OUT}/metalex.${LISP} from ${MID}/metalex.lisp
-       @cp ${MID}/metalex.lisp ${OUT}/metalex.${LISP}
-
-@
-<<metalex.lisp (MID from IN)>>=
-${MID}/metalex.lisp: ${IN}/metalex.lisp.pamphlet
-       @ echo 69 making ${MID}/metalex.lisp from ${IN}/metalex.lisp.pamphlet
-       @ ( cd ${MID} ; \
-         ${TANGLE} ${IN}/metalex.lisp.pamphlet >metalex.lisp )
-         
-@
-<<metalex.lisp.dvi (DOC from IN)>>=
-${DOC}/metalex.lisp.dvi: ${IN}/metalex.lisp.pamphlet 
-       @echo 70  making ${DOC}/metalex.lisp.dvi \
-                  from ${IN}/metalex.lisp.pamphlet
-       @(cd ${DOC} ; \
-       cp ${IN}/metalex.lisp.pamphlet ${DOC} ; \
-       ${DOCUMENT} ${NOISE} metalex.lisp ; \
-       rm -f ${DOC}/metalex.lisp.pamphlet ; \
-       rm -f ${DOC}/metalex.lisp.tex ; \
-       rm -f ${DOC}/metalex.lisp )
-
-@
-
 \subsection{monitor.lisp \cite{24}}
 <<monitor.o (OUT from MID)>>=
 ${OUT}/monitor.${O}: ${MID}/monitor.lisp
@@ -1901,55 +1722,6 @@ ${DOC}/postprop.lisp.dvi: ${IN}/postprop.lisp.pamphlet
 
 @
 
-\subsection{preparse.lisp \cite{31}}
-<<preparse.o (AUTO from OUT)>>=
-${AUTO}/preparse.${O}: ${OUT}/preparse.${O}
-       @ echo 106 making ${AUTO}/preparse.${O} from ${OUT}/preparse.${O}
-       @ cp ${OUT}/preparse.${O} ${AUTO}
-
-@
-<<preparse.o (OUT from MID)>>=
-${OUT}/preparse.${O}: ${MID}/preparse.lisp 
-       @ echo 107 making ${OUT}/preparse.${O} from ${MID}/preparse.lisp
-       @ ( cd ${MID} ; \
-         if [ -z "${NOISE}" ] ; then \
-          echo '(progn  (compile-file "${MID}/preparse.lisp"' \
-            ':output-file "${OUT}/preparse.${O}") (${BYE}))' | ${DEPSYS} ; \
-         else \
-          echo '(progn  (compile-file "${MID}/preparse.lisp"' \
-            ':output-file "${OUT}/preparse.${O}") (${BYE}))' | ${DEPSYS} \
-            >${TMP}/trace ; \
-         fi )
-         
-@
-<<preparse.lisp (OUT from MID)>>=
-${OUT}/preparse.${LISP}: ${MID}/preparse.lisp
-       @ echo 108 making ${OUT}/preparse.${LISP} from ${MID}/preparse.lisp
-       @ rm -f ${OUT}/preparse.${O}
-       @ cp ${MID}/preparse.lisp ${OUT}/preparse.${LISP}
-
-@
-<<preparse.lisp (MID from IN)>>=
-${MID}/preparse.lisp: ${IN}/preparse.lisp.pamphlet
-       @ echo 109 making ${MID}/preparse.lisp \
-                   from ${IN}/preparse.lisp.pamphlet
-       @ ( cd ${MID} ; \
-         ${TANGLE} ${IN}/preparse.lisp.pamphlet >preparse.lisp )
-         
-@
-<<preparse.lisp.dvi (DOC from IN)>>=
-${DOC}/preparse.lisp.dvi: ${IN}/preparse.lisp.pamphlet 
-       @echo 110 making ${DOC}/preparse.lisp.dvi \
-                  from ${IN}/preparse.lisp.pamphlet
-       @(cd ${DOC} ; \
-       cp ${IN}/preparse.lisp.pamphlet ${DOC} ; \
-       ${DOCUMENT} ${NOISE} preparse.lisp ; \
-       rm -f ${DOC}/preparse.lisp.pamphlet ; \
-       rm -f ${DOC}/preparse.lisp.tex ; \
-       rm -f ${DOC}/preparse.lisp )
-
-@
-
 \subsection{property.lisp \cite{32}}
 <<property.lisp (OUT from MID)>>=
 ${OUT}/property.${LISP}: ${MID}/property.lisp 
@@ -5368,75 +5140,6 @@ ${DOC}/package.boot.dvi: ${IN}/package.boot.pamphlet
 
 @
 
-\subsection{parse.boot}
-note: this is used to build a bootsys on a virgin copy of the system
-notice that the file placed in \verb+${OUT}+ is a .lisp file
-this is to allow the depsys to be built even if the \verb+.${O}+ file does
-not exist on the new system
-<<parse.o (AUTO from OUT)>>=
-${AUTO}/parse.${O}: ${OUT}/parse.${O}
-       @ echo 374 making ${AUTO}/parse.${O} from ${OUT}/parse.${O}
-       @ cp ${OUT}/parse.${O} ${AUTO}
-
-@
-<<parse.o (OUT from MID)>>=
-${OUT}/parse.${O}: ${MID}/parse.clisp 
-       @ echo 375 making ${OUT}/parse.${O} from ${MID}/parse.clisp
-       @ (cd ${MID} ; \
-         if [ -z "${NOISE}" ] ; then \
-          echo '(progn  (compile-file "${MID}/parse.clisp"' \
-             ':output-file "${OUT}/parse.${O}") (${BYE}))' |  ${DEPSYS} ; \
-         else \
-          echo '(progn  (compile-file "${MID}/parse.clisp"' \
-             ':output-file "${OUT}/parse.${O}") (${BYE}))' |  ${DEPSYS} \
-             >${TMP}/trace ; \
-         fi )
-
-@
-Note that the {\bf parse.boot.pamphlet} file contains both the
-original {\bf boot} code and a saved copy of the {\bf parse.clisp}
-code. We need to keep the translated code around so we can bootstrap
-the system. In other words, we need this boot code translated so we
-can build the boot translator.
-
-{\bf note: if you change the boot code in parse.boot.pamphlet
-you must translate this code to lisp and store the resulting lisp
-code back into the parse.boot.pamphlet file. this is not automated.}
-<<parse.lisp (OUT from IN)>>=
-${OUT}/parse.${LISP}: ${IN}/parse.boot.pamphlet
-       @ echo 376 making ${OUT}/parse.${LISP} from ${IN}/parse.boot.pamphlet
-       @ rm -f ${OUT}/parse.${O}
-       @( cd ${OUT} ; \
-       ${TANGLE} -Rparse.clisp ${IN}/parse.boot.pamphlet >parse.${LISP} )
-
-@
-<<parse.clisp (MID from IN)>>=
-${MID}/parse.clisp: ${IN}/parse.boot.pamphlet
-       @ echo 377 making ${MID}/parse.clisp from ${IN}/parse.boot.pamphlet
-       @ (cd ${MID} ; \
-         ${TANGLE} ${IN}/parse.boot.pamphlet >parse.boot ; \
-         if [ -z "${NOISE}" ] ; then \
-          echo '(progn (boottran::boottocl "parse.boot") (${BYE}))' \
-                | ${DEPSYS} ; \
-         else \
-          echo '(progn (boottran::boottocl "parse.boot") (${BYE}))' \
-                | ${DEPSYS} >${TMP}/trace ; \
-         fi ; \
-         rm parse.boot )
-
-@
-<<parse.boot.dvi (DOC from IN)>>=
-${DOC}/parse.boot.dvi: ${IN}/parse.boot.pamphlet 
-       @echo 378 making ${DOC}/parse.boot.dvi from ${IN}/parse.boot.pamphlet
-       @(cd ${DOC} ; \
-       cp ${IN}/parse.boot.pamphlet ${DOC} ; \
-       ${DOCUMENT} ${NOISE} parse.boot ; \
-       rm -f ${DOC}/parse.boot.pamphlet ; \
-       rm -f ${DOC}/parse.boot.tex ; \
-       rm -f ${DOC}/parse.boot )
-
-@
-
 \subsection{pathname.boot}
 <<pathname.o (OUT from MID)>>=
 ${OUT}/pathname.${O}: ${MID}/pathname.clisp 
@@ -5481,90 +5184,6 @@ ${DOC}/pathname.boot.dvi: ${IN}/pathname.boot.pamphlet
 
 @
 
-\subsection{postpar.boot}
-note: this is used to build bootsys on a virgin copy of the system
-notice that the file placed in \verb+${OUT}+ is a .lisp file
-this allows the depsys to be built even if the \verb+.${O}+ file does
-not exist on the new system
-<<postpar.o (AUTO from OUT)>>=
-${AUTO}/postpar.${O}: ${OUT}/postpar.${O}
-       @ echo 382 making ${AUTO}/postpar.${O} from ${OUT}/postpar.${O}
-       @ cp ${OUT}/postpar.${O} ${AUTO}
-
-@
-Note that the {\bf postpar.boot.pamphlet} file contains both the
-original {\bf boot} code and a saved copy of the {\bf postpar.clisp}
-code. We need to keep the translated code around so we can bootstrap
-the system. In other words, we need this boot code translated so we
-can build the boot translator.
-
-{\bf note: if you change the boot code in postpar.boot.pamphlet
-you must translate this code to lisp and store the resulting lisp
-code back into the postpar.boot.pamphlet file. this is not automated.}
-<<postpar.lisp (OUT from IN)>>=
-${OUT}/postpar.${LISP}: ${IN}/postpar.boot.pamphlet
-       @ echo 383 making ${OUT}/postpar.${LISP} \
-                   from ${IN}/postpar.boot.pamphlet
-       @ rm -f ${OUT}/postpar.${O}
-       @( cd ${OUT} ; \
-       ${TANGLE} -Rpostpar.clisp ${IN}/postpar.boot.pamphlet \
-           >postpar.${LISP} )
-
-@
-<<postpar.o (OUT from MID)>>=
-${OUT}/postpar.${O}: ${MID}/postpar.clisp 
-       @ echo 384 making ${OUT}/postpar.${O} from ${MID}/postpar.clisp
-       @ (cd ${MID} ; \
-         if [ -z "${NOISE}" ] ; then \
-          echo '(progn  (compile-file "${MID}/postpar.clisp"' \
-             ':output-file "${OUT}/postpar.${O}") (${BYE}))' |  ${DEPSYS} ; \
-         else \
-          echo '(progn  (compile-file "${MID}/postpar.clisp"' \
-             ':output-file "${OUT}/postpar.${O}") (${BYE}))' \
-             |  ${DEPSYS} >${TMP}/trace ; \
-         fi )
-
-@
-NOTE: the .clisp file is copied back into the src directory making
-it is possible to create a new DEPSYS system from scratch for a 
-new platform. parse.clisp needs to be compiled in a depsys.
-two things need to be done to create an DEPSYS by hand:
-\begin{itemize}
-\item :oldboot must be on the *features* list BEFORE util.lisp is loaded
-\item  parse and postpar must be loaded along with the depsys files
-into a bare lisp system.
-\end{itemize}
-If these two things are done then a DEPSYS image can be bootstrapped
-to a new platform.
-
-<<postpar.clisp (MID from IN)>>=
-${MID}/postpar.clisp: ${IN}/postpar.boot.pamphlet
-       @ echo 385 making ${MID}/postpar.clisp from ${IN}/postpar.boot.pamphlet
-       @ (cd ${MID} ; \
-         ${TANGLE} ${IN}/postpar.boot.pamphlet >postpar.boot ; \
-         if [ -z "${NOISE}" ] ; then \
-          echo '(progn (boottran::boottocl "postpar.boot") (${BYE}))' \
-                | ${DEPSYS} ; \
-         else \
-          echo '(progn (boottran::boottocl "postpar.boot") (${BYE}))' \
-                | ${DEPSYS} >${TMP}/trace ; \
-         fi ; \
-         rm postpar.boot )
-
-@
-<<postpar.boot.dvi (DOC from IN)>>=
-${DOC}/postpar.boot.dvi: ${IN}/postpar.boot.pamphlet 
-       @echo 386 making ${DOC}/postpar.boot.dvi \
-                  from ${IN}/postpar.boot.pamphlet
-       @(cd ${DOC} ; \
-       cp ${IN}/postpar.boot.pamphlet ${DOC} ; \
-       ${DOCUMENT} ${NOISE} postpar.boot ; \
-       rm -f ${DOC}/postpar.boot.pamphlet ; \
-       rm -f ${DOC}/postpar.boot.tex ; \
-       rm -f ${DOC}/postpar.boot )
-
-@
-
 \subsection{regress.lisp}
 <<regress.o (OUT from MID)>>=
 ${OUT}/regress.${O}: ${MID}/regress.${LISP}
@@ -8391,10 +8010,8 @@ clean:
 <<alql.clisp (MID from IN)>>
 <<alql.boot.dvi (DOC from IN)>>
 
-<<apply.o (AUTO from OUT)>>
 <<apply.o (OUT from MID)>>
-<<apply.clisp (MID from IN)>>
-<<apply.boot.dvi (DOC from IN)>>
+<<apply.lisp (MID from IN)>>
 
 <<as.o (OUT from MID)>>
 <<as.clisp (MID from IN)>>
@@ -8441,12 +8058,6 @@ clean:
 <<bootfuns.lisp (MID from IN)>>
 <<bootfuns.lisp.dvi (DOC from IN)>>
 
-<<bootlex.o (AUTO from OUT)>>
-<<bootlex.o (OUT from MID)>>
-<<bootlex.lisp (OUT from MID)>>
-<<bootlex.lisp (MID from IN)>>
-<<bootlex.lisp.dvi (DOC from IN)>>
-
 <<br-con.o (AUTO from OUT)>>
 <<br-con.o (OUT from MID)>>
 <<br-con.clisp (MID from IN)>>
@@ -8572,12 +8183,6 @@ clean:
 <<debugsys.lisp (MID from IN)>>
 <<debugsys.lisp.dvi (DOC from IN)>>
 
-<<def.o (AUTO from OUT)>>
-<<def.o (OUT from MID)>>
-<<def.lisp (OUT from MID)>>
-<<def.lisp (MID from IN)>>
-<<def.lisp.dvi (DOC from IN)>>
-
 <<define.o (AUTO from OUT)>>
 <<define.o (OUT from MID)>>
 <<define.clisp (MID from IN)>>
@@ -8798,12 +8403,6 @@ clean:
 <<match.clisp (MID from IN)>>
 <<match.boot.dvi (DOC from IN)>>
 
-<<metalex.o (AUTO from OUT)>>
-<<metalex.o (OUT from MID)>>
-<<metalex.lisp (OUT from MID)>>
-<<metalex.lisp (MID from IN)>>
-<<metalex.lisp.dvi (DOC from IN)>>
-
 <<modemap.o (AUTO from OUT)>>
 <<modemap.o (OUT from MID)>>
 <<modemap.clisp (MID from IN)>>
@@ -8960,12 +8559,6 @@ clean:
 <<parini.clisp (MID from IN)>>
 <<parini.boot.dvi (DOC from IN)>>
 
-<<parse.o (AUTO from OUT)>>
-<<parse.o (OUT from MID)>>
-<<parse.lisp (OUT from IN)>>
-<<parse.clisp (MID from IN)>>
-<<parse.boot.dvi (DOC from IN)>>
-
 <<parsing.o (AUTO from OUT)>>
 <<parsing.o (OUT from MID)>>
 <<parsing.lisp (OUT from MID)>>
@@ -8992,23 +8585,11 @@ clean:
 <<posit.clisp (MID from IN)>>
 <<posit.boot.dvi (DOC from IN)>>
 
-<<postpar.o (AUTO from OUT)>>
-<<postpar.lisp (OUT from IN)>>
-<<postpar.o (OUT from MID)>>
-<<postpar.clisp (MID from IN)>>
-<<postpar.boot.dvi (DOC from IN)>>
-
 <<postprop.lisp (AUTO from OUT)>>
 <<postprop.lisp (OUT from MID)>>
 <<postprop.lisp (MID from IN)>>
 <<postprop.lisp.dvi (DOC from IN)>>
 
-<<preparse.o (AUTO from OUT)>>
-<<preparse.o (OUT from MID)>>
-<<preparse.lisp (OUT from MID)>>
-<<preparse.lisp (MID from IN)>>
-<<preparse.lisp.dvi (DOC from IN)>>
-
 <<profile.o (AUTO from OUT)>>
 <<profile.o (OUT from MID)>>
 <<profile.clisp (MID from IN)>>
@@ -9156,7 +8737,6 @@ pp
 \bibitem{4} {\bf \$SPAD/src/interp/setq.lisp.pamphlet}
 \bibitem{5} {\bf \$SPAD/src/interp/patches.lisp.pamphlet}
 \bibitem{6} {\bf www.aldor.org}
-\bibitem{7} {\bf \$SPAD/src/interp/apply.boot.pamphlet}
 \bibitem{8} {\bf \$SPAD/src/interp/bits.lisp.pamphlet}
 \bibitem{10} {\bf \$SPAD/src/interp/cfuns.lisp.pamphlet}
 \bibitem{11} {\bf \$SPAD/src/interp/comp.lisp.pamphlet}
diff --git a/src/interp/apply.boot.pamphlet b/src/interp/apply.boot.pamphlet
deleted file mode 100644
index 3ea39bb..0000000
--- a/src/interp/apply.boot.pamphlet
+++ /dev/null
@@ -1,270 +0,0 @@
-\documentclass{article}
-\usepackage{axiom}
-\begin{document}
-\title{\$SPAD/src/interp apply.boot}
-\author{The Axiom Team}
-\maketitle
-\begin{abstract}
-\end{abstract}
-\eject
-\tableofcontents
-\eject
-\section{License}
-<<license>>=
--- Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd.
--- All rights reserved.
---
--- Redistribution and use in source and binary forms, with or without
--- modification, are permitted provided that the following conditions are
--- met:
---
---     - Redistributions of source code must retain the above copyright
---       notice, this list of conditions and the following disclaimer.
---
---     - Redistributions in binary form must reproduce the above copyright
---       notice, this list of conditions and the following disclaimer in
---       the documentation and/or other materials provided with the
---       distribution.
---
---     - Neither the name of The Numerical ALgorithms Group Ltd. nor the
---       names of its contributors may be used to endorse or promote products
---       derived from this software without specific prior written permission.
---
--- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
--- IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
--- TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
--- PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
--- OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
--- EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
--- PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
--- PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
--- LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
--- NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
--- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-@
-<<*>>=
-<<license>>
-
-oldCompilerAutoloadOnceTrigger() == nil
-
-compAtomWithModemap(x,m,e,v) ==
-  Tl :=
-    [[transImplementation(x,map,fn),target,e]
-      for map in v | map is [[.,target],[.,fn]]] =>
-                                         --accept only monadic operators
-        T:= or/[t for (t:= [.,target,.]) in Tl | modeEqual(m,target)] => T
-        1=#(Tl:= [y for t in Tl | (y:= convert(t,m))]) => first Tl
-        0<#Tl and m=$NoValueMode => first Tl
-        nil
-
-transImplementation(op,map,fn) ==
---+
-  fn := genDeltaEntry [op,:map]
-  fn is ["XLAM",:.] => [fn]
-  ["call",fn]
-
-compApply(sig,varl,body,argl,m,e) ==
-  argTl:= [[.,.,e]:= comp(x,$EmptyMode,e) for x in argl]
-  contour:=
-    [Pair(x,[["mode",m'],["value",removeEnv comp(a,m',e)]])
-      for x in varl for m' in sig.source for a in argl]
-  code:= [["LAMBDA",varl,body'],:[T.expr for T in argTl]]
-  m':= resolve(m,sig.target)
-  body':= (comp(body,m',addContour(contour,e))).expr
-  [code,m',e]
-
-compToApply(op,argl,m,e) ==
-  T:= compNoStacking(op,$EmptyMode,e) or return nil
-  m1:= T.mode
-  T.expr is ["QUOTE", =m1] => nil
-  compApplication(op,argl,m,T.env,T)
-
-compApplication(op,argl,m,e,T) ==
-  T.mode is ['Mapping, retm, :argml] =>
-    #argl ^= #argml => nil
-    retm := resolve(m, retm)
-    retm = $Category or isCategoryForm(retm,e) => nil  -- not handled
-    argTl := [[.,.,e] := comp(x,m,e) or return "failed"
-              for x in argl for m in argml]
-    argTl = "failed" => nil
-    form:=
-      not (MEMBER(op,$formalArgList) or MEMBER(T.expr,$formalArgList)) and 
ATOM T.expr =>
-        nprefix := $prefix or
-        -- following needed for referencing local funs at capsule level
-           getAbbreviation($op,#rest $form)
-        [op',:[a.expr for a in argTl],"$"] where
-          op':= INTERN STRCONC(encodeItem nprefix,";",encodeItem T.expr)
-      ['call, ['applyFun, T.expr], :[a.expr for a in argTl]]
-    coerce([form, retm, e],resolve(retm,m))
-  op = 'elt => nil
-  eltForm := ['elt, op, :argl]
-  comp(eltForm, m, e)
-
-compFormWithModemap(form is [op,:argl],m,e,modemap) ==
-  [map:= [.,target,:.],[pred,impl]]:= modemap
-  -- this fails if the subsuming modemap is conditional
-  --impl is ['Subsumed,:.] => nil
-  if isCategoryForm(target,e) and isFunctor op then
-    [modemap,e]:= substituteIntoFunctorModemap(argl,modemap,e) or return nil
-    [map:= [.,target,:.],:cexpr]:= modemap
-  sv:=listOfSharpVars map
-  if sv then
-     -- SAY [ "compiling ", op, " in compFormWithModemap,
-     -- mode= ",map," sharp vars=",sv]
-    for x in argl for ss in $FormalMapVariableList repeat
-      if ss in sv then
-        [map:= [.,target,:.],:cexpr]:= modemap :=SUBST(x,ss,modemap)
-        -- SAY ["new map is",map]
-  not (target':= coerceable(target,m,e)) => nil
-  map:= [target',:rest map]
-  [f,Tl,sl]:= compApplyModemap(form,modemap,e,nil) or return nil
-
-  --generate code; return
-  T:=
-    [x',m',e'] where
-      m':= SUBLIS(sl,map.(1))
-      x':=
-        form':= [f,:[t.expr for t in Tl]]
-        m'=$Category or isCategoryForm(m',e) => form'
-        -- try to deal with new-style Unions where we know the conditions
-        op = "elt" and f is ['XLAM,:.] and IDENTP(z:=CAR argl) and
-          (c:=get(z,'condition,e)) and
-            c is [['case,=z,c1]] and
-              (c1 is ['_:,=(CADR argl),=m] or EQ(c1,CADR argl) ) =>
--- first is a full tag, as placed by getInverseEnvironment
--- second is what getSuccessEnvironment will place there
-                ["CDR",z]
-        ["call",:form']
-      e':=
-        Tl => (LAST Tl).env
-        e
-  convert(T,m)
-
--- This version tends to give problems with #1 and categories
--- applyMapping([op,:argl],m,e,ml) ==
---   #argl^=#ml-1 => nil
---   mappingHasCategoryTarget :=
---     isCategoryForm(first ml,e) => --is op a functor?
---       form:= [op,:argl']
---       pairlis:= [[v,:a] for a in argl for v in $FormalMapVariableList]
---       ml:= SUBLIS(pairlis,ml)
---       true
---     false
---   argl':=
---     [T.expr for x in argl for m' in rest ml] where
---       T() == [.,.,e]:= comp(x,m',e) or return "failed"
---   if argl'="failed" then return nil
---   mappingHasCategoryTarget => convert([form,first ml,e],m)
---   form:=
---     not MEMBER(op,$formalArgList) and ATOM op =>
---       [op',:argl',"$"] where
---         op':= INTERN STRCONC(STRINGIMAGE $prefix,";",STRINGIMAGE op)
---     ["call",["applyFun",op],:argl']
---   pairlis:= [[v,:a] for a in argl' for v in $FormalMapVariableList]
---   convert([form,SUBLIS(pairlis,first ml),e],m)
-
-applyMapping([op,:argl],m,e,ml) ==
-  #argl^=#ml-1 => nil
-  isCategoryForm(first ml,e) =>
-                                --is op a functor?
-    pairlis:= [[v,:a] for a in argl for v in $FormalMapVariableList]
-    ml' := SUBLIS(pairlis, ml)
-    argl':=
-      [T.expr for x in argl for m' in rest ml'] where
-        T() == [.,.,e]:= comp(x,m',e) or return "failed"
-    if argl'="failed" then return nil
-    form:= [op,:argl']
-    convert([form,first ml',e],m)
-  argl':=
-    [T.expr for x in argl for m' in rest ml] where
-      T() == [.,.,e]:= comp(x,m',e) or return "failed"
-  if argl'="failed" then return nil
-  form:=
-    not MEMBER(op,$formalArgList) and ATOM op and not get(op,'value,e) =>
-      nprefix := $prefix or
-   -- following needed for referencing local funs at capsule level
-        getAbbreviation($op,#rest $form)
-      [op',:argl',"$"] where
-        op':= INTERN STRCONC(encodeItem nprefix,";",encodeItem op)
-    ['call,['applyFun,op],:argl']
-  pairlis:= [[v,:a] for a in argl' for v in $FormalMapVariableList]
-  convert([form,SUBLIS(pairlis,first ml),e],m)
-
---% APPLY MODEMAPS
-
-compApplyModemap(form,modemap,$e,sl) ==
-  [op,:argl] := form                   --form to be compiled
-  [[mc,mr,:margl],:fnsel] := modemap   --modemap we are testing
-
-  -- $e     is the current environment
-  -- sl     substitution list, nil means bottom-up, otherwise top-down
-
-  -- 0.  fail immediately if #argl=#margl
-
-  if #argl^=#margl then return nil
-
-  -- 1.  use modemap to evaluate arguments, returning failed if
-  --     not possible
-
-  lt:=
-    [[.,m',$e]:=
-      comp(y,g,$e) or return "failed" where
-        g:= SUBLIS(sl,m) where
-            sl:= pmatchWithSl(m',m,sl) for y in argl for m in margl]
-  lt="failed" => return nil
-
-  -- 2.  coerce each argument to final domain, returning failed
-  --     if not possible
-
-  lt':= [coerce(y,d) or return "failed"
-         for y in lt for d in SUBLIS(sl,margl)]
-  lt'="failed" => return nil
-
-  -- 3.  obtain domain-specific function, if possible, and return
-
-  --$bindings is bound by compMapCond
-  [f,$bindings]:= compMapCond(op,mc,sl,fnsel) or return nil
-
---+ can no longer trust what the modemap says for a reference into
---+ an exterior domain (it is calculating the displacement based on view
---+ information which is no longer valid; thus ignore this index and
---+ store the signature instead.
-
---$NRTflag=true and f is [op1,d,.] and NE(d,'$) and MEMBER(op1,'(ELT CONST)) =>
-  f is [op1,d,.] and MEMBER(op1,'(ELT CONST Subsumed)) =>
-    [genDeltaEntry [op,:modemap],lt',$bindings]
-  [f,lt',$bindings]
-
-compMapCond(op,mc,$bindings,fnsel) ==
-  or/[compMapCond'(u,op,mc,$bindings) for u in fnsel]
-
-compMapCond'([cexpr,fnexpr],op,dc,bindings) ==
-  compMapCond''(cexpr,dc) => compMapCondFun(fnexpr,op,dc,bindings)
-  stackMessage ["not known that",'%b,dc,'%d,"has",'%b,cexpr,'%d]
-
-compMapCond''(cexpr,dc) ==
-  cexpr=true => true
-  --cexpr = "true" => true
-  cexpr is ["AND",:l] => and/[compMapCond''(u,dc) for u in l]
-  cexpr is ["OR",:l] => or/[compMapCond''(u,dc) for u in l]
-  cexpr is ["not",u] => not compMapCond''(u,dc)
-  cexpr is ["has",name,cat] => (knownInfo cexpr => true; false)
-        --for the time being we'll stop here - shouldn't happen so far
-        --$disregardConditionIfTrue => true
-        --stackSemanticError(("not known that",'%b,name,
-        -- '%d,"has",'%b,cat,'%d),nil)
-  --now it must be an attribute
-  MEMBER(["ATTRIBUTE",dc,cexpr],get("$Information","special",$e)) => true
-  --for the time being we'll stop here - shouldn't happen so far
-  stackMessage ["not known that",'%b,dc,'%d,"has",'%b,cexpr,'%d]
-  false
-
-compMapCondFun(fnexpr,op,dc,bindings) == [fnexpr,bindings]
-
-@
-\eject
-\begin{thebibliography}{99}
-\bibitem{1} nothing
-\end{thebibliography}
-\end{document}
diff --git a/src/interp/apply.lisp.pamphlet b/src/interp/apply.lisp.pamphlet
new file mode 100644
index 0000000..09e326d
--- /dev/null
+++ b/src/interp/apply.lisp.pamphlet
@@ -0,0 +1,443 @@
+\documentclass{article}
+\usepackage{axiom}
+\begin{document}
+\title{\$SPAD/src/interp apply.lisp}
+\author{The Axiom Team}
+\maketitle
+\begin{abstract}
+\end{abstract}
+\eject
+\tableofcontents
+\eject
+<<*>>=
+
+(in-package "BOOT" )
+
+;oldCompilerAutoloadOnceTrigger() == nil
+
+(defun |oldCompilerAutoloadOnceTrigger| () nil) 
+
+;compAtomWithModemap(x,m,e,v) ==
+;  Tl :=
+;    [[transImplementation(x,map,fn),target,e]
+;      for map in v | map is [[.,target],[.,fn]]] =>
+;                                         --accept only monadic operators
+;        T:= or/[t for (t:= [.,target,.]) in Tl | modeEqual(m,target)] => T
+;        1=#(Tl:= [y for t in Tl | (y:= convert(t,m))]) => first Tl
+;        0<#Tl and m=$NoValueMode => first Tl
+;        nil
+
+(DEFUN |compAtomWithModemap| (|x| |m| |e| |v|)
+ (PROG (tmp1 tmp2 tmp3 tmp4 tmp5 |fn| |target| T$ |y| transimp)
+  (RETURN
+   (SEQ
+    (COND
+     ((setq transimp
+      (PROG (t0)
+       (setq t0 NIL)
+       (RETURN
+        (DO ((t1 |v| (CDR t1)) (|map| NIL))
+            ((OR (ATOM t1) (PROGN (SETQ |map| (CAR t1)) NIL))
+               (NREVERSE0 t0))
+         (SEQ
+          (EXIT
+           (COND
+            ((AND (PAIRP |map|)
+                  (PROGN
+                   (setq tmp1 (QCAR |map|))
+                   (AND
+                    (PAIRP tmp1)
+                    (PROGN
+                     (setq tmp2 (QCDR tmp1))
+                     (AND
+                      (PAIRP tmp2)
+                      (EQ (QCDR tmp2) NIL)
+                      (PROGN (setq |target| (QCAR tmp2)) t)))))
+                  (PROGN
+                   (setq tmp3 (QCDR |map|))
+                   (AND
+                    (PAIRP tmp3)
+                    (EQ (QCDR tmp3) NIL)
+                    (PROGN
+                     (setq tmp4 (QCAR tmp3))
+                     (AND (PAIRP tmp4)
+                          (PROGN
+                           (setq tmp5 (QCDR tmp4))
+                           (AND (PAIRP tmp5)
+                                (EQ (QCDR tmp5) NIL)
+                                (PROGN (setq |fn| (QCAR tmp5)) t))))))))
+              (SETQ t0
+               (CONS
+                (CONS
+                 (|transImplementation| |x| |map| |fn|)
+                 (CONS |target| (CONS |e| NIL)))
+                t0))))))))))
+       (EXIT
+        (COND 
+         ((setq T$ (PROG (t2) (setq t2 NIL) (RETURN (DO ((t3 NIL t2) (t4 
transimp (CDR t4)) (|t| NIL)) ((OR t3 (ATOM t4) (PROGN (SETQ |t| (CAR t4)) NIL) 
(PROGN (PROGN (setq |target| (CADR |t|)) |t|) NIL)) t2) (SEQ (EXIT (COND 
((|modeEqual| |m| |target|) (SETQ t2 (OR t2 |t|)))))))))) T$)
+         ((EQL 1
+           (|#|
+            (setq transimp 
+             (PROG (t5)
+              (setq t5 NIL)
+               (RETURN
+                (DO ((t6 transimp (CDR t6)) (|t| NIL))
+                    ((OR (ATOM t6) (PROGN (SETQ |t| (CAR t6)) NIL))
+                     (NREVERSE0 t5))
+                 (SEQ
+                  (EXIT
+                   (COND 
+                    ((setq |y| (|convert| |t| |m|))
+                      (setq t5 (cons |y| t5))))))))))))
+           (car transimp))
+         ((and (qslessp 0 (|#| transimp)) (boot-equal |m| |$NoValueMode|))
+           (car transimp))
+          (t nil))))))))) 
+
+
+;transImplementation(op,map,fn) ==
+;--+
+;  fn := genDeltaEntry [op,:map]
+;  fn is ["XLAM",:.] => [fn]
+;  ["call",fn]
+
+(defun |transImplementation| (op map fn)
+ (setq fn (|genDeltaEntry| (cons op map)))
+ (cond
+  ((and (pairp fn) (eq (qcar fn) 'xlam)) (cons fn nil))
+  (t (cons '|call| (cons fn nil)))))
+
+
+;compApply(sig,varl,body,argl,m,e) ==
+;  argTl:= [[.,.,e]:= comp(x,$EmptyMode,e) for x in argl]
+;  contour:=
+;    [Pair(x,[["mode",m'],["value",removeEnv comp(a,m',e)]])
+;      for x in varl for m' in sig.source for a in argl]
+;  code:= [["LAMBDA",varl,body'],:[T.expr for T in argTl]]
+;  m':= resolve(m,sig.target)
+;  body':= (comp(body,m',addContour(contour,e))).expr
+;  [code,m',e]
+
+(defun |compApply| (sig varl body argl m e)
+ (let (temp1 argTl contour code mq bodyq)
+  (setq argTl
+   (prog (t0)
+    (setq t0 nil)
+    (return
+     (do ((t1 argl (cdr t1)) (|x| nil))
+         ((or (atom t1) (progn (setq |x| (car t1)) nil)) (nreverse0 t0))
+      (seq
+       (exit
+        (setq t0
+         (cons 
+          (progn
+           (setq temp1 (|comp| |x| |$EmptyMode| e))
+           (setq e (caddr temp1))
+           temp1)
+          t0))))))))
+  (setq contour
+   (prog (t2)
+    (setq t2 NIL)
+    (return
+     (do ((t3 varl (cdr t3))
+          (|x| nil)
+          (t4 (cdr sig) (cdr t4))
+          (mq nil)
+          (t5 argl (cdr t5))
+          (|a| nil))
+         ((or (atom t3)
+              (progn (setq |x| (car t3)) nil)
+              (atom t4)
+              (progn (setq mq (car t4)) nil)
+              (atom t5)
+              (progn (setq |a| (car t5)) nil))
+           (nreverse0 t2))
+        (setq t2
+         (cons
+          (|Pair| |x|
+           (cons 
+            (cons '|mode| (cons mq nil))
+            (cons
+             (cons '|value| (cons (|removeEnv| (|comp| |a| mq e)) nil))
+             nil)))
+          t2))))))
+  (setq code
+   (cons
+    (cons 'lambda (cons varl (cons bodyq nil)))
+    (prog (t6)
+     (setq t6 nil)
+     (return
+      (do ((t7 argTl (cdr t7)) (T$ nil))
+          ((or (atom t7) (progn (setq T$ (car t7)) nil)) (nreverse0 t6))
+        (setq t6 (cons (car T$) t6)))))))
+  (setq mq (|resolve| m (car sig)))
+  (setq bodyq (car (|comp| body mq (|addContour| contour e))))
+  (cons code (cons mq (cons e nil)))))
+
+
+;compToApply(op,argl,m,e) ==
+;  T:= compNoStacking(op,$EmptyMode,e) or return nil
+;  m1:= T.mode
+;  T.expr is ["QUOTE", =m1] => nil
+;  compApplication(op,argl,m,T.env,T)
+
+(DEFUN |compToApply| (|op| |argl| |m| |e|) (PROG (T$ |m1| tmp1 tmp2) (RETURN 
(PROGN (setq T$ (OR (|compNoStacking| |op| |$EmptyMode| |e|) (RETURN NIL))) 
(setq |m1| (CADR T$)) (COND ((PROGN (setq tmp1 (CAR T$)) (AND (PAIRP tmp1) (EQ 
(QCAR tmp1) (QUOTE QUOTE)) (PROGN (setq tmp2 (QCDR tmp1)) (AND (PAIRP tmp2) (EQ 
(QCDR tmp2) NIL) (EQUAL (QCAR tmp2) |m1|))))) NIL) (t (|compApplication| |op| 
|argl| |m| (CADDR T$) T$))))))) 
+
+
+;compApplication(op,argl,m,e,T) ==
+;  T.mode is ['Mapping, retm, :argml] =>
+;    #argl ^= #argml => nil
+;    retm := resolve(m, retm)
+;    retm = $Category or isCategoryForm(retm,e) => nil  -- not handled
+;    argTl := [[.,.,e] := comp(x,m,e) or return "failed"
+;              for x in argl for m in argml]
+;    argTl = "failed" => nil
+;    form:=
+;      not (MEMBER(op,$formalArgList) or MEMBER(T.expr,$formalArgList)) and 
ATOM T.expr =>
+;        nprefix := $prefix or
+;        -- following needed for referencing local funs at capsule level
+;           getAbbreviation($op,#rest $form)
+;        [op',:[a.expr for a in argTl],"$"] where
+;          op':= INTERN STRCONC(encodeItem nprefix,";",encodeItem T.expr)
+;      ['call, ['applyFun, T.expr], :[a.expr for a in argTl]]
+;    coerce([form, retm, e],resolve(retm,m))
+;  op = 'elt => nil
+;  eltForm := ['elt, op, :argl]
+;  comp(eltForm, m, e)
+
+(DEFUN |compApplication| (|op| |argl| |m| |e| T$) (PROG (tmp1 tmp2 |argml| 
|retm| temp1 |argTl| |nprefix| |op'| |form| |eltForm|) (RETURN (SEQ (COND 
((PROGN (setq tmp1 (CADR T$)) (AND (PAIRP tmp1) (EQ (QCAR tmp1) (QUOTE 
|Mapping|)) (PROGN (setq tmp2 (QCDR tmp1)) (AND (PAIRP tmp2) (PROGN (setq 
|retm| (QCAR tmp2)) (setq |argml| (QCDR tmp2)) t))))) (COND ((NEQUAL (|#| 
|argl|) (|#| |argml|)) NIL) (t (setq |retm| (|resolve| |m| |retm|)) (COND ((OR 
(BOOT-EQUAL |retm| |$Category|) (|isCategoryForm| |retm| |e|)) NIL) (t (setq 
|argTl| (PROG (t0) (setq t0 NIL) (RETURN (DO ((t1 |argl| (CDR t1)) (|x| NIL) 
(t2 |argml| (CDR t2)) (|m| NIL)) ((OR (ATOM t1) (PROGN (SETQ |x| (CAR t1)) NIL) 
(ATOM t2) (PROGN (SETQ |m| (CAR t2)) NIL)) (NREVERSE0 t0)) (SEQ (EXIT (SETQ t0 
(CONS (PROGN (setq temp1 (OR (|comp| |x| |m| |e|) (RETURN (QUOTE |failed|)))) 
(setq |e| (CADDR temp1)) temp1) t0)))))))) (COND ((BOOT-EQUAL |argTl| (QUOTE 
|failed|)) NIL) (t (setq |form| (COND ((AND (NULL (OR (|member| |op| |$fo!
rmalArgList|) (|member| (CAR T$) |$formalArgList|))) (ATOM (CAR T$))) (setq 
|nprefix| (OR |$prefix| (|getAbbreviation| |$op| (|#| (CDR |$form|))))) (setq 
|op'| (INTERN (STRCONC (|encodeItem| |nprefix|) (QUOTE |;|) (|encodeItem| (CAR 
T$))))) (CONS |op'| (APPEND (PROG (t3) (setq t3 NIL) (RETURN (DO ((t4 |argTl| 
(CDR t4)) (|a| NIL)) ((OR (ATOM t4) (PROGN (SETQ |a| (CAR t4)) NIL)) (NREVERSE0 
t3)) (SEQ (EXIT (SETQ t3 (CONS (CAR |a|) t3))))))) (CONS (QUOTE $) NIL)))) (t 
(CONS (QUOTE |call|) (CONS (CONS (QUOTE |applyFun|) (CONS (CAR T$) NIL)) (PROG 
(t5) (setq t5 NIL) (RETURN (DO ((t6 |argTl| (CDR t6)) (|a| NIL)) ((OR (ATOM t6) 
(PROGN (SETQ |a| (CAR t6)) NIL)) (NREVERSE0 t5)) (SEQ (EXIT (SETQ t5 (CONS (CAR 
|a|) t5)))))))))))) (|coerce| (CONS |form| (CONS |retm| (CONS |e| NIL))) 
(|resolve| |retm| |m|))))))))) ((BOOT-EQUAL |op| (QUOTE |elt|)) NIL) (t (setq 
|eltForm| (CONS (QUOTE |elt|) (CONS |op| |argl|))) (|comp| |eltForm| |m| 
|e|))))))) 
+
+
+;compFormWithModemap(form is [op,:argl],m,e,modemap) ==
+;  [map:= [.,target,:.],[pred,impl]]:= modemap
+;  -- this fails if the subsuming modemap is conditional
+;  --impl is ['Subsumed,:.] => nil
+;  if isCategoryForm(target,e) and isFunctor op then
+;    [modemap,e]:= substituteIntoFunctorModemap(argl,modemap,e) or return nil
+;    [map:= [.,target,:.],:cexpr]:= modemap
+;  sv:=listOfSharpVars map
+;  if sv then
+;     -- SAY [ "compiling ", op, " in compFormWithModemap,
+;     -- mode= ",map," sharp vars=",sv]
+;    for x in argl for ss in $FormalMapVariableList repeat
+;      if ss in sv then
+;        [map:= [.,target,:.],:cexpr]:= modemap :=SUBST(x,ss,modemap)
+;        -- SAY ["new map is",map]
+;  not (target':= coerceable(target,m,e)) => nil
+;  map:= [target',:rest map]
+;  [f,Tl,sl]:= compApplyModemap(form,modemap,e,nil) or return nil
+;  --generate code; return
+;  T:=
+;    [x',m',e'] where
+;      m':= SUBLIS(sl,map.(1))
+;      x':=
+;        form':= [f,:[t.expr for t in Tl]]
+;        m'=$Category or isCategoryForm(m',e) => form'
+;        -- try to deal with new-style Unions where we know the conditions
+;        op = "elt" and f is ['XLAM,:.] and IDENTP(z:=CAR argl) and
+;          (c:=get(z,'condition,e)) and
+;            c is [['case,=z,c1]] and
+;              (c1 is ['_:,=(CADR argl),=m] or EQ(c1,CADR argl) ) =>
+;-- first is a full tag, as placed by getInverseEnvironment
+;-- second is what getSuccessEnvironment will place there
+;                ["CDR",z]
+;        ["call",:form']
+;      e':=
+;        Tl => (LAST Tl).env
+;        e
+;  convert(T,m)
+
+(DEFUN |compFormWithModemap| (|form| |m| |e| |modemap|) (PROG (|op| |argl| 
|pred| |impl| |sv| |target| |cexpr| |target'| |map| temp1 |f| transimp |sl| 
|m'| |form'| |z| |c| tmp3 |c1| tmp1 tmp2 |x'| |e'| T$) (RETURN (SEQ (PROGN 
(setq |op| (CAR |form|)) (setq |argl| (CDR |form|)) (setq |map| (CAR 
|modemap|)) (setq |target| (CADAR |modemap|)) (setq |pred| (CAADR |modemap|)) 
(setq |impl| (CADADR |modemap|)) (COND ((AND (|isCategoryForm| |target| |e|) 
(|isFunctor| |op|)) (setq temp1 (OR (|substituteIntoFunctorModemap| |argl| 
|modemap| |e|) (RETURN NIL))) (setq |modemap| (CAR temp1)) (setq |e| (CADR 
temp1)) (setq |map| (CAR |modemap|)) (setq |target| (CADAR |modemap|)) (setq 
|cexpr| (CDR |modemap|)) |modemap|)) (setq |sv| (|listOfSharpVars| |map|)) 
(COND (|sv| (DO ((t0 |argl| (CDR t0)) (|x| NIL) (t1 |$FormalMapVariableList| 
(CDR t1)) (|ss| NIL)) ((OR (ATOM t0) (PROGN (SETQ |x| (CAR t0)) NIL) (ATOM t1) 
(PROGN (SETQ |ss| (CAR t1)) NIL)) NIL) (SEQ (EXIT (COND ((|member| |ss| |sv|) 
(s!
etq |modemap| (MSUBST |x| |ss| |modemap|)) (setq |map| (CAR |modemap|)) (setq 
|target| (CADAR |modemap|)) (setq |cexpr| (CDR |modemap|)) |modemap|) (t 
NIL))))))) (COND ((NULL (setq |target'| (|coerceable| |target| |m| |e|))) NIL) 
(t (setq |map| (CONS |target'| (CDR |map|))) (setq temp1 (OR 
(|compApplyModemap| |form| |modemap| |e| NIL) (RETURN NIL))) (setq |f| (CAR 
temp1)) (setq transimp (CADR temp1)) (setq |sl| (CADDR temp1)) (setq |m'| 
(SUBLIS |sl| (ELT |map| 1))) (setq |x'| (PROGN (setq |form'| (CONS |f| (PROG 
(t2) (setq t2 NIL) (RETURN (DO ((t3 transimp (CDR t3)) (|t| NIL)) ((OR (ATOM 
t3) (PROGN (SETQ |t| (CAR t3)) NIL)) (NREVERSE0 t2)) (SEQ (EXIT (SETQ t2 (CONS 
(CAR |t|) t2))))))))) (COND ((OR (BOOT-EQUAL |m'| |$Category|) 
(|isCategoryForm| |m'| |e|)) |form'|) ((AND (BOOT-EQUAL |op| (QUOTE |elt|)) 
(PAIRP |f|) (EQ (QCAR |f|) (QUOTE XLAM)) (IDENTP (setq |z| (CAR |argl|))) (setq 
|c| (|get| |z| (QUOTE |condition|) |e|)) (PAIRP |c|) (EQ (QCDR |c|) NIL) (PROGN 
(setq tmp1 (QCAR!
 |c|)) (AND (PAIRP tmp1) (EQ (QCAR tmp1) (QUOTE |case|)) (PRO!
GN (setq tmp2 (QCDR tmp1)) (AND (PAIRP tmp2) (EQUAL (QCAR tmp2) |z|) (PROGN 
(setq tmp3 (QCDR tmp2)) (AND (PAIRP tmp3) (EQ (QCDR tmp3) NIL) (PROGN (setq 
|c1| (QCAR tmp3)) t))))))) (OR (AND (PAIRP |c1|) (EQ (QCAR |c1|) (QUOTE |:|)) 
(PROGN (setq tmp1 (QCDR |c1|)) (AND (PAIRP tmp1) (EQUAL (QCAR tmp1) (CADR 
|argl|)) (PROGN (setq tmp2 (QCDR tmp1)) (AND (PAIRP tmp2) (EQ (QCDR tmp2) NIL) 
(EQUAL (QCAR tmp2) |m|)))))) (EQ |c1| (CADR |argl|)))) (CONS (QUOTE CDR) (CONS 
|z| NIL))) (t (CONS (QUOTE |call|) |form'|))))) (setq |e'| (COND (transimp 
(CADDR (|last| transimp))) (t |e|))) (setq T$ (CONS |x'| (CONS |m'| (CONS |e'| 
NIL)))) (|convert| T$ |m|)))))))) 
+
+
+;-- This version tends to give problems with #1 and categories
+;-- applyMapping([op,:argl],m,e,ml) ==
+;--   #argl^=#ml-1 => nil
+;--   mappingHasCategoryTarget :=
+;--     isCategoryForm(first ml,e) => --is op a functor?
+;--       form:= [op,:argl']
+;--       pairlis:= [[v,:a] for a in argl for v in $FormalMapVariableList]
+;--       ml:= SUBLIS(pairlis,ml)
+;--       true
+;--     false
+;--   argl':=
+;--     [T.expr for x in argl for m' in rest ml] where
+;--       T() == [.,.,e]:= comp(x,m',e) or return "failed"
+;--   if argl'="failed" then return nil
+;--   mappingHasCategoryTarget => convert([form,first ml,e],m)
+;--   form:=
+;--     not MEMBER(op,$formalArgList) and ATOM op =>
+;--       [op',:argl',"$"] where
+;--         op':= INTERN STRCONC(STRINGIMAGE $prefix,";",STRINGIMAGE op)
+;--     ["call",["applyFun",op],:argl']
+;--   pairlis:= [[v,:a] for a in argl' for v in $FormalMapVariableList]
+;--   convert([form,SUBLIS(pairlis,first ml),e],m)
+
+
+;applyMapping([op,:argl],m,e,ml) ==
+;  #argl^=#ml-1 => nil
+;  isCategoryForm(first ml,e) =>
+;                                --is op a functor?
+;    pairlis:= [[v,:a] for a in argl for v in $FormalMapVariableList]
+;    ml' := SUBLIS(pairlis, ml)
+;    argl':=
+;      [T.expr for x in argl for m' in rest ml'] where
+;        T() == [.,.,e]:= comp(x,m',e) or return "failed"
+;    if argl'="failed" then return nil
+;    form:= [op,:argl']
+;    convert([form,first ml',e],m)
+;  argl':=
+;    [T.expr for x in argl for m' in rest ml] where
+;      T() == [.,.,e]:= comp(x,m',e) or return "failed"
+;  if argl'="failed" then return nil
+;  form:=
+;    not MEMBER(op,$formalArgList) and ATOM op and not get(op,'value,e) =>
+;      nprefix := $prefix or
+;   -- following needed for referencing local funs at capsule level
+;        getAbbreviation($op,#rest $form)
+;      [op',:argl',"$"] where
+;        op':= INTERN STRCONC(encodeItem nprefix,";",encodeItem op)
+;    ['call,['applyFun,op],:argl']
+;  pairlis:= [[v,:a] for a in argl' for v in $FormalMapVariableList]
+;  convert([form,SUBLIS(pairlis,first ml),e],m)
+
+(DEFUN |applyMapping| (t0 |m| |e| |ml|) (PROG (|op| |argl| |ml'| temp1 |argl'| 
|nprefix| |op'| |form| |pairlis|) (RETURN (SEQ (PROGN (setq |op| (CAR t0)) 
(setq |argl| (CDR t0)) (COND ((NEQUAL (|#| |argl|) (SPADDIFFERENCE (|#| |ml|) 
1)) NIL) ((|isCategoryForm| (CAR |ml|) |e|) (setq |pairlis| (PROG (t1) (setq t1 
NIL) (RETURN (DO ((t2 |argl| (CDR t2)) (|a| NIL) (t3 |$FormalMapVariableList| 
(CDR t3)) (|v| NIL)) ((OR (ATOM t2) (PROGN (SETQ |a| (CAR t2)) NIL) (ATOM t3) 
(PROGN (SETQ |v| (CAR t3)) NIL)) (NREVERSE0 t1)) (SEQ (EXIT (SETQ t1 (CONS 
(CONS |v| |a|) t1)))))))) (setq |ml'| (SUBLIS |pairlis| |ml|)) (setq |argl'| 
(PROG (t4) (setq t4 NIL) (RETURN (DO ((t5 |argl| (CDR t5)) (|x| NIL) (t6 (CDR 
|ml'|) (CDR t6)) (|m'| NIL)) ((OR (ATOM t5) (PROGN (SETQ |x| (CAR t5)) NIL) 
(ATOM t6) (PROGN (SETQ |m'| (CAR t6)) NIL)) (NREVERSE0 t4)) (SEQ (EXIT (SETQ t4 
(CONS (CAR (PROGN (setq temp1 (OR (|comp| |x| |m'| |e|) (RETURN (QUOTE 
|failed|)))) (setq |e| (CADDR temp1)) temp1)) t4)))))))) (COND !
((BOOT-EQUAL |argl'| (QUOTE |failed|)) (RETURN NIL))) (setq |form| (CONS |op| 
|argl'|)) (|convert| (CONS |form| (CONS (CAR |ml'|) (CONS |e| NIL))) |m|)) (t 
(setq |argl'| (PROG (t7) (setq t7 NIL) (RETURN (DO ((t8 |argl| (CDR t8)) (|x| 
NIL) (t9 (CDR |ml|) (CDR t9)) (|m'| NIL)) ((OR (ATOM t8) (PROGN (SETQ |x| (CAR 
t8)) NIL) (ATOM t9) (PROGN (SETQ |m'| (CAR t9)) NIL)) (NREVERSE0 t7)) (SEQ 
(EXIT (SETQ t7 (CONS (CAR (PROGN (setq temp1 (OR (|comp| |x| |m'| |e|) (RETURN 
(QUOTE |failed|)))) (setq |e| (CADDR temp1)) temp1)) t7)))))))) (COND 
((BOOT-EQUAL |argl'| (QUOTE |failed|)) (RETURN NIL))) (setq |form| (COND ((AND 
(NULL (|member| |op| |$formalArgList|)) (ATOM |op|) (NULL (|get| |op| (QUOTE 
|value|) |e|))) (setq |nprefix| (OR |$prefix| (|getAbbreviation| |$op| (|#| 
(CDR |$form|))))) (setq |op'| (INTERN (STRCONC (|encodeItem| |nprefix|) (QUOTE 
|;|) (|encodeItem| |op|)))) (CONS |op'| (APPEND |argl'| (CONS (QUOTE $) NIL)))) 
(t (CONS (QUOTE |call|) (CONS (CONS (QUOTE |applyFun|) (CONS !
|op| NIL)) |argl'|))))) (setq |pairlis| (PROG (t10) (setq t10!
 NIL) (RETURN (DO ((t11 |argl'| (CDR t11)) (|a| NIL) (t12 
|$FormalMapVariableList| (CDR t12)) (|v| NIL)) ((OR (ATOM t11) (PROGN (SETQ |a| 
(CAR t11)) NIL) (ATOM t12) (PROGN (SETQ |v| (CAR t12)) NIL)) (NREVERSE0 t10)) 
(SEQ (EXIT (SETQ t10 (CONS (CONS |v| |a|) t10)))))))) (|convert| (CONS |form| 
(CONS (SUBLIS |pairlis| (CAR |ml|)) (CONS |e| NIL))) |m|)))))))) 
+
+
+;--% APPLY MODEMAPS
+;compApplyModemap(form,modemap,$e,sl) ==
+;  [op,:argl] := form                   --form to be compiled
+;  [[mc,mr,:margl],:fnsel] := modemap   --modemap we are testing
+;  -- $e     is the current environment
+;  -- sl     substitution list, nil means bottom-up, otherwise top-down
+;  -- 0.  fail immediately if #argl=#margl
+;  if #argl^=#margl then return nil
+;  -- 1.  use modemap to evaluate arguments, returning failed if
+;  --     not possible
+;  lt:=
+;    [[.,m',$e]:=
+;      comp(y,g,$e) or return "failed" where
+;        g:= SUBLIS(sl,m) where
+;            sl:= pmatchWithSl(m',m,sl) for y in argl for m in margl]
+;  lt="failed" => return nil
+;  -- 2.  coerce each argument to final domain, returning failed
+;  --     if not possible
+;  lt':= [coerce(y,d) or return "failed"
+;         for y in lt for d in SUBLIS(sl,margl)]
+;  lt'="failed" => return nil
+;  -- 3.  obtain domain-specific function, if possible, and return
+;  --$bindings is bound by compMapCond
+;  [f,$bindings]:= compMapCond(op,mc,sl,fnsel) or return nil
+;--+ can no longer trust what the modemap says for a reference into
+;--+ an exterior domain (it is calculating the displacement based on view
+;--+ information which is no longer valid; thus ignore this index and
+;--+ store the signature instead.
+;--$NRTflag=true and f is [op1,d,.] and NE(d,'$) and MEMBER(op1,'(ELT CONST)) 
=>
+;  f is [op1,d,.] and MEMBER(op1,'(ELT CONST Subsumed)) =>
+;    [genDeltaEntry [op,:modemap],lt',$bindings]
+;  [f,lt',$bindings]
+
+(DEFUN |compApplyModemap| (|form| |modemap| |$e| |sl|) (DECLARE (SPECIAL 
|$e|)) (PROG (|op| |argl| |mc| |mr| |margl| |fnsel| |g| |m'| |lt| |lt'| temp1 
|f| |op1| tmp1 |d| tmp2) (RETURN (SEQ (PROGN (setq |op| (CAR |form|)) (setq 
|argl| (CDR |form|)) (setq |mc| (CAAR |modemap|)) (setq |mr| (CADAR |modemap|)) 
(setq |margl| (CDDAR |modemap|)) (setq |fnsel| (CDR |modemap|)) (COND ((NEQUAL 
(|#| |argl|) (|#| |margl|)) (RETURN NIL))) (setq |lt| (PROG (t0) (setq t0 NIL) 
(RETURN (DO ((t1 |argl| (CDR t1)) (|y| NIL) (t2 |margl| (CDR t2)) (|m| NIL)) 
((OR (ATOM t1) (PROGN (SETQ |y| (CAR t1)) NIL) (ATOM t2) (PROGN (SETQ |m| (CAR 
t2)) NIL)) (NREVERSE0 t0)) (SEQ (EXIT (SETQ t0 (CONS (PROGN (setq |sl| 
(|pmatchWithSl| |m'| |m| |sl|)) (setq |g| (SUBLIS |sl| |m|)) (setq temp1 (OR 
(|comp| |y| |g| |$e|) (RETURN (QUOTE |failed|)))) (setq |m'| (CADR temp1)) 
(setq |$e| (CADDR temp1)) temp1) t0)))))))) (COND ((BOOT-EQUAL |lt| (QUOTE 
|failed|)) (RETURN NIL)) (t (setq |lt'| (PROG (t3) (setq t3 NIL) (RET!
URN (DO ((t4 |lt| (CDR t4)) (|y| NIL) (t5 (SUBLIS |sl| |margl|) (CDR t5)) (|d| 
NIL)) ((OR (ATOM t4) (PROGN (SETQ |y| (CAR t4)) NIL) (ATOM t5) (PROGN (SETQ |d| 
(CAR t5)) NIL)) (NREVERSE0 t3)) (SEQ (EXIT (SETQ t3 (CONS (OR (|coerce| |y| 
|d|) (RETURN (QUOTE |failed|))) t3)))))))) (COND ((BOOT-EQUAL |lt'| (QUOTE 
|failed|)) (RETURN NIL)) (t (setq temp1 (OR (|compMapCond| |op| |mc| |sl| 
|fnsel|) (RETURN NIL))) (setq |f| (CAR temp1)) (setq |$bindings| (CADR temp1)) 
(COND ((AND (PAIRP |f|) (PROGN (setq |op1| (QCAR |f|)) (setq tmp1 (QCDR |f|)) 
(AND (PAIRP tmp1) (PROGN (setq |d| (QCAR tmp1)) (setq tmp2 (QCDR tmp1)) (AND 
(PAIRP tmp2) (EQ (QCDR tmp2) NIL))))) (|member| |op1| (QUOTE (ELT CONST 
|Subsumed|)))) (CONS (|genDeltaEntry| (CONS |op| |modemap|)) (CONS |lt'| (CONS 
|$bindings| NIL)))) (t (CONS |f| (CONS |lt'| (CONS |$bindings| 
NIL)))))))))))))) 
+
+
+;compMapCond(op,mc,$bindings,fnsel) ==
+;  or/[compMapCond'(u,op,mc,$bindings) for u in fnsel]
+
+(defun |compMapCond| (op mc |$bindings| fnsel)
+ (declare (special |$bindings|))
+ (let (t0)
+  (do ((t1 nil t0) (t2 fnsel (cdr t2)) (|u| nil))
+      ((or t1 (atom t2) (progn (setq |u| (car t2)) nil)) t0)
+   (setq t0 (or t0 (|compMapCond'| |u| op mc |$bindings|))))))
+
+
+;compMapCond'([cexpr,fnexpr],op,dc,bindings) ==
+;  compMapCond''(cexpr,dc) => compMapCondFun(fnexpr,op,dc,bindings)
+;  stackMessage ["not known that",'%b,dc,'%d,"has",'%b,cexpr,'%d]
+
+(defun |compMapCond'| (t0 op dc bindings)
+ (let ((cexpr (car t0)) (fnexpr (cadr t0)))
+  (if (|compMapCond''| cexpr dc)
+    (|compMapCondFun| fnexpr op dc bindings)
+    (|stackMessage| `("not known that" %b ,dc %d "has" %b ,cexpr %d)))))
+
+;compMapCond''(cexpr,dc) ==
+;  cexpr=true => true
+;  --cexpr = "true" => true
+;  cexpr is ["AND",:l] => and/[compMapCond''(u,dc) for u in l]
+;  cexpr is ["OR",:l] => or/[compMapCond''(u,dc) for u in l]
+;  cexpr is ["not",u] => not compMapCond''(u,dc)
+;  cexpr is ["has",name,cat] => (knownInfo cexpr => true; false)
+;        --for the time being we'll stop here - shouldn't happen so far
+;        --$disregardConditionIfTrue => true
+;        --stackSemanticError(("not known that",'%b,name,
+;        -- '%d,"has",'%b,cat,'%d),nil)
+;  --now it must be an attribute
+;  MEMBER(["ATTRIBUTE",dc,cexpr],get("$Information","special",$e)) => true
+;  --for the time being we'll stop here - shouldn't happen so far
+;  stackMessage ["not known that",'%b,dc,'%d,"has",'%b,cexpr,'%d]
+;  false
+
+(defun |compMapCond''| (cexpr dc)
+ (let (l u tmp1 tmp2)
+ (declare (special |$Information|))
+  (cond
+   ((boot-equal cexpr t) t)
+   ((and (pairp cexpr) 
+         (eq (qcar cexpr) 'and)
+         (progn (setq l (qcdr cexpr)) t))
+     (prog (t0)
+      (setq t0 t)
+      (return
+       (do ((t1 nil (null t0)) (t2 l (cdr t2)) (u nil))
+           ((or t1 (atom t2) (progn (setq u (car t2)) nil)) t0)
+        (setq t0 (and t0 (|compMapCond''| u dc)))))))
+   ((and (pairp cexpr) 
+         (eq (qcar cexpr) 'or)
+         (progn (setq l (qcdr cexpr)) t))
+    (prog (t3)
+     (setq t3 nil)
+     (return
+      (do ((t4 nil t3) (t5 l (cdr t5)) (u nil))
+          ((or t4 (atom t5) (progn (setq u (car t5)) nil)) t3)
+         (setq t3 (or t3 (|compMapCond''| u dc)))))))
+   ((and (pairp cexpr)
+         (eq (qcar cexpr) '|not|)
+         (progn 
+          (setq tmp1 (qcdr cexpr))
+          (and (pairp tmp1)
+               (eq (qcdr tmp1) nil)
+               (progn (setq u (qcar tmp1)) t))))
+     (null (|compMapCond''| u dc)))
+   ((and (pairp cexpr)
+         (eq (qcar cexpr) '|has|)
+         (progn
+          (setq tmp1 (qcdr cexpr))
+          (and (pairp tmp1)
+               (progn
+                (setq tmp2 (qcdr tmp1))
+                (and (pairp tmp2)
+                     (eq (qcdr tmp2) nil))))))
+     (cond
+      ((|knownInfo| cexpr) t)
+      (t nil)))
+   ((|member| 
+      (cons 'attribute (cons dc (cons cexpr nil)))
+      (|get| '|$Information| '|special| |$e|))
+     t)
+   (t 
+    (|stackMessage| `("not known that" %b ,dc %d "has" %b ,cexpr %d))
+    nil))))
+
+;compMapCondFun(fnexpr,op,dc,bindings) == [fnexpr,bindings]
+
+(defun |compMapCondFun| (fnexpr op dc bindings)
+ (declare (ignore op) (ignore dc))
+ (cons fnexpr (cons bindings nil))) 
+
+@
+\eject
+\begin{thebibliography}{99}
+\bibitem{1} nothing
+\end{thebibliography}
+\end{document}
diff --git a/src/interp/util.lisp.pamphlet b/src/interp/util.lisp.pamphlet
index 14e9ffe..d7126d7 100644
--- a/src/interp/util.lisp.pamphlet
+++ b/src/interp/util.lisp.pamphlet
@@ -148,7 +148,7 @@ After this function is called the image is clean and can be 
saved.
 #+:CCL
   (resethashtables)
   (setq *load-verbose* nil)
-  (|setBootAutloadProperties| comp-functions comp-files)
+;  (|setBootAutloadProperties| comp-functions comp-files)
 ;  (|setBootAutloadProperties| parse-functions parse-files)
   (|setBootAutloadProperties| browse-functions browse-files)
   (|setBootAutloadProperties| translate-functions translate-files)
@@ -369,17 +369,17 @@ developers who translate boot code to Common Lisp.
 This is the {\bf spad compiler} subsystem. It is only needed by
 developers who write or modify algebra code.
 <<comp-functions>>=
-(setq comp-functions
-      '(
-;;      loadcompiler
-       |oldCompilerAutoloadOnceTrigger|
-;;     |compileSpad2Cmd|
-       |convertSpadToAsFile|
-       |compilerDoit|
-       |compilerDoitWithScreenedLisplib|
-       |mkCategory|
-       |cons5|
-       |sublisV|))
+;(setq comp-functions
+;      '(
+;;;      loadcompiler
+;      |oldCompilerAutoloadOnceTrigger|
+;;;    |compileSpad2Cmd|
+;      |convertSpadToAsFile|
+;      |compilerDoit|
+;      |compilerDoitWithScreenedLisplib|
+;      |mkCategory|
+;      |cons5|
+;      |sublisV|))
 
 @
 \subsubsection{browse-functions}




reply via email to

[Prev in Thread] Current Thread [Next in Thread]