67
`($ANY . (DISPLAY-FOR-TR ,(eq (caar form) '$ldisp)
69
,@(TR-ARGS (CDR FORM)))))
70
(DEF-SAME%TR $LDISP $DISP)
72
(DEF%TR $DISPLAY (FORM)
73
`($ANY . (DISPLAY-FOR-TR ,(EQ (CAAR FORM) '$LDISPLAY)
75
,@(MAPCAR #'TR-EXP-TO-DISPLAY (CDR FORM)))))
77
(DEF-SAME%TR $LDISPLAY $DISPLAY)
67
`($any . (display-for-tr ,(eq (caar form) '$ldisp)
69
,@(tr-args (cdr form)))))
70
(def-same%tr $ldisp $disp)
72
(def%tr $display (form)
73
`($any . (display-for-tr ,(eq (caar form) '$ldisplay)
75
,@(mapcar #'tr-exp-to-display (cdr form)))))
77
(def-same%tr $ldisplay $display)
79
79
;;; DISPLAY(F(X,Y,FOO()))
80
80
;;; (F X Y (FOO)) => (LET ((&G1 (FOO))) (list '(mequal) (LIST '(F) X Y &G1)
99
99
;;; be evaluated first. I don't seriously expect anyone to find this
102
(DEFVAR VALUE-ALIST NIL)
103
(DEFUN MAKE-VALUES (EXPR-ARGS)
104
(MAPCAR #'(LAMBDA (ARG)
105
(COND ((OR (ATOM ARG)
106
(MEMQ (CAR ARG) '(TRD-MSYMEVAL QUOTE)))
109
(LET ((SYM (GENSYM)))
110
(PUSH (CONS ARG SYM) VALUE-ALIST)
115
(EVAL-WHEN (COMPILE EVAL #-PDP10 LOAD)
117
(DEFSTRUCT (DISP-HACK-OB #+Maclisp TREE #-Maclisp :TREE)
120
(DEFSTRUCT (DISP-HACK-OB (:conc-name nil)( :type list )) ;;it wanted tree but that's illegal
124
(DEFUN OBJECT-FOR-DISPLAY-HACK (EXP)
127
#+cl :LEFT-OB #-cl LEFT-OB `',EXP
128
#+cl :RIGHT-OB #-cl RIGHT-OB EXP)
131
(LET ((V (OBJECT-FOR-DISPLAY-HACK (CADR EXP))))
133
#+cl :LEFT-OB #-cl LEFT-OB (LEFT-OB V)
134
#+cl :RIGHT-OB #-cl RIGHT-OB `(SIMPLIFY ,(RIGHT-OB V)))))
136
(LET ((VALS (MAKE-VALUES (CDR EXP))))
138
#+cl :LEFT-OB #-cl LEFT-OB `(LIST (LIST* ,(CAR VALS) '(ARRAY))
140
#+cl :RIGHT-OB #-cl RIGHT-OB `(MARRAYREF ,@VALS))))
142
; assume evaluation of arguments.
143
(LET ((VALS (MAKE-VALUES (CDDR EXP))))
145
#+cl :LEFT-OB #-cl LEFT-OB `(LIST '(,(CADR EXP)) ,@VALS)
146
#+cl :RIGHT-OB #-cl RIGHT-OB `(MFUNCTION-CALL ,(CADR EXP) ,@VALS))))
148
(LET ((OBS (MAPCAR #'OBJECT-FOR-DISPLAY-HACK (CDR EXP))))
150
#+cl :LEFT-OB #-cl LEFT-OB `(LIST ,@(MAPCAR #'(LAMBDA (U) (LEFT-OB U))
152
#+cl :RIGHT-OB #-cl RIGHT-OB `(LIST ,@(MAPCAR #'(LAMBDA (U) (RIGHT-OB U))
154
(QUOTE (MAKE-DISP-HACK-OB
155
#+cl :LEFT-OB #-cl LEFT-OB EXP
156
#+cl :RIGHT-OB #-cl RIGHT-OB EXP))
159
#+cl :LEFT-OB #-cl LEFT-OB `',(CADR EXP)
160
#+cl :RIGHT-OB #-cl RIGHT-OB EXP))
162
(COND ((OR (NOT (ATOM (CAR EXP)))
163
(GETL (CAR EXP) '(FSUBR FEXPR MACRO)))
165
#+cl :LEFT-OB #-cl LEFT-OB `',EXP
166
#+cl :RIGHT-OB #-cl RIGHT-OB EXP))
168
(LET ((VALS (MAKE-VALUES (CDR EXP))))
170
#+cl :LEFT-OB #-cl LEFT-OB `(LIST '(,(UNTRANS-OP (CAR EXP)))
172
#+cl :RIGHT-OB #-cl RIGHT-OB `(,(CAR EXP) ,@VALS)))))))))
174
(DEFUN TR-EXP-TO-DISPLAY (EXP)
175
(LET* ((LISP-EXP (DTRANSLATE EXP))
177
(OB (OBJECT-FOR-DISPLAY-HACK LISP-EXP))
178
(DISP `(LIST '(MEQUAL) ,(LEFT-OB OB) ,(RIGHT-OB OB))))
179
(SETQ VALUE-ALIST (NREVERSE VALUE-ALIST))
181
`((LAMBDA ,(MAPCAR #'CDR VALUE-ALIST) ,DISP)
182
,@(MAPCAR #'CAR VALUE-ALIST))
185
(DEFUN UNTRANS-OP (OP)
186
(OR (CDR (ASSQ OP '((ADD* . MPLUS)
102
(defvar value-alist nil)
103
(defun make-values (expr-args)
104
(mapcar #'(lambda (arg)
105
(cond ((or (atom arg)
106
(memq (car arg) '(trd-msymeval quote)))
109
(let ((sym (gensym)))
110
(push (cons arg sym) value-alist)
115
(eval-when (compile eval #-pdp10 load)
117
(defstruct (disp-hack-ob #+maclisp tree #-maclisp :tree)
120
(defstruct (disp-hack-ob (:conc-name nil)( :type list )) ;;it wanted tree but that's illegal
124
(defun object-for-display-hack (exp)
127
#+cl :left-ob #-cl left-ob `',exp
128
#+cl :right-ob #-cl right-ob exp)
131
(let ((v (object-for-display-hack (cadr exp))))
133
#+cl :left-ob #-cl left-ob (left-ob v)
134
#+cl :right-ob #-cl right-ob `(simplify ,(right-ob v)))))
136
(let ((vals (make-values (cdr exp))))
138
#+cl :left-ob #-cl left-ob `(list (list* ,(car vals) '(array))
140
#+cl :right-ob #-cl right-ob `(marrayref ,@vals))))
142
; assume evaluation of arguments.
143
(let ((vals (make-values (cddr exp))))
145
#+cl :left-ob #-cl left-ob `(list '(,(cadr exp)) ,@vals)
146
#+cl :right-ob #-cl right-ob `(mfunction-call ,(cadr exp) ,@vals))))
148
(let ((obs (mapcar #'object-for-display-hack (cdr exp))))
150
#+cl :left-ob #-cl left-ob `(list ,@(mapcar #'(lambda (u) (left-ob u))
152
#+cl :right-ob #-cl right-ob `(list ,@(mapcar #'(lambda (u) (right-ob u))
154
(quote (make-disp-hack-ob
155
#+cl :left-ob #-cl left-ob exp
156
#+cl :right-ob #-cl right-ob exp))
159
#+cl :left-ob #-cl left-ob `',(cadr exp)
160
#+cl :right-ob #-cl right-ob exp))
162
(cond ((or (not (atom (car exp)))
163
(getl (car exp) '(fsubr fexpr macro)))
165
#+cl :left-ob #-cl left-ob `',exp
166
#+cl :right-ob #-cl right-ob exp))
168
(let ((vals (make-values (cdr exp))))
170
#+cl :left-ob #-cl left-ob `(list '(,(untrans-op (car exp)))
172
#+cl :right-ob #-cl right-ob `(,(car exp) ,@vals)))))))))
174
(defun tr-exp-to-display (exp)
175
(let* ((lisp-exp (dtranslate exp))
177
(ob (object-for-display-hack lisp-exp))
178
(disp `(list '(mequal) ,(left-ob ob) ,(right-ob ob))))
179
(setq value-alist (nreverse value-alist))
181
`((lambda ,(mapcar #'cdr value-alist) ,disp)
182
,@(mapcar #'car value-alist))
185
(defun untrans-op (op)
186
(or (cdr (assq op '((add* . mplus)
194
194
;;; From RZ;COMBIN >
228
228
;;; T NIL NIL NIL))
230
; JPG made this an LSUBR now! win win win good old Jeff.
231
;(DEF%TR $TRIGREDUCE (FORM)
232
; (LET ((ARG1 (DTRANSLATE (CADR FORM)))
233
; (ARG2 (COND ((CDDR FORM) (DTRANSLATE (CADDR FORM)))
235
; `($ANY . #%(LET ((*TRIGRED T)
241
; ; gross hack, please fix me quick gjc!!!!
242
; (OR (SYMBOL-PLIST 'GCDRED) (LOAD (GET '$TRIGREDUCE 'AUTOLOAD)))
243
; (GCDRED (SP1 ,ARG1))))))
230
;; JPG made this an LSUBR now! win win win good old Jeff.
231
;;(DEF%TR $TRIGREDUCE (FORM)
232
;; (LET ((ARG1 (DTRANSLATE (CADR FORM)))
233
;; (ARG2 (COND ((CDDR FORM) (DTRANSLATE (CADDR FORM)))
235
;; `($ANY . #%(LET ((*TRIGRED T)
241
;; ; gross hack, please fix me quick gjc!!!!
242
;; (OR (SYMBOL-PLIST 'GCDRED) (LOAD (GET '$TRIGREDUCE 'AUTOLOAD)))
243
;; (GCDRED (SP1 ,ARG1))))))
246
246
;;; (DEFUN $APPLY1 FEXPR (L)
252
252
;;; (RETURN *EXPR)))
254
(DEF%TR $APPLY1 (FORM &AUX
257
(PUSH-AUTOLOAD-DEF '$APPLY1 '(APPLY1))
254
(def%tr $apply1 (form &aux
257
(push-autoload-def '$apply1 '(apply1))
259
`($ANY . (DO ((,EXPR ,(DTRANSLATE (CADR FORM))
260
(APPLY1 ,EXPR (CAR ,RULES) 0))
261
(,RULES ',(CDDR FORM) (CDR ,RULES)))
262
((NULL ,RULES) ,EXPR))))
259
`($any . (do ((,expr ,(dtranslate (cadr form))
260
(apply1 ,expr (car ,rules) 0))
261
(,rules ',(cddr form) (cdr ,rules)))
262
((null ,rules) ,expr))))
264
264
;;; This code was written before they had formatting of lisp code invented.
265
265
;;;(DEFUN $APPLY2 FEXPR (L)(PROG (*RULELIST)
266
266
;;;(SETQ *RULELIST (CDR L))
267
267
;;;(RETURN (APPLY2 (MEVAL (CAR L)) 0))))
269
(DEF%TR $APPLY2 (FORM)
270
`($ANY . ((LAMBDA (*RULELIST)
271
(DECLARE (SPECIAL *RULELIST))
272
(APPLY2 ,(DTRANSLATE (CADR FORM)) 0))
269
(def%tr $apply2 (form)
270
`($any . ((lambda (*rulelist)
271
(declare (special *rulelist))
272
(apply2 ,(dtranslate (cadr form)) 0))
275
275
;;;(DEFUN $APPLYB1 FEXPR (L)
276
276
;;; (PROG (*EXPR)
283
283
;;; (RETURN *EXPR )))
285
(DEF%TR $APPLYB1 (FORM &AUX (EXPR (TR-GENSYM)) (RULES (TR-GENSYM)))
286
(PUSH-AUTOLOAD-DEF '$APPLYB1 '(APPLY1HACK))
287
`($ANY . (DO ((,EXPR ,(DTRANSLATE (CADR FORM))
288
(CAR (APPLY1HACK ,EXPR (CAR ,RULES))))
289
(,RULES ',(CDDR FORM) (CDR ,RULES)))
290
((NULL ,RULES) ,EXPR))))
285
(def%tr $applyb1 (form &aux (expr (tr-gensym)) (rules (tr-gensym)))
286
(push-autoload-def '$applyb1 '(apply1hack))
287
`($any . (do ((,expr ,(dtranslate (cadr form))
288
(car (apply1hack ,expr (car ,rules))))
289
(,rules ',(cddr form) (cdr ,rules)))
290
((null ,rules) ,expr))))
292
292
;;;(DEFUN $APPLYB2 FEXPR (L)(PROG (*RULELIST)
293
293
;;;(SETQ *RULELIST (CDR L))
294
294
;;;(RETURN(CAR (APPLY2HACK (MEVAL (CAR L)))))))
296
(DEF%TR $APPLYB2 (FORM)
297
(PUSH-AUTOLOAD-DEF '$APPLYB2 '(APPLY2HACK))
298
`($ANY . ((LAMBDA (*RULELIST)
299
(DECLARE (SPECIAL *RULELIST))
300
(APPLY2HACK ,(DTRANSLATE (CADR FORM))))
296
(def%tr $applyb2 (form)
297
(push-autoload-def '$applyb2 '(apply2hack))
298
`($any . ((lambda (*rulelist)
299
(declare (special *rulelist))
300
(apply2hack ,(dtranslate (cadr form))))
307
307
;;; write the translation property for his own special form!
310
(DEF%TR $BUILDQ (FORM)
310
(def%tr $buildq (form)
312
(LET ((ALIST ;would be nice to output
313
(MAPCAR ;backquote instead of list/cons
314
#'(LAMBDA (VAR) ;but I'm not sure if things get
315
(COND ((ATOM VAR) ;macroexpanded. -REH
316
; Well, any macros are o.k. They
317
; get expanded "at the right time". -gjc
312
(let ((alist ;would be nice to output
313
(mapcar ;backquote instead of list/cons
314
#'(lambda (var) ;but I'm not sure if things get
315
(cond ((atom var) ;macroexpanded. -REH
316
; Well, any macros are o.k. They
317
; get expanded "at the right time". -gjc
319
`(CONS ',VAR ,(DTRANSLATE VAR)))
320
((EQ (CAAR VAR) 'MSETQ)
321
`(CONS ',(CADR VAR) ,(DTRANSLATE (CADDR VAR))))
324
"Illegal BUILDQ form encountered during translation"))))
325
;right thing to do here??
326
;how much error checking does transl do now?
327
; Yes. Not as much as it should! -GJC
319
`(cons ',var ,(dtranslate var)))
320
((eq (caar var) 'msetq)
321
`(cons ',(cadr var) ,(dtranslate (caddr var))))
324
"Illegal `buildq' form encountered during translation"))))
325
;right thing to do here??
326
;how much error checking does transl do now?
327
; Yes. Not as much as it should! -GJC
331
`($ANY QUOTE ,(CADDR FORM)))
332
(T `($ANY MBUILDQ-SUBST (LIST ,@ALIST) ',(CADDR FORM))))))
331
`($any quote ,(caddr form)))
332
(t `($any mbuildq-subst (list ,@alist) ',(caddr form))))))
335
335
;;; Presently STATUS and SSTATUS are FEXPR which don't evaluate
339
339
(def%tr $sstatus (form)
340
`($any . ($sstatus . ,(cdr form))))
340
`($any . ($sstatus . ,(cdr form))))
343
343
(def%tr $status (form)
344
(setq form (cdr form))
345
(cond ((null form) ; %%%PLEASE FIX ME%%% with WNA-CHECKING %%%%%%
350
(cond ((null (cdr form))
351
`($any . ($status $feature)))
352
; this BOOLEAN check is important, since
353
; STATUS(FEATURE,FOO) will always be used in a
355
(t `($BOOLEAN . ($STATUS $FEATURE ,(CADR FORM))))))
356
(T `($ANY . ($STATUS . ,FORM)))))))
344
(setq form (cdr form))
345
(cond ((null form) ; %%%PLEASE FIX ME%%% with WNA-CHECKING %%%%%%
350
(cond ((null (cdr form))
351
`($any . ($status $feature)))
352
; this BOOLEAN check is important, since
353
; STATUS(FEATURE,FOO) will always be used in a
355
(t `($boolean . ($status $feature ,(cadr form))))))
356
(t `($any . ($status . ,form)))))))