[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Issue SYNTACTIC-ENVIRONMENT-ACCESS, v2



In the discussion for SEMANTIC-ENVIRONMENT-ACCESS version 2 (SEA-2) I mentioned
that there are some accessor/update pairs associated with defining forms which
are missing from Common Lisp.  Below is a table of all the Common Lisp defining
macros (assuming I haven't missed any), along with their associated functions
(where specified).

Note that this isn't just a mindless exercise in filling holes.  The missing
functions are needed if you want to write a portable 'file compiler' that wants
to treat these forms as special-forms that it knows how to deal with, since to
do so in any reasonable fashion requires hooking into the implementations
mechanisms for recording compile-time information.

Defining form		   Accessor			Create/Update
-------------------------------------------------------------------------------
DEFCLASS		   FIND-CLASS			ENSURE-CLASS
DEFCONSTANT		   CONSTANTP **
DEFGENERIC		   FDEFINITION *		ENSURE-GENERIC-FUNCTION
DEFINE-METHOD-COMBINATION  FIND-METHOD-COMBINATION *
DEFINE-MODIFY-MACRO	   MACRO-FUNCTION		(SETF MACRO-FUNCTION)
DEFINE-SETF-METHOD	   GET-SETF-METHOD
DEFMACRO		   MACRO-FUNCTION		(SETF MACRO-FUNCTION)
DEFMETHOD		   FDEFINITION *		ENSURE-GENERIC-FUNCTION
DEFPARAMETER		   ***				***
DEFSETF			   GET-SETF-METHOD
DEFSTRUCT		   FIND-CLASS			ENSURE-CLASS
DEFTYPE
DEFUN			   FDEFINITION *		(SETF FDEFINITION) *
DEFVAR			   ***				***

 *   Assuming proposal FUNCTION-NAME:LARGE.
 **  Does not currently take an environment argument.
 *** Functions for SPECIAL proclamations would supply these (see below).

TYPEP and SUBTYPEP also need environment arguments, for reasons which were
discussed on the mailing list in January.

DEFPACKAGE has FIND-PACKAGE and MAKE-PACKAGE as its accessor and updator, but
no local vs remote distinction is currently specified.

Many compilers treat PROCLAIM specially when it appears at top level (not doing
so seriously reduces the utility of proclamations).  I think such treatment
ought to be made official, though possibly through the use of a macro, as is
being proposed for IN-PACKAGE => SELECT-PACKAGE.  If we do so, the various
declarations that are allowed by proclaim might also need functions. 

Note that none of these has an accessor defined in CLtL, and the only
create/update function defined in CLtL is PROCLAIM, which does not take an
environment argument.  Note that SEA-2 does not deal with all of these. 

Declaration		SEA-2
-----------------------------
SPECIAL			yes
TYPE			yes
FTYPE			yes
FUNCTION		yes (by transformation to FTYPE)
INLINE			no
NOTINLINE		no
IGNORE			no
OPTIMIZE		no
DECLARATION		no

Perhaps an AUGMENT-GLOBAL-ENVIRONMENT function needs to be added to SEA, to
record proclamations?  I think that such a function, combined with the accessor
functions in SEA would deal with DEFVAR and DEFPARAMETER, assuming that it is
never interesting to know that a variable is proclaimed special, rather than
either proclaimed or declared special (and similarly for type, ftype, and
lexical (if needed due to PROCLAIM-LEXICAL)).

kab
-------