1
0
mirror of https://github.com/PDP-10/its.git synced 2026-04-17 16:53:08 +00:00
Files
PDP-10.its/src/transl/trans2.39
Eric Swenson 85994ed770 Added files to support building and running Macsyma.
Resolves #284.

Commented out uses of time-origin in maxtul; mcldmp (init) until we
can figure out why it gives arithmetic overflows under the emulators.

Updated the expect script statements in build_macsyma_portion to not
attempt to match expected strings, but simply sleep for some time
since in some cases the matching appears not to work.
2018-03-11 13:10:19 -07:00

119 lines
3.6 KiB
Common Lisp
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
;;; -*- Mode: Lisp; Package: Macsyma -*-
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Please do not modify this file. See GJC ;;;
;;; (c) Copyright 1980 Massachusetts Institute of Technology ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; TRANSLATION PROPERTIES FOR MACSYMA OPERATORS AND FUNCTIONS.
;;; This file is for list and array manipulation optimizations.
(macsyma-module trans2)
(TRANSL-MODULE TRANS2)
(DEF%TR $RANDOM (FORM) `($FIXNUM . (RANDOM ,@(TR-ARGS (CDR FORM)))))
(DEF%TR MEQUAL (FORM)
`($ANY . (SIMPLIFY (LIST '(MEQUAL) ,@(TR-ARGS (CDR FORM))))))
(DEF%TR MCALL (FORM)
(SETQ FORM (CDR FORM))
(LET ((MODE (COND ((ATOM (CAR FORM))
(FUNCTION-MODE (CAR FORM)))
(T '$ANY))))
(SETQ FORM (TR-ARGS FORM))
(LET ((OP (CAR FORM)))
(CALL-AND-SIMP MODE 'MCALL `(,OP . ,(CDR FORM))))))
;;; Meaning of the mode properties: most names are historical.
;;; (GETL X '(ARRAY-MODE)) means it is an array callable by the
;;; old maclisp style. This is unfortunately still useful to
;;; avoid indirection through the property list to get to the
;;; array.
(DEFTRFUN TR-ARRAYCALL (FORM)
(COND ((GET (CAAR FORM) 'ARRAY-MODE)
(ADDL (CAAR FORM) ARRAYS)
`(,(ARRAY-MODE (CAAR FORM))
. (,(CAAR FORM) ,@(TR-ARGS (CDR FORM)))))
;;((MEMQ (MGET (CAAR FORM) 'ARRAYFUN-MODE) '($FLOAT $FIXNUM))
;;`(,(MGET (CAAR FORM) 'ARRAYFUN-MODE)
;;MAFCALL ,(CAAR FORM) . ,(MAPCAR 'DTRANSLATE (CDR FORM))))
(T
(TRANSLATE `((MARRAYREF)
,(IF $TR_ARRAY_AS_REF (CAAR FORM)
`((MQUOTE) ,(CAAR FORM)))
,@(CDR FORM))))))
(DEFTRFUN TR-ARRAYSETQ (array-ref value)
;; actually an array SETF, but it comes from A[X]:FOO
;; which is ((MSETQ) ... ...)
(COND ((GETL (CAAR array-ref) '(ARRAY-MODE))
(LET ((T-REF (TRANSLATE ARRAY-REF))
(T-VALUE (TRANSLATE VALUE))
(MODE))
(WARN-MODE ARRAY-REF (CAR T-REF) (CAR T-VALUE))
(SETQ MODE (CAR T-REF)) ; ooh, could be bad.
`(,MODE
. (STORE ,(CDR T-REF) ,(CDR T-VALUE)))))
(T
;; oops. Hey, I switch around order of evaluation
;; here. no need to either man. gee.
(TRANSLATE `((MARRAYSET) ,Value
,(IF $TR_ARRAY_AS_REF (CAAR ARRAY-REF)
`((MQUOTE) ,(CAAR ARRAY-REF)))
,@(CDR ARRAY-REF))))))
(DEF%TR MARRAYREF (FORM)
(SETQ FORM (CDR FORM))
(LET ((MODE (COND ((ATOM (CAR FORM))
(MGET (CAR FORM) 'ARRAY-MODE)))))
(COND ((NULL MODE) (SETQ MODE '$ANY)))
(SETQ FORM (TR-ARGS FORM))
(LET ((OP (CAR FORM)))
`(,MODE . (,(IF (AND (= (LENGTH FORM) 2)
(EQ MODE '$FLOAT))
(PROGN (PUSH-AUTOLOAD-DEF 'MARRAYREF '(MARRAYREF1$))
'MARRAYREF1$)
'MARRAYREF)
,OP . ,(CDR FORM))))))
(DEF%TR MARRAYSET (FORM)
(SETQ FORM (CDR FORM))
(LET ((MODE (COND ((ATOM (CADR FORM))
(MGET (CADR FORM) 'ARRAY-MODE)))))
(COND ((NULL MODE) (SETQ MODE '$ANY)))
(SETQ FORM (TR-ARGS FORM))
(LET (((VAL ARRAY . INDS) FORM))
`(,MODE . (,(IF (AND (= (LENGTH INDS) 1)
(EQ MODE '$FLOAT))
(PROGN (PUSH-AUTOLOAD-DEF 'MARRAYSET '(MARRAYSET1$))
'MARRAYSET1$)
'MARRAYSET)
,VAL ,ARRAY . ,INDS)))))
(DEF%TR MLIST (FORM)
(COND ((NULL (CDR FORM)) ;;; []
'($ANY . '((MLIST))))
(T
`($ANY . (LIST '(MLIST) . ,(TR-ARGS (CDR FORM)))))))
(DEF%TR $FIRST (FORM)
(SETQ FORM (TRANSLATE (CADR FORM)))
(call-and-simp '$ANY
(COND ((EQ '$LIST (CAR FORM))
'CADR)
(T
'$FIRST))
(list (CDR FORM))))
;; Local Modes:
;; Mode: LISP
;; Comment Col: 40
;; END: