From 1ed32834f51226c5808b147ea53cc76f7d928305 Mon Sep 17 00:00:00 2001 From: jjgarcia Date: Tue, 20 Dec 2005 10:33:06 +0000 Subject: [PATCH] Changing the function definition of a symbol in a locked package results in a correctable error --- src/CHANGELOG | 3 +++ src/c/assignment.d | 15 +++++++++------ src/c/package.d | 2 +- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/src/CHANGELOG b/src/CHANGELOG index f2e62cd86..bc101dfad 100644 --- a/src/CHANGELOG +++ b/src/CHANGELOG @@ -29,6 +29,9 @@ ECL 0.9i - Adding a new method to a generic function does no longer result in a warning when the function belongs to a locked package. + - Trying to change the function definition of a symbol in a locked package + results in a correctable error. + ;;; Local Variables: *** ;;; mode:text *** ;;; fill-column:79 *** diff --git a/src/c/assignment.d b/src/c/assignment.d index 312618005..6a36f2034 100644 --- a/src/c/assignment.d +++ b/src/c/assignment.d @@ -33,8 +33,10 @@ cl_set(cl_object var, cl_object val) @ if (Null(cl_functionp(def))) FEinvalid_function(def); - if (sym->symbol.hpack != Cnil && sym->symbol.hpack->pack.locked) - funcall(3, @'warn', make_constant_string("~S is being redefined."), fname); + if (sym->symbol.hpack != Cnil && sym->symbol.hpack->pack.locked) { + CEpackage_error("Attempt to redefine function ~S in locked package.", + "Ignore lock and proceed", fname->symbol.hpack, 1, fname); + } mflag = !Null(macro); if (sym->symbol.isform && !mflag) FEerror("Given that ~S is a special form, ~S cannot be defined as a function.", @@ -72,15 +74,16 @@ cl_makunbound(cl_object sym) ECL_SET(sym, OBJNULL); @(return sym) } - + cl_object cl_fmakunbound(cl_object fname) { cl_object sym = si_function_block_name(fname); - if (sym->symbol.hpack != Cnil && sym->symbol.hpack->pack.locked) - funcall(3, @'warn', make_constant_string("~S is being redefined."), - fname); + if (sym->symbol.hpack != Cnil && sym->symbol.hpack->pack.locked) { + CEpackage_error("Attempt to remove definition of function ~S in locked package.", + "Ignore lock and proceed", fname->symbol.hpack, 1, fname); + } if (SYMBOLP(fname)) { clear_compiler_properties(sym); #ifdef PDE diff --git a/src/c/package.d b/src/c/package.d index 5d5984b77..9872f8f6d 100644 --- a/src/c/package.d +++ b/src/c/package.d @@ -48,7 +48,7 @@ FEpackage_error(const char *message, cl_object package, int narg, ...) @':package', package); /* extra arguments */ } -static void +void CEpackage_error(const char *message, const char *continue_message, cl_object package, int narg, ...) { cl_va_list args;