ref: dbb92f94adb6431054f12c296795dffd134e8f03
parent: e228d9b24953a72ca8e10c0b8024f3ac9ce1fcb4
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Thu Feb 6 22:49:17 EST 2025
symbols created on init: specialize to avoid useless operations
--- a/src/compress.c
+++ b/src/compress.c
@@ -73,6 +73,6 @@
void
compress_init(void)
{- FL_sizesym = symbol(":size", false);- FL_tosym = symbol(":to", false);+ FL_sizesym = csymbol(":size");+ FL_tosym = csymbol(":to");}
--- a/src/cvalues.c
+++ b/src/cvalues.c
@@ -804,7 +804,7 @@
#define cv_intern(tok) \
do{ \- FL_##tok##sym = symbol(#tok, false); \
+ FL_##tok##sym = csymbol(#tok); \
}while(0)
#define ctor_cv_intern(tok, nt, ctype) \
@@ -1330,10 +1330,10 @@
ctor_cv_intern(array, NONNUMERIC, int);
- FL_stringtypesym = symbol("*string-type*", false);+ FL_stringtypesym = csymbol("*string-type*");setc(FL_stringtypesym, fl_list2(FL_arraysym, FL_bytesym));
- FL_runestringtypesym = symbol("*runestring-type*", false);+ FL_runestringtypesym = csymbol("*runestring-type*");setc(FL_runestringtypesym, fl_list2(FL_arraysym, FL_runesym));
mk_primtype(int8, int8_t);
--- a/src/flisp.c
+++ b/src/flisp.c
@@ -220,6 +220,14 @@
return tagptr(v, TAG_SYM);
}
+value_t
+csymbol_(const char *str, int len)
+{+ symbol_t *v = mk_symbol(str, len, false);
+ FL(symtab) = Tsetl(FL(symtab), str, len, v);
+ return tagptr(v, TAG_SYM);
+}
+
BUILTIN("gensym", gensym) {argcount(nargs, 0);
@@ -1316,61 +1324,61 @@
goto failed;
comparehash_init();
- FL_lambda = symbol("λ", false);- FL_function = symbol("function", false);- FL_quote = symbol("quote", false);- FL_trycatch = symbol("trycatch", false);- FL_backquote = symbol("quasiquote", false);- FL_comma = symbol("unquote", false);- FL_commaat = symbol("unquote-splicing", false);- FL_commadot = symbol("unquote-nsplicing", false);- FL_IOError = symbol("io-error", false);- FL_ParseError = symbol("parse-error", false);- FL_TypeError = symbol("type-error", false);- FL_ArgError = symbol("arg-error", false);- FL_UnboundError = symbol("unbound-error", false);- FL_KeyError = symbol("key-error", false);- FL_MemoryError = symbol("memory-error", false);- FL_BoundsError = symbol("bounds-error", false);- FL_DivideError = symbol("divide-error", false);- FL_Error = symbol("error", false);- FL_conssym = symbol("cons", false);- FL_symbolsym = symbol("symbol", false);- FL_fixnumsym = symbol("fixnum", false);- FL_vectorsym = symbol("vector", false);- FL_builtinsym = symbol("builtin", false);- FL_booleansym = symbol("boolean", false);- FL_nullsym = symbol("null", false);- FL_definesym = symbol("define", false);- FL_defmacrosym = symbol("define-macro", false);- FL_forsym = symbol("for", false);- FL_setqsym = symbol("set!", false);- FL_evalsym = symbol("eval", false);- FL_vu8sym = symbol("vu8", false);- FL_fnsym = symbol("fn", false);- FL_nulsym = symbol("nul", false);- FL_alarmsym = symbol("alarm", false);- FL_backspacesym = symbol("backspace", false);- FL_tabsym = symbol("tab", false);- FL_linefeedsym = symbol("linefeed", false);- FL_vtabsym = symbol("vtab", false);- FL_pagesym = symbol("page", false);- FL_returnsym = symbol("return", false);- FL_escsym = symbol("esc", false);- FL_spacesym = symbol("space", false);- FL_deletesym = symbol("delete", false);- FL_newlinesym = symbol("newline", false);- FL_tsym = symbol("t", false);- FL_Tsym = symbol("T", false);- FL_fsym = symbol("f", false);- FL_Fsym = symbol("F", false);- FL_builtins_table_sym = symbol("*builtins*", false);+ FL_lambda = csymbol("λ");+ FL_function = csymbol("function");+ FL_quote = csymbol("quote");+ FL_trycatch = csymbol("trycatch");+ FL_backquote = csymbol("quasiquote");+ FL_comma = csymbol("unquote");+ FL_commaat = csymbol("unquote-splicing");+ FL_commadot = csymbol("unquote-nsplicing");+ FL_IOError = csymbol("io-error");+ FL_ParseError = csymbol("parse-error");+ FL_TypeError = csymbol("type-error");+ FL_ArgError = csymbol("arg-error");+ FL_UnboundError = csymbol("unbound-error");+ FL_KeyError = csymbol("key-error");+ FL_MemoryError = csymbol("memory-error");+ FL_BoundsError = csymbol("bounds-error");+ FL_DivideError = csymbol("divide-error");+ FL_Error = csymbol("error");+ FL_conssym = csymbol("cons");+ FL_symbolsym = csymbol("symbol");+ FL_fixnumsym = csymbol("fixnum");+ FL_vectorsym = csymbol("vector");+ FL_builtinsym = csymbol("builtin");+ FL_booleansym = csymbol("boolean");+ FL_nullsym = csymbol("null");+ FL_definesym = csymbol("define");+ FL_defmacrosym = csymbol("define-macro");+ FL_forsym = csymbol("for");+ FL_setqsym = csymbol("set!");+ FL_evalsym = csymbol("eval");+ FL_vu8sym = csymbol("vu8");+ FL_fnsym = csymbol("fn");+ FL_nulsym = csymbol("nul");+ FL_alarmsym = csymbol("alarm");+ FL_backspacesym = csymbol("backspace");+ FL_tabsym = csymbol("tab");+ FL_linefeedsym = csymbol("linefeed");+ FL_vtabsym = csymbol("vtab");+ FL_pagesym = csymbol("page");+ FL_returnsym = csymbol("return");+ FL_escsym = csymbol("esc");+ FL_spacesym = csymbol("space");+ FL_deletesym = csymbol("delete");+ FL_newlinesym = csymbol("newline");+ FL_tsym = csymbol("t");+ FL_Tsym = csymbol("T");+ FL_fsym = csymbol("f");+ FL_Fsym = csymbol("F");+ FL_builtins_table_sym = csymbol("*builtins*");- set(FL_printprettysym = symbol("*print-pretty*", false), FL_t);- set(FL_printreadablysym = symbol("*print-readably*", false), FL_t);- set(FL_printwidthsym = symbol("*print-width*", false), fixnum(FL(scr_width)));- set(FL_printlengthsym = symbol("*print-length*", false), FL_f);- set(FL_printlevelsym = symbol("*print-level*", false), FL_f);+ set(FL_printprettysym = csymbol("*print-pretty*"), FL_t);+ set(FL_printreadablysym = csymbol("*print-readably*"), FL_t);+ set(FL_printwidthsym = csymbol("*print-width*"), fixnum(FL(scr_width)));+ set(FL_printlengthsym = csymbol("*print-length*"), FL_f);+ set(FL_printlevelsym = csymbol("*print-level*"), FL_f);FL(lasterror) = FL_nil;
for(i = 0; i < nelem(builtins); i++){@@ -1377,8 +1385,8 @@
if(builtins[i].name)
set(symbol(builtins[i].name, false), builtin(i));
}
- setc(symbol("procedure?", false), builtin(OP_FUNCTIONP));- setc(symbol("top-level-bound?", false), builtin(OP_BOUNDP));+ setc(csymbol("procedure?"), builtin(OP_FUNCTIONP));+ setc(csymbol("top-level-bound?"), builtin(OP_BOUNDP));FL(the_empty_vector) = tagptr(alloc_words(1), TAG_VECTOR);
vector_setsize(FL(the_empty_vector), 0);
@@ -1385,9 +1393,9 @@
cvalues_init();
- set(symbol("*os-name*", false), cvalue_static_cstring(__os_name__));+ set(csymbol("*os-name*"), cvalue_static_cstring(__os_name__));#if defined(__os_version__)
- set(symbol("*os-version*", false), cvalue_static_cstring(__os_version__));+ set(csymbol("*os-version*"), cvalue_static_cstring(__os_version__));#endif
FL(memory_exception_value) = fl_list2(FL_MemoryError, cvalue_static_cstring("out of memory"));--- a/src/flisp.h
+++ b/src/flisp.h
@@ -193,6 +193,8 @@
/* symbol table */
value_t gensym(void);
value_t symbol(const char *str, bool copy) fl_hotfn;
+value_t csymbol_(const char *str, int len);
+#define csymbol(str) csymbol_(str, sizeof(str)-1)
const char *symbol_name(value_t v);
/* read, eval, print main entry points */
--- a/src/iostream.c
+++ b/src/iostream.c
@@ -438,16 +438,16 @@
void
iostream_init(void)
{- FL_iostreamsym = symbol("iostream", false);- FL_rdsym = symbol(":read", false);- FL_wrsym = symbol(":write", false);- FL_apsym = symbol(":append", false);- FL_crsym = symbol(":create", false);- FL_truncsym = symbol(":truncate", false);- FL_instrsym = symbol("*input-stream*", false);- FL_outstrsym = symbol("*output-stream*", false);+ FL_iostreamsym = csymbol("iostream");+ FL_rdsym = csymbol(":read");+ FL_wrsym = csymbol(":write");+ FL_apsym = csymbol(":append");+ FL_crsym = csymbol(":create");+ FL_truncsym = csymbol(":truncate");+ FL_instrsym = csymbol("*input-stream*");+ FL_outstrsym = csymbol("*output-stream*");FL(iostreamtype) = define_opaque_type(FL_iostreamsym, sizeof(ios_t), &iostream_vtable, nil);
- set(symbol("*stdout*", false), cvalue_from_ref(FL(iostreamtype), ios_stdout, sizeof(ios_t)));- set(symbol("*stderr*", false), cvalue_from_ref(FL(iostreamtype), ios_stderr, sizeof(ios_t)));- set(symbol("*stdin*", false), cvalue_from_ref(FL(iostreamtype), ios_stdin, sizeof(ios_t)));+ set(csymbol("*stdout*"), cvalue_from_ref(FL(iostreamtype), ios_stdout, sizeof(ios_t)));+ set(csymbol("*stderr*"), cvalue_from_ref(FL(iostreamtype), ios_stderr, sizeof(ios_t)));+ set(csymbol("*stdin*"), cvalue_from_ref(FL(iostreamtype), ios_stdin, sizeof(ios_t)));}
--
⑨