2
assignment.c -- Assignment.
5
Copyright (c) 1984, Taiichi Yuasa and Masami Hagiya.
6
Copyright (c) 1990, Giuseppe Attardi.
7
Copyright (c) 2001, Juan Jose Garcia Ripoll.
9
ECL is free software; you can redistribute it and/or
10
modify it under the terms of the GNU Library General Public
11
License as published by the Free Software Foundation; either
12
version 2 of the License, or (at your option) any later version.
14
See file '../Copyright' for full details.
21
cl_set(cl_object var, cl_object val)
24
FEtype_error_symbol(var);
25
if (var->symbol.stype == stp_constant)
26
FEinvalid_variable("Cannot assign to the constant ~S.", var);
27
return1(ECL_SETQ(var, val));
30
@(defun si::fset (fname def &optional macro pprint)
31
cl_object sym = si_function_block_name(fname);
34
if (Null(cl_functionp(def)))
35
FEinvalid_function(def);
36
if (sym->symbol.hpack != Cnil && sym->symbol.hpack->pack.locked) {
37
CEpackage_error("Attempt to redefine function ~S in locked package.",
38
"Ignore lock and proceed", fname->symbol.hpack, 1, fname);
41
if (sym->symbol.isform && !mflag)
42
FEerror("Given that ~S is a special form, ~S cannot be defined as a function.",
45
sym->symbol.mflag = mflag;
47
clear_compiler_properties(sym);
48
#ifndef ECL_CMU_FORMAT
50
si_rem_sysprop(sym, @'si::pretty-print-format');
52
si_put_sysprop(sym, @'si::pretty-print-format', pprint);
56
FEerror("~S is not a valid name for a macro.", 1, fname);
57
si_put_sysprop(sym, @'si::setf-symbol', def);
58
si_rem_sysprop(sym, @'si::setf-lambda');
59
si_rem_sysprop(sym, @'si::setf-method');
60
si_rem_sysprop(sym, @'si::setf-update');
66
cl_makunbound(cl_object sym)
69
FEtype_error_symbol(sym);
70
if ((enum ecl_stype)sym->symbol.stype == stp_constant)
71
FEinvalid_variable("Cannot unbind the constant ~S.", sym);
72
/* FIXME! The semantics of MAKUNBOUND is not very clear with local
74
ECL_SET(sym, OBJNULL);
79
cl_fmakunbound(cl_object fname)
81
cl_object sym = si_function_block_name(fname);
83
if (sym->symbol.hpack != Cnil && sym->symbol.hpack->pack.locked) {
84
CEpackage_error("Attempt to remove definition of function ~S in locked package.",
85
"Ignore lock and proceed", fname->symbol.hpack, 1, fname);
88
clear_compiler_properties(sym);
90
si_rem_sysprop(fname, @'defun');
93
sym->symbol.mflag = FALSE;
95
si_rem_sysprop(sym, @'si::setf-symbol');
96
si_rem_sysprop(sym, @'si::setf-lambda');
97
si_rem_sysprop(sym, @'si::setf-method');
98
si_rem_sysprop(sym, @'si::setf-update');
104
clear_compiler_properties(cl_object sym)
107
si_unlink_symbol(sym);
108
funcall(2, @'si::clear-compiler-properties', sym);
114
record_source_pathname(cl_object sym, cl_object def)
116
if (symbol_value(@'si::*record-source-pathname-p*') != Cnil)
117
(void)funcall(3, @'si::record-source-pathname', sym, def);
122
si_get_sysprop(cl_object sym, cl_object prop)
124
cl_object plist = gethash_safe(sym, cl_core.system_properties, Cnil);
125
prop = ecl_getf(plist, prop, OBJNULL);
126
if (prop == OBJNULL) {
134
si_put_sysprop(cl_object sym, cl_object prop, cl_object value)
137
plist = gethash_safe(sym, cl_core.system_properties, Cnil);
138
sethash(sym, cl_core.system_properties, si_put_f(plist, value, prop));
143
si_rem_sysprop(cl_object sym, cl_object prop)
145
cl_object plist, found;
146
plist = gethash_safe(sym, cl_core.system_properties, Cnil);
147
plist = si_rem_f(plist, prop);
149
sethash(sym, cl_core.system_properties, plist);