diff --git a/changelog b/changelog index df5f255..f6e4cb8 100644 --- a/changelog +++ b/changelog @@ -1,3 +1,7 @@ +20090825 tpd src/axiom-website/patches.html 20090826.03.tpd.patch +20090825 tpd src/interp/Makefile move server.boot to server.lisp +20090825 tpd src/interp/server.lisp added, rewritten from server.boot +20090825 tpd src/interp/server.boot removed, rewritten to server.lisp 20090825 tpd src/axiom-website/patches.html 20090826.02.tpd.patch 20090825 tpd src/interp/Makefile move serror.boot to serror.lisp 20090825 tpd src/interp/serror.lisp added, rewritten from serror.boot diff --git a/src/axiom-website/patches.html b/src/axiom-website/patches.html index e6d2760..34b199f 100644 --- a/src/axiom-website/patches.html +++ b/src/axiom-website/patches.html @@ -1900,5 +1900,7 @@ rulesets.lisp rewrite from boot to lisp
scan.lisp rewrite from boot to lisp
20090826.02.tpd.patch serror.lisp rewrite from boot to lisp
+20090826.03.tpd.patch +server.lisp rewrite from boot to lisp
diff --git a/src/interp/Makefile.pamphlet b/src/interp/Makefile.pamphlet index d47ab38..9c8c4be 100644 --- a/src/interp/Makefile.pamphlet +++ b/src/interp/Makefile.pamphlet @@ -3910,45 +3910,26 @@ ${MID}/rulesets.lisp: ${IN}/rulesets.lisp.pamphlet @ -\subsection{server.boot} +\subsection{server.lisp} <>= -${OUT}/server.${O}: ${MID}/server.clisp - @ echo 390 making ${OUT}/server.${O} from ${MID}/server.clisp - @ (cd ${MID} ; \ +${OUT}/server.${O}: ${MID}/server.lisp + @ echo 136 making ${OUT}/server.${O} from ${MID}/server.lisp + @ ( cd ${MID} ; \ if [ -z "${NOISE}" ] ; then \ - echo '(progn (compile-file "${MID}/server.clisp"' \ - ':output-file "${OUT}/server.${O}") (${BYE}))' | ${DEPSYS} ; \ + echo '(progn (compile-file "${MID}/server.lisp"' \ + ':output-file "${OUT}/server.${O}") (${BYE}))' | ${DEPSYS} ; \ else \ - echo '(progn (compile-file "${MID}/server.clisp"' \ - ':output-file "${OUT}/server.${O}") (${BYE}))' | ${DEPSYS} \ + echo '(progn (compile-file "${MID}/server.lisp"' \ + ':output-file "${OUT}/server.${O}") (${BYE}))' | ${DEPSYS} \ >${TMP}/trace ; \ fi ) @ -<>= -${MID}/server.clisp: ${IN}/server.boot.pamphlet - @ echo 391 making ${MID}/server.clisp from ${IN}/server.boot.pamphlet +<>= +${MID}/server.lisp: ${IN}/server.lisp.pamphlet + @ echo 137 making ${MID}/server.lisp from ${IN}/server.lisp.pamphlet @ (cd ${MID} ; \ - ${TANGLE} ${IN}/server.boot.pamphlet >server.boot ; \ - if [ -z "${NOISE}" ] ; then \ - echo '(progn (boottran::boottocl "server.boot") (${BYE}))' \ - | ${DEPSYS} ; \ - else \ - echo '(progn (boottran::boottocl "server.boot") (${BYE}))' \ - | ${DEPSYS} >${TMP}/trace ; \ - fi ; \ - rm server.boot ) - -@ -<>= -${DOC}/server.boot.dvi: ${IN}/server.boot.pamphlet - @echo 392 making ${DOC}/server.boot.dvi from ${IN}/server.boot.pamphlet - @(cd ${DOC} ; \ - cp ${IN}/server.boot.pamphlet ${DOC} ; \ - ${DOCUMENT} ${NOISE} server.boot ; \ - rm -f ${DOC}/server.boot.pamphlet ; \ - rm -f ${DOC}/server.boot.tex ; \ - rm -f ${DOC}/server.boot ) + ${TANGLE} ${IN}/server.lisp.pamphlet >server.lisp ) @ @@ -6085,8 +6066,7 @@ clean: <> <> -<> -<> +<> <> <> diff --git a/src/interp/server.boot.pamphlet b/src/interp/server.boot.pamphlet deleted file mode 100644 index b243c3e..0000000 --- a/src/interp/server.boot.pamphlet +++ /dev/null @@ -1,177 +0,0 @@ -\documentclass{article} -\usepackage{axiom} -\begin{document} -\title{\$SPAD/src/interp server.boot} -\author{The Axiom Team} -\maketitle -\begin{abstract} -\end{abstract} -\eject -\tableofcontents -\eject -\section{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. - -@ -<<*>>= -<> - --- Scratchpad-II server - --- Assoc list of interpreter frame names and unique integer identifiers - -parseAndInterpret str == - $InteractiveMode :fluid := true - $BOOT: fluid := NIL - $SPAD: fluid := true - $e:fluid := $InteractiveFrame - $useNewParser => - ncParseAndInterpretString str - oldParseAndInterpret str - -oldParseAndInterpret str == - tree := string2SpadTree str - tree => processInteractive(parseTransform postTransform tree, NIL) - NIL - -executeQuietCommand() == - $QuietCommand: fluid := true - stringBuf := MAKE_-STRING 512 - sockGetString($MenuServer, stringBuf, 512) - CATCH('coerceFailure,CATCH('top__level, CATCH('SPAD__READER, - parseAndInterpret stringBuf))) - --- Includued for compatability with old-parser systems -serverLoop() == - IN_-STREAM: fluid := CURINSTREAM - _*EOF_*: fluid := NIL - while not $EndServerSession and not _*EOF_* repeat - if $Prompt then (PRINC MKPROMPT(); FINISH_-OUTPUT()) - $Prompt := NIL - action := serverSwitch() - action = $CallInterp => - CATCH('coerceFailure,CATCH('top__level, CATCH('SPAD__READER, - parseAndInterpret READ_-LINE(CURINSTREAM) ))) - PRINC MKPROMPT() - FINISH_-OUTPUT() - sockSendInt($SessionManager, $EndOfOutput) - action = $CreateFrame => - frameName := GENTEMP('"frame") - addNewInterpreterFrame(frameName) - $frameAlist := [[$frameNumber,:frameName], :$frameAlist] - $currentFrameNum := $frameNumber - sockSendInt($SessionManager, $frameNumber) - $frameNumber := $frameNumber + 1 - sockSendString($SessionManager, MKPROMPT()) - action = $SwitchFrames => - $currentFrameNum := sockGetInt($SessionManager) - currentFrame := LASSOC($currentFrameNum, $frameAlist) - changeToNamedInterpreterFrame currentFrame - action = $EndSession => - $EndServerSession := true - action = $LispCommand => - stringBuf := MAKE_-STRING 512 - sockGetString($MenuServer, stringBuf, 512) - form := unescapeStringsInForm READ_-FROM_-STRING stringBuf - EVAL form - action = $QuietSpadCommand => - executeQuietCommand() - action = $SpadCommand => - stringBuf := MAKE_-STRING 512 - sockGetString($MenuServer, stringBuf, 512) - CATCH('coerceFailure,CATCH('top__level, CATCH('SPAD__READER, - parseAndInterpret stringBuf))) - PRINC MKPROMPT() - FINISH_-OUTPUT() - sockSendInt($SessionManager, $EndOfOutput) - NIL - if _*EOF_* then $Prompt := true - NIL - -parseAndEvalToHypertex str == - lines := parseAndEvalToStringForHypertex str - len := LENGTH lines - sockSendInt($MenuServer, len) - for s in lines repeat - sockSendString($MenuServer, s) - -parseAndEvalToString str == - $collectOutput:local := true - $outputLines: local := nil - $IOindex: local := nil - v := CATCH('SPAD__READER, CATCH('top__level, parseAndEvalStr str)) - v = 'restart => ['"error"] - NREVERSE $outputLines - -parseAndEvalToStringForHypertex str == - $collectOutput:local := true - $outputLines: local := nil - v := CATCH('SPAD__READER, CATCH('top__level, parseAndEvalStr str)) - v = 'restart => ['"error"] - NREVERSE $outputLines - -parseAndEvalToStringEqNum str == - $collectOutput:local := true - $outputLines: local := nil - v := CATCH('SPAD__READER, CATCH('top__level, parseAndEvalStr str)) - v = 'restart => ['"error"] - NREVERSE $outputLines - -parseAndInterpToString str == - v := applyWithOutputToString('parseAndEvalStr, [str]) - breakIntoLines CDR v - -parseAndEvalStr string == - $InteractiveMode :fluid := true - $BOOT: fluid := NIL - $SPAD: fluid := true - $e:fluid := $InteractiveFrame - parseAndEvalStr1 string - -parseAndEvalStr1 string == - string.0 = char '")" => - doSystemCommand SUBSEQ(string, 1) - processInteractive(ncParseFromString string, NIL) - -protectedEVAL x == - error := true - val := NIL - UNWIND_-PROTECT((val := EVAL x; error := NIL), - error => (resetStackLimits(); sendHTErrorSignal())) - val -@ -\eject -\begin{thebibliography}{99} -\bibitem{1} nothing -\end{thebibliography} -\end{document} diff --git a/src/interp/server.lisp.pamphlet b/src/interp/server.lisp.pamphlet new file mode 100644 index 0000000..cebf396 --- /dev/null +++ b/src/interp/server.lisp.pamphlet @@ -0,0 +1,358 @@ +\documentclass{article} +\usepackage{axiom} +\begin{document} +\title{\$SPAD/src/interp server.lisp} +\author{The Axiom Team} +\maketitle +\begin{abstract} +\end{abstract} +\eject +\tableofcontents +\eject +<<*>>= + +(IN-PACKAGE "BOOT" ) + +;-- Scratchpad-II server +;-- Assoc list of interpreter frame names and unique integer identifiers +;parseAndInterpret str == +; $InteractiveMode :fluid := true +; $BOOT: fluid := NIL +; $SPAD: fluid := true +; $e:fluid := $InteractiveFrame +; $useNewParser => +; ncParseAndInterpretString str +; oldParseAndInterpret str + +(DEFUN |parseAndInterpret| (|str|) + (PROG (|$InteractiveMode| $BOOT $SPAD |$e|) + (DECLARE (SPECIAL |$InteractiveMode| $BOOT $SPAD |$e|)) + (RETURN + (PROGN + (SPADLET |$InteractiveMode| 'T) + (SPADLET $BOOT NIL) + (SPADLET $SPAD 'T) + (SPADLET |$e| |$InteractiveFrame|) + (COND + (|$useNewParser| (|ncParseAndInterpretString| |str|)) + ('T (|oldParseAndInterpret| |str|))))))) + +;oldParseAndInterpret str == +; tree := string2SpadTree str +; tree => processInteractive(parseTransform postTransform tree, NIL) +; NIL + +(DEFUN |oldParseAndInterpret| (|str|) + (PROG (|tree|) + (RETURN + (PROGN + (SPADLET |tree| (|string2SpadTree| |str|)) + (COND + (|tree| (|processInteractive| + (|parseTransform| (|postTransform| |tree|)) NIL)) + ('T NIL)))))) + +;executeQuietCommand() == +; $QuietCommand: fluid := true +; stringBuf := MAKE_-STRING 512 +; sockGetString($MenuServer, stringBuf, 512) +; CATCH('coerceFailure,CATCH('top__level, CATCH('SPAD__READER, +; parseAndInterpret stringBuf))) + +(DEFUN |executeQuietCommand| () + (PROG (|$QuietCommand| |stringBuf|) + (DECLARE (SPECIAL |$QuietCommand|)) + (RETURN + (PROGN + (SPADLET |$QuietCommand| 'T) + (SPADLET |stringBuf| (MAKE-STRING 512)) + (|sockGetString| |$MenuServer| |stringBuf| 512) + (CATCH '|coerceFailure| + (CATCH '|top_level| + (CATCH 'SPAD_READER (|parseAndInterpret| |stringBuf|)))))))) + +;-- Includued for compatability with old-parser systems +;serverLoop() == +; IN_-STREAM: fluid := CURINSTREAM +; _*EOF_*: fluid := NIL +; while not $EndServerSession and not _*EOF_* repeat +; if $Prompt then (PRINC MKPROMPT(); FINISH_-OUTPUT()) +; $Prompt := NIL +; action := serverSwitch() +; action = $CallInterp => +; CATCH('coerceFailure,CATCH('top__level, CATCH('SPAD__READER, +; parseAndInterpret READ_-LINE(CURINSTREAM) ))) +; PRINC MKPROMPT() +; FINISH_-OUTPUT() +; sockSendInt($SessionManager, $EndOfOutput) +; action = $CreateFrame => +; frameName := GENTEMP('"frame") +; addNewInterpreterFrame(frameName) +; $frameAlist := [[$frameNumber,:frameName], :$frameAlist] +; $currentFrameNum := $frameNumber +; sockSendInt($SessionManager, $frameNumber) +; $frameNumber := $frameNumber + 1 +; sockSendString($SessionManager, MKPROMPT()) +; action = $SwitchFrames => +; $currentFrameNum := sockGetInt($SessionManager) +; currentFrame := LASSOC($currentFrameNum, $frameAlist) +; changeToNamedInterpreterFrame currentFrame +; action = $EndSession => +; $EndServerSession := true +; action = $LispCommand => +; stringBuf := MAKE_-STRING 512 +; sockGetString($MenuServer, stringBuf, 512) +; form := unescapeStringsInForm READ_-FROM_-STRING stringBuf +; EVAL form +; action = $QuietSpadCommand => +; executeQuietCommand() +; action = $SpadCommand => +; stringBuf := MAKE_-STRING 512 +; sockGetString($MenuServer, stringBuf, 512) +; CATCH('coerceFailure,CATCH('top__level, CATCH('SPAD__READER, +; parseAndInterpret stringBuf))) +; PRINC MKPROMPT() +; FINISH_-OUTPUT() +; sockSendInt($SessionManager, $EndOfOutput) +; NIL +; if _*EOF_* then $Prompt := true +; NIL + +(DEFUN |serverLoop| () + (PROG (IN-STREAM *EOF* |action| |frameName| |currentFrame| |form| + |stringBuf|) + (DECLARE (SPECIAL IN-STREAM *EOF*)) + (RETURN + (SEQ (PROGN + (SPADLET IN-STREAM CURINSTREAM) + (SPADLET *EOF* NIL) + (DO () + ((NULL (AND (NULL |$EndServerSession|) (NULL *EOF*))) + NIL) + (SEQ (EXIT (PROGN + (COND + (|$Prompt| (PRINC (MKPROMPT)) + (FINISH-OUTPUT))) + (SPADLET |$Prompt| NIL) + (SPADLET |action| (|serverSwitch|)) + (COND + ((BOOT-EQUAL |action| |$CallInterp|) + (CATCH '|coerceFailure| + (CATCH '|top_level| + (CATCH 'SPAD_READER + (|parseAndInterpret| + (|read-line| CURINSTREAM))))) + (PRINC (MKPROMPT)) (FINISH-OUTPUT) + (|sockSendInt| |$SessionManager| + |$EndOfOutput|)) + ((BOOT-EQUAL |action| |$CreateFrame|) + (SPADLET |frameName| + (GENTEMP (MAKESTRING "frame"))) + (|addNewInterpreterFrame| |frameName|) + (SPADLET |$frameAlist| + (CONS + (CONS |$frameNumber| + |frameName|) + |$frameAlist|)) + (SPADLET |$currentFrameNum| + |$frameNumber|) + (|sockSendInt| |$SessionManager| + |$frameNumber|) + (SPADLET |$frameNumber| + (PLUS |$frameNumber| 1)) + (|sockSendString| |$SessionManager| + (MKPROMPT))) + ((BOOT-EQUAL |action| |$SwitchFrames|) + (SPADLET |$currentFrameNum| + (|sockGetInt| + |$SessionManager|)) + (SPADLET |currentFrame| + (LASSOC |$currentFrameNum| + |$frameAlist|)) + (|changeToNamedInterpreterFrame| + |currentFrame|)) + ((BOOT-EQUAL |action| |$EndSession|) + (SPADLET |$EndServerSession| 'T)) + ((BOOT-EQUAL |action| |$LispCommand|) + (SPADLET |stringBuf| (MAKE-STRING 512)) + (|sockGetString| |$MenuServer| + |stringBuf| 512) + (SPADLET |form| + (|unescapeStringsInForm| + (READ-FROM-STRING |stringBuf|))) + (EVAL |form|)) + ((BOOT-EQUAL |action| + |$QuietSpadCommand|) + (|executeQuietCommand|)) + ((BOOT-EQUAL |action| |$SpadCommand|) + (SPADLET |stringBuf| (MAKE-STRING 512)) + (|sockGetString| |$MenuServer| + |stringBuf| 512) + (CATCH '|coerceFailure| + (CATCH '|top_level| + (CATCH 'SPAD_READER + (|parseAndInterpret| |stringBuf|)))) + (PRINC (MKPROMPT)) (FINISH-OUTPUT) + (|sockSendInt| |$SessionManager| + |$EndOfOutput|)) + ('T NIL)))))) + (COND (*EOF* (SPADLET |$Prompt| 'T))) + NIL))))) + +;parseAndEvalToHypertex str == +; lines := parseAndEvalToStringForHypertex str +; len := LENGTH lines +; sockSendInt($MenuServer, len) +; for s in lines repeat +; sockSendString($MenuServer, s) + +(DEFUN |parseAndEvalToHypertex| (|str|) + (PROG (|lines| |len|) + (RETURN + (SEQ (PROGN + (SPADLET |lines| + (|parseAndEvalToStringForHypertex| |str|)) + (SPADLET |len| (LENGTH |lines|)) + (|sockSendInt| |$MenuServer| |len|) + (DO ((G166130 |lines| (CDR G166130)) (|s| NIL)) + ((OR (ATOM G166130) + (PROGN (SETQ |s| (CAR G166130)) NIL)) + NIL) + (SEQ (EXIT (|sockSendString| |$MenuServer| |s|))))))))) + +;parseAndEvalToString str == +; $collectOutput:local := true +; $outputLines: local := nil +; $IOindex: local := nil +; v := CATCH('SPAD__READER, CATCH('top__level, parseAndEvalStr str)) +; v = 'restart => ['"error"] +; NREVERSE $outputLines + +(DEFUN |parseAndEvalToString| (|str|) + (PROG (|$collectOutput| |$outputLines| |$IOindex| |v|) + (DECLARE (SPECIAL |$collectOutput| |$outputLines| |$IOindex|)) + (RETURN + (PROGN + (SPADLET |$collectOutput| 'T) + (SPADLET |$outputLines| NIL) + (SPADLET |$IOindex| NIL) + (SPADLET |v| + (CATCH 'SPAD_READER + (CATCH '|top_level| (|parseAndEvalStr| |str|)))) + (COND + ((BOOT-EQUAL |v| '|restart|) (CONS (MAKESTRING "error") NIL)) + ('T (NREVERSE |$outputLines|))))))) + +;parseAndEvalToStringForHypertex str == +; $collectOutput:local := true +; $outputLines: local := nil +; v := CATCH('SPAD__READER, CATCH('top__level, parseAndEvalStr str)) +; v = 'restart => ['"error"] +; NREVERSE $outputLines + +(DEFUN |parseAndEvalToStringForHypertex| (|str|) + (PROG (|$collectOutput| |$outputLines| |v|) + (DECLARE (SPECIAL |$collectOutput| |$outputLines|)) + (RETURN + (PROGN + (SPADLET |$collectOutput| 'T) + (SPADLET |$outputLines| NIL) + (SPADLET |v| + (CATCH 'SPAD_READER + (CATCH '|top_level| (|parseAndEvalStr| |str|)))) + (COND + ((BOOT-EQUAL |v| '|restart|) (CONS (MAKESTRING "error") NIL)) + ('T (NREVERSE |$outputLines|))))))) + +;parseAndEvalToStringEqNum str == +; $collectOutput:local := true +; $outputLines: local := nil +; v := CATCH('SPAD__READER, CATCH('top__level, parseAndEvalStr str)) +; v = 'restart => ['"error"] +; NREVERSE $outputLines + +(DEFUN |parseAndEvalToStringEqNum| (|str|) + (PROG (|$collectOutput| |$outputLines| |v|) + (DECLARE (SPECIAL |$collectOutput| |$outputLines|)) + (RETURN + (PROGN + (SPADLET |$collectOutput| 'T) + (SPADLET |$outputLines| NIL) + (SPADLET |v| + (CATCH 'SPAD_READER + (CATCH '|top_level| (|parseAndEvalStr| |str|)))) + (COND + ((BOOT-EQUAL |v| '|restart|) (CONS (MAKESTRING "error") NIL)) + ('T (NREVERSE |$outputLines|))))))) + +;parseAndInterpToString str == +; v := applyWithOutputToString('parseAndEvalStr, [str]) +; breakIntoLines CDR v + +(DEFUN |parseAndInterpToString| (|str|) + (PROG (|v|) + (RETURN + (PROGN + (SPADLET |v| + (|applyWithOutputToString| '|parseAndEvalStr| + (CONS |str| NIL))) + (|breakIntoLines| (CDR |v|)))))) + +;parseAndEvalStr string == +; $InteractiveMode :fluid := true +; $BOOT: fluid := NIL +; $SPAD: fluid := true +; $e:fluid := $InteractiveFrame +; parseAndEvalStr1 string + +(DEFUN |parseAndEvalStr| (|string|) + (PROG (|$InteractiveMode| $BOOT $SPAD |$e|) + (DECLARE (SPECIAL |$InteractiveMode| $BOOT $SPAD |$e|)) + (RETURN + (PROGN + (SPADLET |$InteractiveMode| 'T) + (SPADLET $BOOT NIL) + (SPADLET $SPAD 'T) + (SPADLET |$e| |$InteractiveFrame|) + (|parseAndEvalStr1| |string|))))) + +;parseAndEvalStr1 string == +; string.0 = char '")" => +; doSystemCommand SUBSEQ(string, 1) +; processInteractive(ncParseFromString string, NIL) + +(DEFUN |parseAndEvalStr1| (|string|) + (COND + ((BOOT-EQUAL (ELT |string| 0) (|char| (MAKESTRING ")"))) + (|doSystemCommand| (SUBSEQ |string| 1))) + ('T (|processInteractive| (|ncParseFromString| |string|) NIL)))) + +;protectedEVAL x == +; error := true +; val := NIL +; UNWIND_-PROTECT((val := EVAL x; error := NIL), +; error => (resetStackLimits(); sendHTErrorSignal())) +; val + +(DEFUN |protectedEVAL| (|x|) + (PROG (|val| |error|) + (RETURN + (SEQ (PROGN + (SPADLET |error| 'T) + (SPADLET |val| NIL) + (SEQ (UNWIND-PROTECT + (PROGN + (SPADLET |val| (EVAL |x|)) + (SPADLET |error| NIL)) + (COND + (|error| (EXIT (PROGN + (|resetStackLimits|) + (|sendHTErrorSignal|)))))) + (EXIT |val|))))))) + +@ +\eject +\begin{thebibliography}{99} +\bibitem{1} nothing +\end{thebibliography} +\end{document}