The purpose of this patch is to make guile's internal memoizers
authorDirk Herrmann <dirk@dirk-herrmanns-seiten.de>
Sun, 4 May 2003 08:36:56 +0000 (08:36 +0000)
committerDirk Herrmann <dirk@dirk-herrmanns-seiten.de>
Sun, 4 May 2003 08:36:56 +0000 (08:36 +0000)
commit3b88ed2a4d07d7eb7e664d12529cdab9fc8100c4
treebaaf4541e0ff789799ac29c74d53a44d5fda074f
parenta7b0aa508c58de7e74119e8bd8c535b442a1933c
The purpose of this patch is to make guile's internal memoizers
distinguishable from memoizing macros created on the scheme level
or from user provided primitive memoizing macros.  The reason is,
that the internal memoizers are the only ones that are allowed to
transform their scheme input into memoizer byte code, while all
other memoizing macros may only transform scheme code into new
scheme code.

To achieve this, a new macro type 'builtin-macro!' is introduced.
Currently, 'builtin-macro!'s are handled as memoizing macros, but
this will change when the memoizer and executor are separated.

* macros.[ch] (scm_i_makbimacro): New.

* macros.h (SCM_BUILTIN_MACRO_P): New.

* macros.c (macro_print, scm_macro_type): Support builtin-macro!s.

* eval.c, goops.c: All of guile's primitive memoizing macros are
primitive builtin-macros now.

* eval.c (scm_macroexp, SCM_CEVAL): Make sure the primitive
builtin-macros are handled equally to memoizing macros.
libguile/ChangeLog
libguile/eval.c
libguile/goops.c
libguile/macros.c
libguile/macros.h