diff options
| author | Mistivia <i@mistivia.com> | 2025-06-22 15:21:42 +0800 |
|---|---|---|
| committer | Mistivia <i@mistivia.com> | 2025-06-22 15:22:04 +0800 |
| commit | 9991238f133f2cb06ee366b2c92dbb32a126ae9d (patch) | |
| tree | e07e89bebf7492b72480cfa6f2b122a7c979b6be /src/primitives.c | |
| parent | 6371e6ff8f5f78a48492a6ebb52001c4851dde6c (diff) | |
optimize name lookup
Diffstat (limited to 'src/primitives.c')
| -rw-r--r-- | src/primitives.c | 14 |
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: |
