diff --git a/src/c/assignment.d b/src/c/assignment.d index 96f811489..55727b554 100644 --- a/src/c/assignment.d +++ b/src/c/assignment.d @@ -57,11 +57,15 @@ si_setf_namep(cl_object arg) @(defun si::fset (fun def &optional macro pprint) cl_type t; + bool mflag; @ + mflag = !Null(macro); if (!SYMBOLP(fun)) { cl_object sym = setf_namep(fun); if (sym == OBJNULL) FEtype_error_symbol(fun); + if (mflag) + FEerror("Cannot define a macro with name (SETF ~S).", 1, fun); fun = CADR(fun); putprop(fun, sym, @'si::setf-symbol'); remprop(fun, @'si::setf-lambda'); @@ -69,13 +73,9 @@ si_setf_namep(cl_object arg) remprop(fun, @'si::setf-update'); fun = sym; } - if (fun->symbol.isform) { - if (fun->symbol.mflag) { - if (symbol_value(@'si::*inhibit-macro-special*') != Cnil) - fun->symbol.isform = FALSE; - } else if (symbol_value(@'si::*inhibit-macro-special*') != Cnil) - FEerror("~S, a special form, cannot be redefined.", 1, fun); - } + if (fun->symbol.isform && !mflag) + FEerror("~S, a special form, cannot be redefined as a function.", + 1, fun); clear_compiler_properties(fun); if (fun->symbol.hpack->pack.locked && SYM_FUN(fun) != OBJNULL) funcall(3, @'warn', make_simple_string("~S is being redefined."), fun); @@ -121,13 +121,6 @@ cl_fmakunbound(cl_object sym) cl_fmakunbound(sym1); @(return sym) } - if (sym->symbol.isform) { - if (sym->symbol.mflag) { - if (symbol_value(@'si::*inhibit-macro-special*') != Cnil) - sym->symbol.isform = FALSE; - } else if (symbol_value(@'si::*inhibit-macro-special*') != Cnil) - FEerror("~S, a special form, cannot be redefined.", 1, sym); - } clear_compiler_properties(sym); #ifdef PDE remprop(sym, @'defun'); @@ -143,8 +136,7 @@ void clear_compiler_properties(cl_object sym) { si_unlink_symbol(sym); - if (symbol_value(@'si::*inhibit-macro-special*') != Cnil) - (void)funcall(2, @'si::clear-compiler-properties', sym); + funcall(2, @'si::clear-compiler-properties', sym); } cl_object @@ -165,7 +157,6 @@ record_source_pathname(cl_object sym, cl_object def) void init_assignment(void) { - SYM_VAL(@'si::*inhibit-macro-special*') = Cnil; #ifdef PDE SYM_VAL(@'si::*record-source-pathname-p*') = Cnil; #endif diff --git a/src/c/cfun.d b/src/c/cfun.d index 063921d94..373f252f1 100644 --- a/src/c/cfun.d +++ b/src/c/cfun.d @@ -60,42 +60,22 @@ cl_make_cclosure_va(cl_objectfn self, cl_object env, cl_object block) void cl_def_c_function(cl_object sym, cl_object (*self)(), int narg) { - if (!SYMBOLP(sym)) - FEtype_error_symbol(sym); - if (sym->symbol.isform && sym->symbol.mflag) - sym->symbol.isform = FALSE; - clear_compiler_properties(sym); - SYM_FUN(sym) = cl_make_cfun(self, sym, symbol_value(@'si::*cblock*'), narg); - sym->symbol.mflag = FALSE; + si_fset(2, sym, + cl_make_cfun(self, sym, symbol_value(@'si::*cblock*'), narg)); } void cl_def_c_macro_va(cl_object sym, cl_objectfn self) { - cl_object cf; - - if (!SYMBOLP(sym)) - FEtype_error_symbol(sym); - if (sym->symbol.isform && sym->symbol.mflag) - sym->symbol.isform = FALSE; - clear_compiler_properties(sym); -#ifdef PDE - record_source_pathname(sym, @'defmacro'); -#endif - SYM_FUN(sym) = cl_make_cfun_va(self, sym, symbol_value(@'si::*cblock*')); - sym->symbol.mflag = TRUE; + si_fset(3, sym, cl_make_cfun_va(self, sym, symbol_value(@'si::*cblock*')), + Ct); } void cl_def_c_function_va(cl_object sym, cl_objectfn self) { - if (!SYMBOLP(sym)) - FEtype_error_symbol(sym); - if (sym->symbol.isform && sym->symbol.mflag) - sym->symbol.isform = FALSE; - clear_compiler_properties(sym); - SYM_FUN(sym) = cl_make_cfun_va(self, sym, symbol_value(@'si::*cblock*')); - sym->symbol.mflag = FALSE; + si_fset(2, sym, + cl_make_cfun_va(self, sym, symbol_value(@'si::*cblock*'))); } cl_object diff --git a/src/c/macros.d b/src/c/macros.d index c213378fb..b0eeba6e7 100644 --- a/src/c/macros.d +++ b/src/c/macros.d @@ -132,5 +132,4 @@ void init_macros(void) { SYM_VAL(@'*macroexpand-hook*') = @'funcall'; - SYM_VAL(@'si::*inhibit-macro-special*') = Cnil; } diff --git a/src/c/symbols_list.h b/src/c/symbols_list.h index 50017c568..e806f6c34 100644 --- a/src/c/symbols_list.h +++ b/src/c/symbols_list.h @@ -920,7 +920,6 @@ cl_symbols[] = { {"SI::*IGNORE-ERRORS*", SI_SPECIAL, NULL, -1}, {"SI::*IGNORE-EOF-ON-TERMINAL-IO*", SI_SPECIAL, NULL, -1}, {"SI::*INDENT-FORMATTED-OUTPUT*", SI_SPECIAL, NULL, -1}, -{"SI::*INHIBIT-MACRO-SPECIAL*", SI_SPECIAL, NULL, -1}, {"SI::*INIT-FUNCTION-PREFIX*", SI_SPECIAL, NULL, -1}, {"SI::*INTERRUPT-ENABLE*", SI_SPECIAL, NULL, 1}, {"SI::*KEEP-DEFINITIONS*", SI_SPECIAL, NULL, -1}, diff --git a/src/cmp/sysfun.lsp b/src/cmp/sysfun.lsp index 53275a095..4e5e67c68 100644 --- a/src/cmp/sysfun.lsp +++ b/src/cmp/sysfun.lsp @@ -852,7 +852,7 @@ type_of(#0)==t_bitvector")) (SI::STRING-TO-OBJECT (T) T) (si::STANDARD-READTABLE (T) T) (SYMBOL-FUNCTION (T) T NIL NIL - :inline-always ((t) t nil t "cl_symbol_function(#0)")) + :inline-always ((t) t nil t "symbol_function(#0)")) (FBOUNDP (symbol) T nil t) (SYMBOL-VALUE (symbol) T) (BOUNDP (symbol) T nil t diff --git a/src/lsp/evalmacros.lsp b/src/lsp/evalmacros.lsp index 51f514930..1228d05ca 100644 --- a/src/lsp/evalmacros.lsp +++ b/src/lsp/evalmacros.lsp @@ -11,7 +11,6 @@ (si::select-package "SYSTEM") (eval-when (eval compile) (defun sys:clear-compiler-properties (symbol))) -(eval-when (eval compile) (setq sys:*inhibit-macro-special* nil)) (defmacro defun (name vl &body body &aux doc-string) "Syntax: (defun name lambda-list {decl | doc}* {form}*) diff --git a/src/lsp/setf.lsp b/src/lsp/setf.lsp index 1d4e1add3..5dd3ccd65 100644 --- a/src/lsp/setf.lsp +++ b/src/lsp/setf.lsp @@ -13,7 +13,6 @@ (in-package "SYSTEM") (eval-when (eval compile) (defun sys::clear-compiler-properties (symbol))) -(eval-when (eval compile) (setq sys:*inhibit-macro-special* nil)) ;;; DEFSETF macro. (defmacro defsetf (access-fn &rest rest &aux doc)