aboutsummaryrefslogtreecommitdiff
path: root/src/interp/def.lisp
diff options
context:
space:
mode:
Diffstat (limited to 'src/interp/def.lisp')
-rw-r--r--src/interp/def.lisp668
1 files changed, 0 insertions, 668 deletions
diff --git a/src/interp/def.lisp b/src/interp/def.lisp
deleted file mode 100644
index d7d629b8..00000000
--- a/src/interp/def.lisp
+++ /dev/null
@@ -1,668 +0,0 @@
-;; Copyright (c) 1991-2002, The Numerical Algorithms Group Ltd.
-;; All rights reserved.
-;; Copyright (C) 2007-2008, Gabriel Dos Reis.
-;; 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.
-
-
-; NAME: Def
-; PURPOSE: Defines BOOT code
-
-(IMPORT-MODULE "macros")
-
-(in-package "BOOT")
-
-(REPEAT (IN X '(
- (|:| |DEF-:|)
- (|::| |DEF-::|)
- (ELT DEF-ELT)
- (SETELT DEF-SETELT)
- (%LET DEF-LET)
- (COLLECT DEF-COLLECT)
- (LESSP DEF-LESSP)
- (|<| DEF-LESSP)
- (REPEAT DEF-REPEAT)
-;;(|TRACE,LET| DEF-TRACE-LET)
- (CATEGORY DEF-CATEGORY)
- (EQUAL DEF-EQUAL)
- (|is| DEF-IS)
- (SEQ DEF-SEQ)
- (|isnt| DEF-ISNT)
- (|where| DEF-WHERE)
-)) (PROGN (MAKEPROP (CAR X) '|DEF-TRAN| (CADR X)) (CADR X)))
-
-
-;;; Common Block
-
-(defparameter deftran nil)
-(defparameter $macroassoc nil)
-(defparameter $ne nil)
-
-(defparameter $op nil
-"$OP is globalized for construction of local function names, e.g.
-foo defined inside of fum gets renamed as fum,foo.")
-
-(defparameter $opassoc nil
-"$OPASSOC is a renaming accumulator to be used with SUBLIS.")
-
-(defparameter $BODY nil)
-
-(defun DEF (FORM SIGNATURE $BODY)
- (declare (ignore SIGNATURE))
- (let* ($opassoc
- ($op (first form))
- (argl (rest form))
- ($body (deftran $body))
- (argl (DEF-INSERT_LET argl))
- (arglp (DEF-STRINGTOQUOTE argl))
- ($body (|bootTransform| $body)))
- (|backendCompile| (SUBLIS $OPASSOC (list (list $OP (list 'LAM arglp $body)))))))
-
-; We are making shallow binding cells for these functions as well
-
-(mapcar #'(lambda (x) (MAKEPROP (FIRST X) 'DEF-TRAN (SECOND X)))
- '((\: DEF-\:) (\:\: DEF-\:\:) (ELT DEF-ELT)
- (SETELT DEF-SETELT) (SPADLET DEF-LET)
- (SEQ DEF-SEQ) (COLLECT DEF-COLLECT)
- (REPEAT DEF-REPEAT) (TRACE-LET DEF-TRACE-LET)
- (CATEGORY DEF-CATEGORY) (EQUAL DEF-EQUAL)
- (|is| DEF-IS) (|isnt| DEF-ISNT) (|where| DEF-WHERE)))
-
-(defun DEF-EQUAL (X)
- (COND ((NOT (CDR X)) (CONS 'EQUAL X))
- ((OR (MEMBER '(|One|) X) (MEMBER '(|Zero|) X)
- (integerp (FIRST X)) (integerp (SECOND X))) (CONS 'EQL X))
- ; ((AND (EQCAR (FIRST X) 'QUOTE) (IDENTP (CADAR X))) (CONS 'EQ X))
- ((NOT (FIRST X)) (LIST 'NULL (SECOND X)))
- ((NOT (SECOND X)) (LIST 'NULL (FIRST X)))
- ; ((AND (EQCAR (SECOND X) 'QUOTE) (IDENTP (CADADR X))) (CONS 'EQ X))
- ($BOOT (CONS 'BOOT-EQUAL X))
- ((CONS 'EQUAL X))))
-
-(defun DEF-LESSP (x)
- (cond ((null (cdr x)) (cons '< x))
- ((eq (cadr x) 0) (list 'minusp (car x)))
- ((and (smint-able (car x)) (smint-able (cadr x)))
- (cons 'qslessp x))
- ('t (list '> (CADR x) (CAR x)))))
-
-(defun smint-able (x)
- (or (smintp x)
- (and (pairp x) (memq (car x) '(|One| |Zero| LENGTH \# QCSIZE QVSIZE QLENGTH)))))
-
-(defun DEF-PROCESS (X &aux $MACROASSOC)
- (COND ((EQCAR X 'DEF) (DEF (SECOND X) (THIRD X) (FIRST (CDDDDR X))))
- ((EQCAR X 'MDEF) (B-MDEF (SECOND X) (THIRD X) (FIRST (CDDDDR X))))
- ((AND (EQCAR X 'WHERE) (EQCAR (cadr X) 'DEF))
- (let* ((u (cadr X)) (Y (cdr U)))
- (DEF-PROCESS (LIST 'DEF
- (car Y)
- (car (setq Y (cdr Y)))
- (car (setq Y (cdr Y)))
- (CONS 'WHERE (cons (car (setq Y (cdr Y))) (cddr X)))))))
- ((IS-CONSOLE |$OutputStream|)
- (SAY " VALUE = " (EVAL (DEFTRAN X))))
- ((print-full (DEFTRAN X)))))
-
-(defun B-MDEF (FORM SIGNATURE $BODY)
- (declare (ignore SIGNATURE))
- (let* ($OpAssoc
- ($op (first form)) (argl (cdr form))
- (GARGL (MAPCAR #'(LAMBDA (X) (GENSYM)) ARGL))
- ($BODY (SUBLISLIS GARGL ARGL (|bootTransform| (DEFTRAN $BODY))))
- ($BODY (LIST 'SUBLISLIS (CONS 'LIST GARGL) (LIST 'QUOTE GARGL)
- (LIST 'QUOTE $BODY))))
- (|backendCompile| (SUBLIS $OPASSOC
- (LIST (LIST $OP (LIST 'MLAMBDA (CONS () GARGL) $BODY)))))))
-
-(defun DEF-INNER (FORM SIGNATURE $BODY)
- "Same as DEF but assumes body has already been DEFTRANned"
- (let ($OpAssoc ($op (first form)) (argl (rest form)))
- (let* ((ARGL (DEF-INSERT_LET ARGL))
- (ARGLP (DEF-STRINGTOQUOTE ARGL)))
- (|backendCompile| (SUBLIS $OPASSOC `((,$OP (LAM ,ARGLP ,$BODY))))))))
-
-(defun DEF-INSERT_LET (X)
- (if (ATOM X) X
- (CONS (DEF-INSERT_LET1 (FIRST X)) (DEF-INSERT_LET (CDR X)))))
-
-(defun DEF-INSERT_LET1 (Y)
- (if (EQCAR Y 'SPADLET)
- (COND ((IDENTP (SECOND Y))
- (setq $BODY
- (MKPROGN
- (LIST (DEF-LET (THIRD Y) (SECOND Y)) $BODY)))
- (setq Y (SECOND Y)))
- ((IDENTP (THIRD Y))
- (setq $BODY
- (MKPROGN (LIST (DEFTRAN Y) $BODY))) (setq Y (THIRD Y)))
- ((ERRHUH)))
- Y))
-
-(defun MKPROGN (L) (MKPF L 'PROGN))
-
-(defun DEF-STRINGTOQUOTE (X)
- (COND ((STRINGP X) (LIST 'QUOTE (INTERN X)))
- ((ATOM X) X)
- ((CONS (DEF-ADDLET (FIRST X)) (DEF-STRINGTOQUOTE (CDR X))))))
-
-(defun DEF-ADDLET (X)
- (if (ATOM X)
- (if (STRINGP X) `(QUOTE ,(intern x)) X)
- (let ((g (gensym)))
- (setq $body (mkprogn
- (list (def-let (comp\,fluidize x) g)
- $body)))
- g)))
-
-(mapcar #'(lambda (x) (MAKEPROP (CAR X) 'RENAME (CDR X)))
- '((|true| 'T) (|otherwise| 'T) (|false| NIL)
- (|and| AND) (|or| OR) (|is| IS)
- (|list| LIST) (|cons| CONS) (|car| CAR) (|cdr| CDR)
- (|setDifference| SETDIFFERENCE) (INTERSECTION |intersection|)
- (|setIntersection| |intersection|) (|setUnion| |union|)
- (UNION |union|) (REMOVE |remove|) (MEMBER |member|) (ASSOC |assoc|)
- (READ VMREAD) (READ-LINE |read-line|)
- (|apply| APPLY) (|lastNode| LASTPAIR) (LAST |last|)
- (|in| |member|) (|strconc| STRCONC) (|append| APPEND)
- (|copy| COPY) (DELETE |delete|) (RASSOC |rassoc|)
- (|size| SIZE) (|nconc| NCONC)
- (|setPart| SETELT) (|where| WHERE)
- (|first| CAR) (|rest| CDR) (|substitute| MSUBST)
- (|removeDuplicates| REMDUP) (|reverse| REVERSE) (|nreverse| NREVERSE)
- (|drop| DROP) (|take| TAKE) (|croak| CROAK) (|genvar| GENVAR)
- (|mkpf| MKPF) (^= NEQUAL) (= EQUAL) (- SPADDIFFERENCE)
- (+ PLUS) (* TIMES) (/ QUOTIENT)
- (** EXPT) (|return| RETURN) (|exit| EXIT) (\| SUCHTHAT)
- (^ NULL) (|not| NULL) (NOT NULL) (REDUCE spadReduce) (DO spadDo)
- (|atom| ATOM) (|nil| NIL) (|null| NULL) (GET GETL)
- (T T$)))
-
-; This two-level call allows DEF-RENAME to be locally bound to do
-; nothing (see boot2Lisp) yet still allow function call (lisp2BootAndComp)
-
-(defun DEF-RENAME (X) (DEF-RENAME1 X))
-
-(defun DEF-RENAME1 (X)
- (COND ((symbolp X) (let ((y (get x 'rename))) (if y (first y) x)))
- ((and (listp X) X)
- (if (EQCAR X 'QUOTE)
- X
- (CONS (DEF-RENAME1 (FIRST X)) (DEF-RENAME1 (CDR X)))))
- (X)))
-
-(defun DEFTRAN (X)
- (let (op Y)
- (COND ((STRINGP X) (DEF-STRING X))
- ((IDENTP X) (COND ((LASSOC X $MACROASSOC)) (X)))
- ((ATOM X) X)
- ((EQ (setq OP (FIRST X)) 'WHERE) (DEF-WHERE (CDR X)))
- ((EQ OP 'REPEAT) (DEF-REPEAT (CDR X)))
- ((EQ OP 'COLLECT) (DEF-COLLECT (CDR X)))
- ((EQ OP 'MAKESTRING)
- (COND ((STRINGP (SECOND X)) X)
- ((EQCAR (SECOND X) 'QUOTE)
- (LIST 'MAKESTRING (STRINGIMAGE (CADADR X))))
- ((LIST 'MAKESTRING (DEFTRAN (SECOND X)) )) ))
- ((EQ OP 'QUOTE)
- (if (STRINGP (setq y (SECOND X))) (LIST 'MAKESTRING y)
- (if (and (identp y) (char= (elt (pname y) 0) #\.))
- `(intern ,(pname y) ,(package-name *package*)) x)))
- ((EQ OP 'IS) (|defIS| (CADR X) (CADDR X)))
- ((EQ OP 'SPADLET) (DEF-LET (CADR X) (caddr x)))
- ((EQ OP 'DCQ) (LIST 'DCQ (SECOND X) (DEFTRAN (THIRD X))))
- ((EQ OP 'COND) (CONS 'COND (DEF-COND (CDR X))))
- ((member (FIRST X) '(|sayBrightly| SAY MOAN CROAK) :test #'eq)
- (DEF-MESSAGE X))
- ((setq Y (GETL (FIRST X) 'DEF-TRAN))
- (funcall Y (MAPCAR #'DEFTRAN (CDR X))))
- ((mapcar #'DEFTRAN X)))))
-
-(defun DEF-SEQ (U) (SEQOPT (CONS 'SEQ U)))
-
-(defun DEF-MESSAGE (U) (CONS (FIRST U) (mapcar #'def-message1 (cdr u))))
-
-(defun DEF-MESSAGE1 (V)
- (COND ((AND (STRINGP V) (> (SIZE V) 0) (NOT (EQ (ELT V 0) '\%)))
- (LIST 'MAKESTRING V))
- ((EQCAR V 'CONS) (LIST 'CONS (DEF-MESSAGE1 (SECOND V))
- (DEF-MESSAGE1 (THIRD V))))
- ((DEFTRAN V))))
-
-(defun |DEF-:| (X &aux Y)
- (DCQ (x y) x)
- `(SPADLET ,(if (or (eq y '|fluid|)
- (and (identp x) (char= #\$ (ELT (PNAME X) 0))))
- `(FLUID ,X) X)
- NIL))
-
-(defmacro |DEF-::| (X)
- (let ((expr (first x)) (type (second x)))
- (if (EQUAL TYPE '(|Triple|)) EXPR (ERRHUH))))
-
-(defun DEF-COLLECT (L) (DEF-IT 'COLLECT (MAPCAR #'DEFTRAN (HACKFORIS L))))
-
-(defun DEF-REPEAT (L) (DEF-IT 'REPEAT (mapcar #'DEFTRAN (HACKFORIS L))))
-
-(defun HACKFORIS (L) (mapcar #'hackforis1 L))
-
-(defun HACKFORIS1 (X)
- (if (AND (MEMBER (KAR X) '(IN ON)) (EQCAR (SECOND X) 'IS))
- (CONS (FIRST X) (CONS (CONS 'SPADLET (CDADR X)) (CDDR X)))
- X))
-
-(defun DEF-select (L)
- (cond ((IDENTP (FIRST L)) (DEF-select1 (FIRST L) (SECOND L)))
- ((LET* ((G (GENSYM))
- (U (DEF-select1 G (SECOND L))))
- (LIST 'PROGN (LIST 'SPADLET G (FIRST L)) U)))))
-
-(defun DEF-select1 (X Y)
- (if (EQCAR Y 'SEQ)
- (CONS 'COND (DEF-select2 X (CDR Y)))
- (MOAN (format nil "Unexpected CASE body: ~S" Y))))
-
-(defun DEF-select2 (X Y)
- (let (u v)
- (COND ((NOT Y) (MOAN "Unexpected CASE clause termination"))
- ((EQCAR (setq U (FIRST Y)) 'EXIT)
- (LIST (LIST ''T (SECOND U))))
- ((AND (EQCAR U 'COND) (NOT (CDDR U))
- (EQCAR (SECOND (setq V (SECOND U))) 'EXIT))
- (CONS (LIST (DEF-IS (LIST X (FIRST V))) (CADADR V))
- (DEF-select2 X (CDR Y))))
- ((MOAN (format nil "Unexpected CASE clause: ~S" (FIRST Y)))))))
-
-(defun DEF-IT (FN L)
- (setq L (reverse L))
- (let ((B (first L)))
- (let ((it (DEF-IN2ON (NREVERSE (rest L)))))
- (let ((itp
- (apply #'APPEND
- (mapcar
- #'(lambda (x &aux OP Y G)
- (if (AND (MEMBER (setq OP (FIRST X)) '(IN ON))
- (NOT (ATOM (SECOND X))))
- (if (EQCAR (setq Y (SECOND X)) 'SPADLET)
- (if (ATOM (setq G (SECOND Y)))
- (LIST `(,OP ,G
- ,(DEFTRAN (THIRD X)))
- `(RESET
- ,(DEF-LET
- (DEFTRAN
- (THIRD Y)) G)))
- (ERRHUH))
- (LIST
- `(,OP ,(setq G (GENSYM))
- ,(DEFTRAN (THIRD X)))
- `(RESET
- ,(DEF-LET (DEFTRAN (SECOND X))
- G))))
- `(,X)))
- IT))))
- (CONS FN (NCONC ITP (LIST B)))))))
-
-(defun DEF-IN2ON (IT)
- (mapcar #'(lambda (x) (let (u)
- (COND
- ((AND (EQCAR X 'IN) (EQCAR (THIRD X) '|tails|))
- (LIST 'ON (SECOND X) (SECOND (THIRD X))))
- ((AND (EQCAR X 'IN) (EQCAR (setq U (THIRD X)) 'SEGMENT))
- (COND
- ((THIRD U) (LIST 'STEP (SECOND X) (SECOND U) 1 (THIRD U)))
- ((LIST 'STEP (SECOND X) (SECOND U) 1)) ))
- ((AND (EQCAR X 'INBY) (EQCAR (setq U (THIRD X)) 'SEGMENT))
- (COND
- ((THIRD U) (LIST 'STEP (SECOND X) (SECOND U) (|last| x) (THIRD U)))
- ((LIST 'STEP (SECOND X) (SECOND U) (|last| x))) ))
- (X))))
- IT))
-
-(defun DEF-COND (L)
- (COND ((NOT L) NIL)
- ((CONS (MAPCAR #'DEFTRAN (FIRST L)) (DEF-COND (CDR L))))))
-
-(defun DEF-LET (FORM RHS)
- (setq FORM (if (EQCAR FORM '\:) FORM (macroexpand FORM)))
- (prog (F1 F2)
- (COND ((EQCAR FORM '\:)
- (SPADLET F1 (DEFTRAN FORM))
- (SPADLET F2 (DEFTRAN (LIST 'SPADLET (CADR FORM) RHS)))
- (COND ((AND (EQ (CAR F2) 'SPADLET) (EQUAL (CADR F2) (CADR FORM)))
- (RETURN (LIST 'SPADLET (CADR F1) (CADDR F2)) ))
- ('T (RETURN (LIST 'PROGN F1 F2)) )) )
- ((EQCAR FORM 'ELT) (RETURN
- (DEFTRAN (LIST 'SETELT (CADR FORM) (CADDR FORM) RHS)) )))
- (RETURN
- (COND (|$useDCQnotLET| (|defLETdcq| FORM (DEFTRAN RHS)))
- ('T (|defLET| FORM (DEFTRAN RHS)))))))
-
-(defun |defLETdcq| (FORM RHS &AUX G NAME)
- ;; see defLET in G-BOOT BOOT
- (COND
- ((IDENTP FORM) (LIST 'SPADLET FORM RHS))
- ((IDENTP RHS)
- (LIST 'COND (LIST (DEFTRAN (LIST 'IS RHS FORM)) RHS)
- (LIST ''T (LIST 'LET_ERROR (LIST 'MAKESTRING
- (MK_LEFORM FORM)) RHS))))
- ((AND (EQ (CAR RHS) 'SPADLET) (IDENTP (SETQ NAME (CADR RHS)) ))
- (SPADLET G (GENSYM))
- (LIST 'COND (LIST (SUBST RHS G (DEFTRAN (LIST 'IS G FORM))) NAME)
- (LIST ''T (LIST 'LET_ERROR (LIST 'MAKESTRING
- (MK_LEFORM FORM)) NAME))))
- ('T (SPADLET G (GENSYM))
- (LIST 'COND (LIST (SUBST (LIST 'SPADLET G RHS) G
- (DEFTRAN (LIST 'IS G FORM))) G)
- (LIST ''T (LIST 'LET_ERROR (LIST 'MAKESTRING
- (MK_LEFORM FORM)) G)) ) )))
-
-
-(defun LET_ERROR (FORM VAL)
- (|systemError| (format nil "~S is not matched by structure ~S~%" FORM VAL)))
-
-(defun DEF-ISNT (X) (DEFTRAN (LIST 'NULL (CONS 'IS X))))
-
-(defparameter $IS-GENSYMLIST nil)
-
-(defparameter Initial-Gensym (list (gensym)))
-
-(defun DEF-IS (X)
- (let (($IS-GENSYMLIST Initial-Gensym))
- (DEF-IS2 (first X) (second x))))
-
-(defun IS-GENSYM ()
- (if (NOT (CDR $IS-GENSYMLIST)) (RPLACD $IS-GENSYMLIST (LIST (GENSYM))))
- (pop $IS-GENSYMLIST))
-
-(defparameter $IS-EQLIST nil)
-(defparameter $IS-SPILL_LIST nil)
-
-(defun DEF-IS2 (FORM STRUCT)
- (let ($IS-EQLIST $IS-SPILL_LIST (FORM (DEFTRAN FORM)))
- (if (EQCAR STRUCT '|%Comma|)
- (MOAN "you must use square brackets around right arg. to" '%b "is" '%d))
- (let* ((X (DEF-IS-EQLIST (DEF-IS-REMDUP STRUCT)))
- (CODE (if (IDENTP X)
- (MKPF (SUBST FORM X $IS-EQLIST) 'AND)
- (MKPF `((DCQ ,X ,FORM) . ,$IS-EQLIST) 'AND))))
- (let ((CODE (MKPF `(,CODE . ,$IS-SPILL_LIST) 'AND)))
- (if $TRACELETFLAG
- (let ((L (remove-if #'gensymp (listofatoms x))))
- `(PROG1 ,CODE
- ,@(mapcar #'(lambda (y) `(/tracelet-print ,y ,y)) L)))
- CODE)))))
-
-(defun DEF-STRING (X)
- ;; following patches needed to fix reader bug in Lucid Common Lisp
- (if (and (> (size x) 0) (or (char= (elt x 0) #\.) (char= (elt x 0) #\Page)))
- `(INTERN ,X ,(package-name *PACKAGE*))
- `(QUOTE ,(DEFTRAN (INTERN X)))))
-
-(defun DEF-IS-EQLIST (STR)
- (let (g e)
- (COND ((NOT STR) (PUSH `(EQ ,(setq G (IS-GENSYM)) NIL) $IS-EQLIST) G)
- ((EQ STR '\.) (IS-GENSYM))
- ((IDENTP STR) STR)
- ((STRINGP STR)
- (setq E (DEF-STRING STR))
- (PUSH (LIST (if (ATOM (SECOND E)) 'EQ 'EQUAL)
- (setq G (IS-GENSYM)) E)
- $IS-EQLIST)
- G)
- ((OR (NUMBERP STR) (MEMBER STR '((|Zero|) (|One|))))
- (PUSH (LIST 'EQ (setq G (IS-GENSYM)) STR) $IS-EQLIST)
- G)
- ((ATOM STR) (ERRHUH))
- ((EQCAR STR 'SPADLET)
- (COND ((IDENTP (SECOND STR))
- (PUSH (DEF-IS2 (cadr str) (caddr STR)) $IS-SPILL_LIST)
- (SECOND STR))
- ((IDENTP (THIRD STR))
- (PUSH (DEFTRAN STR) $IS-SPILL_LIST) (THIRD STR))
- ((ERRHUH)) ))
- ((EQCAR STR 'QUOTE)
- (PUSH (LIST (COND ((ATOM (SECOND STR)) 'EQ)
- ('EQUAL))
- (setq G (IS-GENSYM)) STR) $IS-EQLIST) G)
- ((EQCAR STR 'LIST) (DEF-IS-EQLIST (LIST2CONS STR)))
- ((OR (EQCAR STR 'CONS) (EQCAR STR 'VCONS))
- (CONS (DEF-IS-EQLIST (SECOND STR)) (DEF-IS-EQLIST (THIRD STR))))
- ((EQCAR STR 'APPEND)
- (if (NOT (IDENTP (SECOND STR))) (ERROR "CANT!"))
- (PUSH (DEF-IS2 (LIST 'REVERSE (setq G (IS-GENSYM)))
- (DEF-IS-REV (THIRD STR) (SECOND STR)))
- $IS-EQLIST)
- (COND ((EQ (SECOND STR) '\.) ''T)
- ((PUSH (SUBST (SECOND STR) 'L '(OR (setq L (NREVERSE L)) T))
-
- $IS-SPILL_LIST)))
- G)
- ((ERRHUH)))))
-
-(defparameter $vl nil)
-
-(defun def-is-remdup (x) (let ($vl) (def-is-remdup1 x)))
-
-(defun def-is-remdup1 (x)
- (let (rhs lhs g)
- (COND ((NOT X) NIL)
- ((EQ X '\.) X)
- ((IDENTP X)
- (COND ((MEMBER X $VL)
- (PUSH (LIST 'EQUAL (setq G (IS-GENSYM)) X) $IS-EQLIST) G)
- ((PUSH X $VL) X)))
- ((MEMBER X '((|Zero|) (|One|))) X)
- ((ATOM X) X)
- ((EQCAR X 'SPADLET)
- (setq RHS (DEF-IS-REMDUP1 (THIRD X)))
- (setq LHS (DEF-IS-REMDUP1 (SECOND X)))
- (LIST 'SPADLET LHS RHS))
- ((EQCAR X '%LET)
- (setq RHS (DEF-IS-REMDUP1 (THIRD X)))
- (setq LHS (DEF-IS-REMDUP1 (SECOND X)))
- (LIST '%LET LHS RHS))
- ((EQCAR X 'QUOTE) X)
- ((AND (EQCAR X 'EQUAL) (NOT (CDDR X)))
- (PUSH (LIST 'EQUAL (setq G (IS-GENSYM)) (SECOND X)) $IS-EQLIST) G)
- ((MEMBER (FIRST X) '(LIST APPEND CONS VCONS))
- (CONS (COND ((EQ (FIRST X) 'VCONS) 'CONS) ( (FIRST X)))
- (mapcar #'def-is-remdup1 (cdr x))))
- ((ERRHUH)))))
-
-(defun LIST2CONS (X)
-"Produces LISP code for constructing a list, involving only CONS."
- (LIST2CONS-1 (CDR X)))
-
-(defun LIST2CONS-1 (X)
- (if (NOT X) NIL (LIST 'CONS (FIRST X) (LIST2CONS-1 (CDR X)))))
-
-(defun DEF-IS-REV (X A)
- (let (y)
- (if (EQ (FIRST X) 'CONS)
- (COND ((NOT (THIRD X)) (LIST 'CONS (SECOND X) A))
- ((setq Y (DEF-IS-REV (THIRD X) NIL))
- (setf (THIRD Y) (LIST 'CONS (SECOND X) A))
- Y))
- (ERRHUH))))
-
-(defparameter $DEFSTACK nil)
-
-(defun DEF-WHERE (args)
- (let ((x (car args)) (y (cdr args)) $DEFSTACK)
- (let ((u (DEF-WHERECLAUSELIST Y)))
- (mapc #'(lambda (X) (DEF-INNER (FIRST X) NIL
- (SUBLIS $OPASSOC (SECOND X))))
- $DEFSTACK)
- (MKPROGN (NCONC U (LIST (DEFTRAN X)))))))
-
-(defun DEF-WHERECLAUSELIST (L)
- (if (NOT (CDR L))
- (DEF-WHERECLAUSE (DEFTRAN (FIRST L)))
- (REDUCE #'APPEND
- (mapcar #'(lambda (u) (def-whereclause (deftran u))) L))))
-
-(defun DEF-WHERECLAUSE (X)
- (COND ((OR (EQCAR X 'SEQ) (EQCAR X 'PROGN))
- (reduce #'append (mapcar #'def-whereclause (cdr x))))
- ((EQCAR X 'DEF) (WHDEF (SECOND X) (FIRST (CDDDDR X))) NIL)
- ((AND (EQCAR X '|exit|) (EQCAR (SECOND X) 'DEF))
- (WHDEF (CADADR X) (FIRST (CDDDDR (SECOND X)) )) NIL)
- ((LIST X))))
-
-(defun WHDEF (X Y)
- "Returns no value -- side effect is to do a compilation or modify a global."
- (prog ((XP (if (ATOM X) (LIST X) X)) Op)
- (COND ((NOT (CDR XP))
- (RETURN (PUSH (CONS (FIRST XP) Y) $MACROASSOC))))
- (setq OP (INTERNL (PNAME $OP) "\," (FIRST XP)))
- (SETQ $OPASSOC (PUSH (CONS (FIRST XP) OP) $OPASSOC))
- (SETQ $DEFSTACK (CONS (LIST (CONS OP (CDR XP)) Y) $DEFSTACK))
- NIL))
-
-
-(mapcar #'(lambda (x) (MAKEPROP (first X) 'SEL\,FUNCTION (second X)))
- '((|aTree| 0) (|aMode| 1)
- (|aValue| 2) (|aModeSet| 3)
- (|aGeneral| 4) (|expr| CAR)
- (|mode| CADR) (|env| CADDR)
- (|mmDC| CAAR) (|cacheName| CADR)
- (|cacheType| CADDR) (|cacheReset| CADDDR)
- (|cacheCount| CADDDDR)(|mmSignature| CDAR)
- (|mmTarget| CADAR) (|mmCondition| CAADR)
- (|mmImplementation| CADADR)
- (|streamName| CADR) (|streamDef| CADDR)
- (|streamCode| CADDDR) (|opSig| CADR)
- (|attributes| CADDR) (|op| CAR)
- (|opcode| CADR) (|sig| CDDR)
- (|source| CDR) (|target| CAR)
- (|first| CAR) (|rest| CDR)))
-
-(defun DEF-ELT (args)
- (let ((EXPR (car args)) (SEL (cadr args)))
- (let (Y)
- (COND ((and (symbolp sel) (setq Y (GET SEL 'SEL\,FUNCTION)))
- (COND ((INTEGERP Y) (LIST 'ELT EXPR Y))
- ((LIST Y EXPR))))
- ((LIST 'ELT EXPR SEL))))))
-
-(defun DEF-SETELT (args)
- (let ((VAR (first args)) (SEL (second args)) (EXPR (third args)))
- (let ((y (and (symbolp sel) (get sel 'sel\,function))))
- (COND (y (COND ((INTEGERP Y) (LIST 'SETELT VAR Y EXPR))
- ((LIST 'RPLAC (LIST Y VAR) EXPR))))
- ((LIST 'SETELT VAR SEL EXPR))))))
-
-(defun DEF-CATEGORY (L)
- (let (siglist atlist)
- (mapcar #'(lambda (x) (if (EQCAR (KADR X) 'Signature)
- (PUSH X SIGLIST)
- (PUSH X ATLIST)))
- L)
- (LIST 'CATEGORY (MKQ (NREVERSE SIGLIST)) (MKQ (NREVERSE ATLIST)))))
-
-
-(defun LIST2STRING (X)
-"Converts a list to a string which looks like a printed list,
-except that elements are separated by commas."
- (COND ((ATOM X) (STRINGIMAGE X))
- ((STRCONC "(" (LIST2STRING (FIRST X)) (LIST2STRING1 (CDR X)) ")"))))
-
-(defun LIST2STRING1 (X)
- (COND
- ((NOT X) "")
- ((STRCONC "\," (LIST2STRING (FIRST X)) (LIST2STRING1 (CDR X))))))
-
-(defvar |$new2OldRenameAssoc|
- '((\QUAD . \.) (\' . QUOTE) (|nil| . NIL) (|append| . APPEND)
- (|union| . UNION) (|cons| . CONS)))
-
-(defun |new2OldLisp| (x) (|new2OldTran| (|postTransform| x)))
-
-(defun |new2OldTran| (x)
- (PROG (G10463 a b G10465 G10466 G10467 G10469 d G10470 c)
- (RETURN
- (prog nil
- (if (atom x)
- (RETURN (let ((y (ASSOC x |$new2OldRenameAssoc|)))
- (if y (cdr y) x))))
- (if (AND (dcq (g10463 a b . g10465) x)
- (null G10465)
- (EQ G10463 '|where|)
- (dcq (g10466 . g10467) b)
- (dcq ((g10469 d . g10470) . c) (reverse g10467))
- (null G10470)
- (EQ G10469 '|exit|)
- (EQ G10466 'SEQ)
- (OR (setq c (NREVERSE c)) 'T))
- (RETURN
- `(|where| ,(|new2OldTran| a) ,@(|new2OldTran| c)
- ,(|new2OldTran| d))))
- (return
- (case (car x)
- (QUOTE x)
- (DEF (|newDef2Def| x))
- (IF (|newIf2Cond| x))
- (|construct| (|newConstruct| (|new2OldTran| (cdr x))))
- (T `(,(|new2OldTran| (CAR x)) .
- ,(|new2OldTran| (CDR x))))))))))
-
-(defun |newDef2Def| (DEF-EXPR)
- (if (not (AND (= (length def-expr) 5) (eq (car def-expr) 'DEF)))
- (LET_ERROR "(DEF,form,a,b,c)" DEF-EXPR)
- (let ((form (second def-expr))
- (a (third def-expr))
- (b (fourth def-expr))
- (c (fifth def-expr)))
- `(DEF ,(|new2OldDefForm| form) ,(|new2OldTran| a)
- ,(|new2OldTran| b) ,(|new2OldTran| c)))))
-
-(defun |new2OldDefForm| (x)
- (cond ((ATOM x) (|new2OldTran| x))
- ((and (listp x)
- (listp (car x))
- (eq (caar x) '|is|)
- (= (length (car x)) 3))
- (let ((a (second (car x))) (b (third (car x))) (y (cdr x)))
- (|new2OldDefForm| `((SPADLET ,a ,b) ,@y))))
- ((CONS (|new2OldTran| (CAR x)) (|new2OldDefForm| (CDR x))))))
-
-(defun |newIf2Cond| (COND-EXPR)
- (if (not (AND (= (length cond-expr) 4) (EQ (car cond-expr) 'IF)))
- (LET_ERROR "(IF,a,b,c)" COND-EXPR))
- (let ((a (second COND-EXPR))
- (b (third COND-EXPR))
- (c (fourth COND-EXPR)))
- (setq a (|new2OldTran| a) b (|new2OldTran| b) c (|new2OldTran| c))
- (cond ((EQ c '|%noBranch|) `(if ,a ,b))
- (t `(if ,a ,b ,c)))))
-
-(defun |newConstruct| (l)
- (if (ATOM l) l
- `(CONS ,(CAR l) ,(|newConstruct| (CDR l)))))