updating AST test to work with latest
This commit is contained in:
		
							parent
							
								
									b0e8582c1d
								
							
						
					
					
						commit
						0d5cb73523
					
				| 
						 | 
					@ -1,5 +1,5 @@
 | 
				
			||||||
(load '|match.lsp|)
 | 
					(load "match.lsp")
 | 
				
			||||||
(load '|asttools.lsp|)
 | 
					(load "asttools.lsp")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(define missing-arg-tag '*r-missing*)
 | 
					(define missing-arg-tag '*r-missing*)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -110,11 +110,9 @@
 | 
				
			||||||
;)
 | 
					;)
 | 
				
			||||||
(define (main)
 | 
					(define (main)
 | 
				
			||||||
  (progn
 | 
					  (progn
 | 
				
			||||||
    (define *input* (read))
 | 
					    (define *input* (load "starpR.lsp"))
 | 
				
			||||||
    ;(define t0 ((java.util.Date:new):getTime))
 | 
					    ;(define t0 ((java.util.Date:new):getTime))
 | 
				
			||||||
    (clock)
 | 
					    (time (compile-ish *input*))
 | 
				
			||||||
    (compile-ish *input*)
 | 
					 | 
				
			||||||
    (clock)
 | 
					 | 
				
			||||||
    ;(define t1 ((java.util.Date:new):getTime))
 | 
					    ;(define t1 ((java.util.Date:new):getTime))
 | 
				
			||||||
))
 | 
					))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,4 @@
 | 
				
			||||||
(r-expressions
 | 
					'(r-expressions
 | 
				
			||||||
 (r-call library \M\A\S\S)
 | 
					 (r-call library \M\A\S\S)
 | 
				
			||||||
 (r-call dyn.load "starp.so")
 | 
					 (r-call dyn.load "starp.so")
 | 
				
			||||||
 (<- ppcommand (function ((*named* ... *r-missing*)) (r-call .\Call "ppcommand" (r-call list r-dotdotdot)) ()))
 | 
					 (<- ppcommand (function ((*named* ... *r-missing*)) (r-call .\Call "ppcommand" (r-call list r-dotdotdot)) ()))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,12 +4,8 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(set 'list (lambda args args))
 | 
					(set 'list (lambda args args))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(set 'setq (macro (name val)
 | 
					(set-syntax 'setq (lambda (name val)
 | 
				
			||||||
                  (list set (list 'quote name) val)))
 | 
					                    (list set (list 'quote name) val)))
 | 
				
			||||||
 | 
					 | 
				
			||||||
(setq sp '| |)
 | 
					 | 
				
			||||||
(setq nl '|
 | 
					 | 
				
			||||||
|)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
; convert a sequence of body statements to a single expression.
 | 
					; convert a sequence of body statements to a single expression.
 | 
				
			||||||
; this allows define, defun, defmacro, let, etc. to contain multiple
 | 
					; this allows define, defun, defmacro, let, etc. to contain multiple
 | 
				
			||||||
| 
						 | 
					@ -19,9 +15,13 @@
 | 
				
			||||||
                     ((eq (cdr e) ()) (car e))
 | 
					                     ((eq (cdr e) ()) (car e))
 | 
				
			||||||
                     (T               (cons 'progn e)))))
 | 
					                     (T               (cons 'progn e)))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(setq defmacro
 | 
					(set-syntax 'defmacro
 | 
				
			||||||
      (macro (name args . body)
 | 
					            (lambda (name args . body)
 | 
				
			||||||
             (list 'setq name (list 'macro args (f-body body)))))
 | 
					              (list 'set-syntax (list 'quote name)
 | 
				
			||||||
 | 
					                    (list 'lambda args (f-body body)))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(defmacro label (name fn)
 | 
				
			||||||
 | 
					  (list (list 'lambda (cons name nil) (list 'setq name fn)) nil))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
; support both CL defun and Scheme-style define
 | 
					; support both CL defun and Scheme-style define
 | 
				
			||||||
(defmacro defun (name args . body)
 | 
					(defmacro defun (name args . body)
 | 
				
			||||||
| 
						 | 
					@ -34,7 +34,6 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(defun identity (x) x)
 | 
					(defun identity (x) x)
 | 
				
			||||||
(setq null not)
 | 
					(setq null not)
 | 
				
			||||||
(defun consp (x) (not (atom x)))
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
(defun map (f lst)
 | 
					(defun map (f lst)
 | 
				
			||||||
  (if (atom lst) lst
 | 
					  (if (atom lst) lst
 | 
				
			||||||
| 
						 | 
					@ -69,16 +68,17 @@
 | 
				
			||||||
        ((equal (car lst) item) lst)
 | 
					        ((equal (car lst) item) lst)
 | 
				
			||||||
        (T (member item (cdr lst)))))
 | 
					        (T (member item (cdr lst)))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(defun macrop (e) (and (consp e) (eq (car e) 'macro) e))
 | 
					 | 
				
			||||||
(defun macrocallp (e) (and (symbolp (car e))
 | 
					(defun macrocallp (e) (and (symbolp (car e))
 | 
				
			||||||
                           (boundp (car e))
 | 
					                           (symbol-syntax (car e))))
 | 
				
			||||||
                           (macrop (eval (car e)))))
 | 
					
 | 
				
			||||||
(defun macroapply (m args) (apply (cons 'lambda (cdr m)) args))
 | 
					(defun functionp (x)
 | 
				
			||||||
 | 
					  (or (builtinp x)
 | 
				
			||||||
 | 
					      (and (consp x) (eq (car x) 'lambda))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(defun macroexpand-1 (e)
 | 
					(defun macroexpand-1 (e)
 | 
				
			||||||
  (if (atom e) e
 | 
					  (if (atom e) e
 | 
				
			||||||
    (let ((f (macrocallp e)))
 | 
					    (let ((f (macrocallp e)))
 | 
				
			||||||
      (if f (macroapply f (cdr e))
 | 
					      (if f (apply f (cdr e))
 | 
				
			||||||
        e))))
 | 
					        e))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
; convert to proper list, i.e. remove "dots", and append
 | 
					; convert to proper list, i.e. remove "dots", and append
 | 
				
			||||||
| 
						 | 
					@ -89,6 +89,9 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(define (cadr x) (car (cdr x)))
 | 
					(define (cadr x) (car (cdr x)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(setq *special-forms* '(quote cond if and or while lambda label trycatch
 | 
				
			||||||
 | 
					                        %top progn))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(defun macroexpand (e)
 | 
					(defun macroexpand (e)
 | 
				
			||||||
  ((label mexpand
 | 
					  ((label mexpand
 | 
				
			||||||
          (lambda (e env f)
 | 
					          (lambda (e env f)
 | 
				
			||||||
| 
						 | 
					@ -96,32 +99,38 @@
 | 
				
			||||||
              (while (and (consp e)
 | 
					              (while (and (consp e)
 | 
				
			||||||
                          (not (member (car e) env))
 | 
					                          (not (member (car e) env))
 | 
				
			||||||
                          (set 'f (macrocallp e)))
 | 
					                          (set 'f (macrocallp e)))
 | 
				
			||||||
                (set 'e (macroapply f (cdr e))))
 | 
					                (set 'e (apply f (cdr e))))
 | 
				
			||||||
              (if (and (consp e)
 | 
					              (cond ((and (consp e)
 | 
				
			||||||
                       (not (eq (car e) 'quote)))
 | 
					                          (not (eq (car e) 'quote)))
 | 
				
			||||||
                  (let ((newenv
 | 
					                     (let ((newenv
 | 
				
			||||||
                         (if (and (or (eq (car e) 'lambda) (eq (car e) 'macro))
 | 
					                            (if (and (or (eq (car e) 'lambda)
 | 
				
			||||||
                                  (consp (cdr e)))
 | 
					                                         (eq (car e) 'label))
 | 
				
			||||||
                             (append.2 (cadr e) env)
 | 
					                                     (consp (cdr e)))
 | 
				
			||||||
                           env)))
 | 
					                                (append.2 (cadr e) env)
 | 
				
			||||||
                    (map (lambda (x) (mexpand x newenv nil)) e))
 | 
					                              env)))
 | 
				
			||||||
                e))))
 | 
					                       (map (lambda (x) (mexpand x newenv nil)) e)))
 | 
				
			||||||
 | 
					                    ((and (symbolp e) (constantp e)) (eval e))
 | 
				
			||||||
 | 
					                    ;((and (symbolp e)
 | 
				
			||||||
 | 
					                    ;      (not (member e *special-forms*))
 | 
				
			||||||
 | 
					                    ;      (not (member e env))) (cons '%top e))
 | 
				
			||||||
 | 
					                    (T e)))))
 | 
				
			||||||
   e nil nil))
 | 
					   e nil nil))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
; uncomment this to macroexpand functions at definition time.
 | 
					; uncomment this to macroexpand functions at definition time.
 | 
				
			||||||
; makes typical code ~25% faster, but only works for defun expressions
 | 
					; makes typical code ~25% faster, but only works for defun expressions
 | 
				
			||||||
; at the top level.
 | 
					; at the top level.
 | 
				
			||||||
(defmacro defun (name args . body)
 | 
					(defmacro defun (name args . body)
 | 
				
			||||||
  (list 'setq name (list 'lambda args (macroexpand (f-body body)))))
 | 
					  (list 'setq name (macroexpand (list 'lambda args (f-body body)))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
; same thing for macros. enabled by default because macros are usually
 | 
					; same thing for macros. enabled by default because macros are usually
 | 
				
			||||||
; defined at the top level.
 | 
					; defined at the top level.
 | 
				
			||||||
(defmacro defmacro (name args . body)
 | 
					(defmacro defmacro (name args . body)
 | 
				
			||||||
  (list 'setq name (list 'macro args (macroexpand (f-body body)))))
 | 
					  (list 'set-syntax (list 'quote name)
 | 
				
			||||||
 | 
					        (macroexpand (list 'lambda args (f-body body)))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(setq =   eq)
 | 
					(setq =   equal)
 | 
				
			||||||
(setq eql eq)
 | 
					(setq eql equal)
 | 
				
			||||||
(define (/= a b) (not (eq a b)))
 | 
					(define (/= a b) (not (equal a b)))
 | 
				
			||||||
(define != /=)
 | 
					(define != /=)
 | 
				
			||||||
(define (>  a b) (< b a))
 | 
					(define (>  a b) (< b a))
 | 
				
			||||||
(define (<= a b) (not (< b a)))
 | 
					(define (<= a b) (not (< b a)))
 | 
				
			||||||
| 
						 | 
					@ -130,11 +139,11 @@
 | 
				
			||||||
(define (1- n) (- n 1))
 | 
					(define (1- n) (- n 1))
 | 
				
			||||||
(define (mod x y) (- x (* (/ x y) y)))
 | 
					(define (mod x y) (- x (* (/ x y) y)))
 | 
				
			||||||
(define (abs x)   (if (< x 0) (- x) x))
 | 
					(define (abs x)   (if (< x 0) (- x) x))
 | 
				
			||||||
(define (truncate x) x)
 | 
					 | 
				
			||||||
(setq K prog1)  ; K combinator ;)
 | 
					(setq K prog1)  ; K combinator ;)
 | 
				
			||||||
(define (funcall f . args) (apply f args))
 | 
					(define (funcall f . args) (apply f args))
 | 
				
			||||||
(define (symbol-function sym) (eval sym))
 | 
					(define (symbol-value sym) (eval sym))
 | 
				
			||||||
(define (symbol-value    sym) (eval sym))
 | 
					(define symbol-function symbol-value)
 | 
				
			||||||
 | 
					(define (terpri) (princ "\n") nil)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(define (caar x) (car (car x)))
 | 
					(define (caar x) (car (car x)))
 | 
				
			||||||
(define (cdar x) (cdr (car x)))
 | 
					(define (cdar x) (cdr (car x)))
 | 
				
			||||||
| 
						 | 
					@ -148,23 +157,6 @@
 | 
				
			||||||
(define (cddar x) (cdr (cdr (car x))))
 | 
					(define (cddar x) (cdr (cdr (car x))))
 | 
				
			||||||
(define (cdddr x) (cdr (cdr (cdr x))))
 | 
					(define (cdddr x) (cdr (cdr (cdr x))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(define (equal a b)
 | 
					 | 
				
			||||||
  (if (and (consp a) (consp b))
 | 
					 | 
				
			||||||
      (and (equal (car a) (car b))
 | 
					 | 
				
			||||||
           (equal (cdr a) (cdr b)))
 | 
					 | 
				
			||||||
    (eq a b)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
; compare imposes an ordering on all values. yields -1 for a<b,
 | 
					 | 
				
			||||||
; 0 for a==b, and 1 for a>b. lists are compared up to the first
 | 
					 | 
				
			||||||
; point of difference.
 | 
					 | 
				
			||||||
(defun compare (a b)
 | 
					 | 
				
			||||||
  (cond ((eq a b) 0)
 | 
					 | 
				
			||||||
        ((or (atom a) (atom b)) (if (< a b) -1 1))
 | 
					 | 
				
			||||||
        (T (let ((c (compare (car a) (car b))))
 | 
					 | 
				
			||||||
             (if (not (eq c 0))
 | 
					 | 
				
			||||||
                 c
 | 
					 | 
				
			||||||
               (compare (cdr a) (cdr b)))))))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(defun every (pred lst)
 | 
					(defun every (pred lst)
 | 
				
			||||||
  (or (atom lst)
 | 
					  (or (atom lst)
 | 
				
			||||||
      (and (pred (car lst))
 | 
					      (and (pred (car lst))
 | 
				
			||||||
| 
						 | 
					@ -177,10 +169,6 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(defun listp (a) (or (eq a ()) (consp a)))
 | 
					(defun listp (a) (or (eq a ()) (consp a)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(defun length (l)
 | 
					 | 
				
			||||||
  (if (null l) 0
 | 
					 | 
				
			||||||
    (+ 1 (length (cdr l)))))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(defun nthcdr (n lst)
 | 
					(defun nthcdr (n lst)
 | 
				
			||||||
  (if (<= n 0) lst
 | 
					  (if (<= n 0) lst
 | 
				
			||||||
    (nthcdr (- n 1) (cdr lst))))
 | 
					    (nthcdr (- n 1) (cdr lst))))
 | 
				
			||||||
| 
						 | 
					@ -226,8 +214,8 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(defun filter (pred lst)
 | 
					(defun filter (pred lst)
 | 
				
			||||||
  (cond ((null lst) ())
 | 
					  (cond ((null lst) ())
 | 
				
			||||||
        ((not (pred (car lst))) (filter pred (cdr lst)))
 | 
					        ((pred (car lst)) (cons (car lst) (filter pred (cdr lst))))
 | 
				
			||||||
        (T (cons (car lst) (filter pred (cdr lst))))))
 | 
					        (T (filter pred (cdr lst)))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(define (foldr f zero lst)
 | 
					(define (foldr f zero lst)
 | 
				
			||||||
  (if (null lst) zero
 | 
					  (if (null lst) zero
 | 
				
			||||||
| 
						 | 
					@ -252,11 +240,6 @@
 | 
				
			||||||
    (cons (copy-tree (car l))
 | 
					    (cons (copy-tree (car l))
 | 
				
			||||||
          (copy-tree (cdr l)))))
 | 
					          (copy-tree (cdr l)))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(define (assoc item lst)
 | 
					 | 
				
			||||||
  (cond ((atom lst) ())
 | 
					 | 
				
			||||||
        ((eq (caar lst) item) (car lst))
 | 
					 | 
				
			||||||
        (T (assoc item (cdr lst)))))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(define (nreverse l)
 | 
					(define (nreverse l)
 | 
				
			||||||
  (let ((prev nil))
 | 
					  (let ((prev nil))
 | 
				
			||||||
    (while (consp l)
 | 
					    (while (consp l)
 | 
				
			||||||
| 
						 | 
					@ -281,8 +264,8 @@
 | 
				
			||||||
                           body)))
 | 
					                           body)))
 | 
				
			||||||
        (map (lambda (x) nil) binds)))
 | 
					        (map (lambda (x) nil) binds)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(defmacro when   (c . body) (list if c (f-body body) nil))
 | 
					(defmacro when   (c . body) (list 'if c (f-body body) nil))
 | 
				
			||||||
(defmacro unless (c . body) (list if c nil (f-body body)))
 | 
					(defmacro unless (c . body) (list 'if c nil (f-body body)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(defmacro dotimes (var . body)
 | 
					(defmacro dotimes (var . body)
 | 
				
			||||||
  (let ((v (car var))
 | 
					  (let ((v (car var))
 | 
				
			||||||
| 
						 | 
					@ -292,10 +275,18 @@
 | 
				
			||||||
                (list prog1 (f-body body) (list 'setq v (list + v 1)))))))
 | 
					                (list prog1 (f-body body) (list 'setq v (list + v 1)))))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(defun map-int (f n)
 | 
					(defun map-int (f n)
 | 
				
			||||||
  (let ((acc nil))
 | 
					  (if (<= n 0)
 | 
				
			||||||
    (dotimes (i n)
 | 
					      ()
 | 
				
			||||||
      (setq acc (cons (f i) acc)))
 | 
					    (let ((first (cons (f 0) nil)))
 | 
				
			||||||
    (nreverse acc)))
 | 
					      ((label map-int-
 | 
				
			||||||
 | 
					              (lambda (acc i n)
 | 
				
			||||||
 | 
					                (if (= i n)
 | 
				
			||||||
 | 
					                    first
 | 
				
			||||||
 | 
					                  (progn (rplacd acc (cons (f i) nil))
 | 
				
			||||||
 | 
					                         (map-int- (cdr acc) (+ i 1) n)))))
 | 
				
			||||||
 | 
					       first 1 n))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(defun iota (n) (map-int identity n))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(defun error args (raise (cons 'error args)))
 | 
					(defun error args (raise (cons 'error args)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -339,7 +330,7 @@
 | 
				
			||||||
                                                   (eq (car ,e)
 | 
					                                                   (eq (car ,e)
 | 
				
			||||||
                                                       ',extype)))
 | 
					                                                       ',extype)))
 | 
				
			||||||
                                       T); (catch (e) ...), match anything
 | 
					                                       T); (catch (e) ...), match anything
 | 
				
			||||||
                                    (let ((,var ,e)) ,@todo))))
 | 
					                                    (let ((,var ,e)) (progn ,@todo)))))
 | 
				
			||||||
                              catches)
 | 
					                              catches)
 | 
				
			||||||
                       (T (raise ,e))))) ; no matches, reraise
 | 
					                       (T (raise ,e))))) ; no matches, reraise
 | 
				
			||||||
    (if final
 | 
					    (if final
 | 
				
			||||||
| 
						 | 
					@ -359,35 +350,6 @@
 | 
				
			||||||
      ; catch, no finally
 | 
					      ; catch, no finally
 | 
				
			||||||
      `(trycatch ,expr (lambda (,e) ,catchblock)))))
 | 
					      `(trycatch ,expr (lambda (,e) ,catchblock)))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
; property lists
 | 
					 | 
				
			||||||
(setq *plists* nil)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(defun symbol-plist (sym)
 | 
					 | 
				
			||||||
  (cdr (or (assoc sym *plists*) '(()))))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(defun set-symbol-plist (sym lst)
 | 
					 | 
				
			||||||
  (let ((p (assoc sym *plists*)))
 | 
					 | 
				
			||||||
    (if (null p)  ; sym has no plist yet
 | 
					 | 
				
			||||||
        (setq *plists* (cons (cons sym lst) *plists*))
 | 
					 | 
				
			||||||
      (rplacd p lst))))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(defun get (sym prop)
 | 
					 | 
				
			||||||
  (let ((pl (symbol-plist sym)))
 | 
					 | 
				
			||||||
    (if pl
 | 
					 | 
				
			||||||
        (let ((pr (member prop pl)))
 | 
					 | 
				
			||||||
          (if pr (cadr pr) nil))
 | 
					 | 
				
			||||||
      nil)))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
(defun put (sym prop val)
 | 
					 | 
				
			||||||
  (let ((p (assoc sym *plists*)))
 | 
					 | 
				
			||||||
    (if (null p)  ; sym has no plist yet
 | 
					 | 
				
			||||||
        (setq *plists* (cons (list sym prop val) *plists*))
 | 
					 | 
				
			||||||
      (let ((pr (member prop p)))
 | 
					 | 
				
			||||||
        (if (null pr)  ; sym doesn't have this property yet
 | 
					 | 
				
			||||||
            (rplacd p (cons prop (cons val (cdr p))))
 | 
					 | 
				
			||||||
          (rplaca (cdr pr) val)))))
 | 
					 | 
				
			||||||
  val)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
; setf
 | 
					; setf
 | 
				
			||||||
; expands (setf (place x ...) v) to (mutator (f x ...) v)
 | 
					; expands (setf (place x ...) v) to (mutator (f x ...) v)
 | 
				
			||||||
; (mutator (identity x ...) v) is interpreted as (mutator x ... v)
 | 
					; (mutator (identity x ...) v) is interpreted as (mutator x ... v)
 | 
				
			||||||
| 
						 | 
					@ -411,7 +373,8 @@
 | 
				
			||||||
        (aref    aset     identity)
 | 
					        (aref    aset     identity)
 | 
				
			||||||
        (symbol-function   set                identity)
 | 
					        (symbol-function   set                identity)
 | 
				
			||||||
        (symbol-value      set                identity)
 | 
					        (symbol-value      set                identity)
 | 
				
			||||||
        (symbol-plist      set-symbol-plist   identity)))
 | 
					        (symbol-plist      set-symbol-plist   identity)
 | 
				
			||||||
 | 
					        (symbol-syntax     set-syntax         identity)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(defun setf-place-mutator (place val)
 | 
					(defun setf-place-mutator (place val)
 | 
				
			||||||
  (if (symbolp place)
 | 
					  (if (symbolp place)
 | 
				
			||||||
| 
						 | 
					@ -453,10 +416,6 @@
 | 
				
			||||||
      (and (atom x)
 | 
					      (and (atom x)
 | 
				
			||||||
           (not (symbolp x)))))
 | 
					           (not (symbolp x)))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(defun functionp (x)
 | 
					 | 
				
			||||||
  (or (builtinp x)
 | 
					 | 
				
			||||||
      (and (consp x) (eq (car x) 'lambda))))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
; backquote
 | 
					; backquote
 | 
				
			||||||
(defmacro backquote (x) (bq-process x))
 | 
					(defmacro backquote (x) (bq-process x))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -509,3 +468,10 @@
 | 
				
			||||||
    (bq-process x)))
 | 
					    (bq-process x)))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
(defmacro assert (expr) `(if ,expr T (raise '(assert-failed ,expr))))
 | 
					(defmacro assert (expr) `(if ,expr T (raise '(assert-failed ,expr))))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					(defmacro time (expr)
 | 
				
			||||||
 | 
					  (let ((t0 (gensym)))
 | 
				
			||||||
 | 
					    `(let ((,t0 (time.now)))
 | 
				
			||||||
 | 
					       (prog1
 | 
				
			||||||
 | 
					           ,expr
 | 
				
			||||||
 | 
					         (princ "Elapsed time: " (- (time.now) ,t0) " seconds\n")))))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue