[movitz-cvs] CVS movitz/losp/muerte
    ffjeld 
    ffjeld at common-lisp.net
       
    Mon Mar 17 08:00:46 UTC 2008
    
    
  
Update of /project/movitz/cvsroot/movitz/losp/muerte
In directory clnet:/tmp/cvs-serv25010
Added Files:
	defmacro-bootstrap.lisp 
Log Message:
Working on making macros work.
--- /project/movitz/cvsroot/movitz/losp/muerte/defmacro-bootstrap.lisp	2008/03/17 08:00:46	NONE
+++ /project/movitz/cvsroot/movitz/losp/muerte/defmacro-bootstrap.lisp	2008/03/17 08:00:46	1.1
;;;;------------------------------------------------------------------
;;;; 
;;;;    Copyright (C) 2008, Frode V. Fjeld
;;;; 
;;;; Filename:      defmacro-bootstrap.lisp
;;;; Author:        Frode Vatvedt Fjeld
;;;; Created at:    Wed Nov  8 18:44:57 2000
;;;; Distribution:  See the accompanying file COPYING.
;;;;                
;;;; $Id: defmacro-bootstrap.lisp,v 1.1 2008/03/17 08:00:21 ffjeld Exp $
;;;;                
;;;;------------------------------------------------------------------
(provide :muerte/defmacro-bootstrap)
(muerte::defmacro-compile-time muerte.cl:defmacro (name lambda-list &body macro-body)
  (`(muerte::defmacro-compile-time ,name ,lambda-list ,macro-body)))
(muerte.cl:defmacro muerte.cl:in-package (name)
  `(progn
     (eval-when (:compile-toplevel)
       (in-package ,(movitz::movitzify-package-name name)))))
(in-package #:muerte)
(defmacro defmacro/cross-compilation (name lambda-list &body body)
  `(progn
     (defmacro-compile-time ,name ,lambda-list ,body)
     ',name))
(defmacro defmacro (name lambda-list &body body)
  `(defmacro/cross-compilation ,name ,lambda-list , at body))
(defmacro defmacro/runtime (name lambda-list &body body)
  (multiple-value-bind (real-body declarations docstring)
      (movitz::parse-docstring-declarations-and-body body 'cl:declare)
    (let* ((block-name (compute-function-block-name name))
	   (ignore-var (gensym))
	   (form-var (gensym "form-"))
	   (env-var nil)
	   (operator-var (gensym))
	   (destructuring-lambda-list
	    (do ((l lambda-list)
		 (r nil))
		((atom l)
		 (cons operator-var
		       (nreconc r l)))
	      (let ((x (pop l)))
		(if (eq x '&environment)
		    (setf env-var (pop l))
		    (push x r))))))
      (multiple-value-bind (env-var ignore-env)
	  (if env-var
	      (values env-var nil)
	      (let ((e (gensym)))
		(values e (list e))))
	`(make-named-function ,name
			      (&edx edx &optional ,form-var ,env-var &rest ,ignore-var)
			      ((ignore ,ignore-var , at ignore-env))
			      ,docstring
			      (block ,block-name
				(verify-macroexpand-call edx ',name)
				(destructuring-bind ,destructuring-lambda-list
				    ,form-var
				  (declare (ignore ,operator-var) , at declarations)
				  , at real-body))
			      :type :macro-function)))))
    
    
More information about the Movitz-cvs
mailing list