aboutsummaryrefslogtreecommitdiff
path: root/src/primitives.c
diff options
context:
space:
mode:
authorMistivia <i@mistivia.com>2025-06-22 15:21:42 +0800
committerMistivia <i@mistivia.com>2025-06-22 15:22:04 +0800
commit9991238f133f2cb06ee366b2c92dbb32a126ae9d (patch)
treee07e89bebf7492b72480cfa6f2b122a7c979b6be /src/primitives.c
parent6371e6ff8f5f78a48492a6ebb52001c4851dde6c (diff)
optimize name lookup
Diffstat (limited to 'src/primitives.c')
-rw-r--r--src/primitives.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/src/primitives.c b/src/primitives.c
index ca04f84..92e8110 100644
--- a/src/primitives.c
+++ b/src/primitives.c
@@ -136,7 +136,7 @@ SExpRef primitive_setq(Interp *interp, SExpRef args, bool istail) {
if (REF(name)->type != kSymbolSExp) goto error;
value = EVAL(exp);
if (CTL_FL(value)) return value;
- return lisp_setq(interp, REF(name)->str, value);
+ return lisp_setq(interp, name, value);
error:
return new_error(interp, "setq: syntax error.\n");
}
@@ -188,7 +188,7 @@ SExpRef primitive_let(Interp *interp, SExpRef args, bool istail) {
ret = val;
goto end;
}
- ret = lisp_setq(interp, REF(CAR(x))->str, val);
+ ret = lisp_setq(interp, CAR(x), val);
if (CTL_FL(ret)) goto end;
iter = CDR(iter);
}
@@ -275,7 +275,7 @@ SExpRef primitive_defun(Interp *interp, SExpRef args, bool istail) {
param = CADR(args);
body = CDDR(args);
function = new_lambda(interp, param, body, interp->top_level);
- lisp_defun(interp, REF(name)->str, function);
+ lisp_defun(interp, name, function);
return name;
error:
return new_error(interp, "defun: syntax error.\n");
@@ -292,7 +292,7 @@ SExpRef primitive_defmacro(Interp *interp, SExpRef args, bool istail) {
param = CADR(args);
body = CDDR(args);
macro = new_macro(interp, param, body);
- lisp_defun(interp, REF(name)->str, macro);
+ lisp_defun(interp, name, macro);
return name;
error:
return new_error(interp, "defmacro: syntax error.\n");
@@ -310,7 +310,7 @@ SExpRef primitive_defvar(Interp *interp, SExpRef args, bool istail) {
exp = CADR(args);
val = EVAL(exp);
if (CTL_FL(val)) return val;
- lisp_defvar(interp, REF(name)->str, val);
+ lisp_defvar(interp, name, val);
return name;
error:
return new_error(interp, "defvar: syntax error.\n");
@@ -319,7 +319,7 @@ error:
SExpRef primitive_function(Interp *interp, SExpRef args, bool istail) {
if (LENGTH(args) != 1) goto error;
if (VALTYPE(CAR(args)) != kSymbolSExp) goto error;
- return lisp_lookup_func(interp, REF(CAR(args))->str);
+ return lisp_lookup_func(interp, CAR(args));
error:
return new_error(interp, "function: syntax error.\n");
}
@@ -376,7 +376,7 @@ SExpRef primitive_macroexpand1(Interp *interp, SExpRef args, bool istail) {
if (LENGTH(args) != 1) goto error;
args = CAR(args);
if (VALTYPE(CAR(args)) != kSymbolSExp) goto error;
- macro = lisp_lookup_func(interp, REF(CAR(args))->str);
+ macro = lisp_lookup_func(interp, CAR(args));
if (VALTYPE(macro) != kMacroSExp) goto error;
return lisp_macroexpand1(interp, macro, CDR(args));
error: