summaryrefslogtreecommitdiffstats
path: root/eval.c
diff options
context:
space:
mode:
Diffstat (limited to 'eval.c')
-rw-r--r--eval.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/eval.c b/eval.c
index 0e247fda..3c8d83f5 100644
--- a/eval.c
+++ b/eval.c
@@ -5832,6 +5832,18 @@ static val symbol_value(val sym)
lookup_symac(nil, sym)));
}
+static val set_symbol_value(val sym, val value)
+{
+ val vbind = lookup_var(nil, sym);
+
+ if (vbind)
+ rplacd(vbind, value);
+ else
+ sethash(top_vb, sym, cons(sym, value));
+
+ return value;
+}
+
static val symbol_function(val sym)
{
uses_or2;
@@ -7579,6 +7591,7 @@ void eval_init(void)
reg_varl(intern(lit("top-fb"), system_package), top_fb);
reg_varl(intern(lit("top-mb"), system_package), top_mb);
reg_fun(intern(lit("symbol-value"), user_package), func_n1(symbol_value));
+ reg_fun(intern(lit("set-symbol-value"), system_package), func_n2(set_symbol_value));
reg_fun(intern(lit("symbol-function"), user_package), func_n1(symbol_function));
reg_fun(intern(lit("symbol-macro"), user_package), func_n1(symbol_macro));
reg_fun(intern(lit("boundp"), user_package), func_n1(boundp));