Work on dynamic variable
This commit is contained in:
+9
-5
@@ -74,9 +74,7 @@ noreturn void signal_type_error(LispVal *obj, LispVal *typespec) {
|
||||
DEFINE_SYMBOL(nil, "nil");
|
||||
DEFINE_SYMBOL(t, "t");
|
||||
DEFINE_SYMBOL(unbound, "unbound");
|
||||
DEFINE_SYMBOL(lexical_environment, "lexical-environment");
|
||||
|
||||
LispVal *Vlexical_environment;
|
||||
DEFVAR(lexical_environment, "lexical-environment", "", Qnil);
|
||||
|
||||
DEFUN(id, "id", (LispVal * obj), "(id)", "") {
|
||||
// TODO not all values are handled here
|
||||
@@ -112,10 +110,12 @@ DEFUN(make_symbol, "make-symbol", (LispVal * name), "(name)",
|
||||
obj->name = name;
|
||||
obj->function = Qnil;
|
||||
obj->plist = Qnil;
|
||||
obj->value_type = SYMBOL_NORMAL;
|
||||
if (KEYWORDP(obj)) {
|
||||
obj->value = obj;
|
||||
obj->value.normal = obj;
|
||||
obj->flags |= SYMBOL_CONST_VALUE;
|
||||
} else {
|
||||
obj->value = Qunbound;
|
||||
obj->value.normal = Qunbound;
|
||||
}
|
||||
return obj;
|
||||
}
|
||||
@@ -161,6 +161,10 @@ DEFUN(set, "set", (LispVal * sym, LispVal *value), "(sym value)", "") {
|
||||
|
||||
DEFUN(fset, "fset", (LispVal * sym, LispVal *value), "(sym value)", "") {
|
||||
CHECK_TYPE(sym, TYPE_SYMBOL);
|
||||
if (CONST_FUNCTION_P(sym)) {
|
||||
// TODO throw
|
||||
abort();
|
||||
}
|
||||
((LispSymbol *) sym)->function = value;
|
||||
return value;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user