Work on dynamic variable

This commit is contained in:
2026-07-19 02:23:10 -07:00
parent 67b68f8c61
commit f87af5efd2
11 changed files with 285 additions and 112 deletions
+9 -5
View File
@@ -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;
}