From e4024f34fc4a72c9d680ea61bf28b10d0cb80854 Mon Sep 17 00:00:00 2001 From: "Chris Hall (GMCH)" Date: Thu, 10 Dec 2009 12:41:04 +0000 Subject: Allow orphan symbols to be unset -- lib/symtab.c Improved version. --- lib/symtab.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) (limited to 'lib/symtab.c') diff --git a/lib/symtab.c b/lib/symtab.c index adc21e73..885be426 100644 --- a/lib/symtab.c +++ b/lib/symtab.c @@ -880,15 +880,18 @@ symbol_set_value(symbol sym, void* new_value) { void* old_value ; - assert((sym->table != NULL) || (new_value == NULL)) ; - /* may not set non-NULL value for orphan symbol ! */ - old_value = sym->value ; sym->value = new_value ; - /* Invoke value_call_back (if any). */ - /* Note that the value_call_back may set/unset references and/or */ - /* define/undefine the value. */ + if (sym->table == NULL) /* watch out for orphans */ + { + assert((new_value == NULL) && (old_value == NULL)) ; + return NULL ; + } ; + + /* Invoke value_call_back (if any). */ + /* Note that the value_call_back may set/unset references and/or */ + /* define/undefine the value. */ if (((sym)->table->value_call_back != NULL) && ( (new_value != NULL) || (old_value != NULL) )) { -- cgit v1.2.3