|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
* LICENSE, LICENSE-CYG, METALICENSE, Makefile, alloca.h,
args.c, args.h, arith.c, arith.h, autoload.c, autoload.h,
buf.c, buf.h, cadr.c, cadr.h, chksum.c, chksum.h,
chksums/crc32.c, chksums/crc32.h, combi.c, combi.h, configure,
debug.c, debug.h, eval.c, eval.h, ffi.c, ffi.h, filter.c,
filter.h, ftw.c, ftw.h, gc.c, gc.h, glob.c, glob.h, gzio.c,
gzio.h, hash.c, hash.h, itypes.c, itypes.h, jmp.S,
lex.yy.c.shipped, lib.c, lib.h, linenoise/linenoise.c,
linenoise/linenoise.h, match.c, match.h, parser.c, parser.h,
parser.l, parser.y, protsym.c, psquare.h, rand.c, rand.h,
regex.c, regex.h, signal.c, signal.h, socket.c, socket.h,
stdlib/arith-each.tl, stdlib/asm.tl, stdlib/awk.tl,
stdlib/build.tl, stdlib/cadr.tl, stdlib/compiler.tl,
stdlib/constfun.tl, stdlib/conv.tl, stdlib/copy-file.tl,
stdlib/debugger.tl, stdlib/defset.tl, stdlib/doloop.tl,
stdlib/each-prod.tl, stdlib/error.tl, stdlib/except.tl,
stdlib/ffi.tl, stdlib/getopts.tl, stdlib/getput.tl,
stdlib/hash.tl, stdlib/ifa.tl, stdlib/keyparams.tl,
stdlib/match.tl, stdlib/op.tl, stdlib/optimize.tl,
stdlib/package.tl, stdlib/param.tl, stdlib/path-test.tl,
stdlib/pic.tl, stdlib/place.tl, stdlib/pmac.tl,
stdlib/quips.tl, stdlib/save-exe.tl, stdlib/socket.tl,
stdlib/stream-wrap.tl, stdlib/struct.tl, stdlib/tagbody.tl,
stdlib/termios.tl, stdlib/trace.tl, stdlib/txr-case.tl,
stdlib/type.tl, stdlib/vm-param.tl, stdlib/with-resources.tl,
stdlib/with-stream.tl, stdlib/yield.tl, stream.c, stream.h,
struct.c, struct.h, strudel.c, strudel.h, sysif.c, sysif.h,
syslog.c, syslog.h, termios.c, termios.h, time.c, time.h,
tree.c, tree.h, txr.1, txr.c, txr.h, unwind.c, unwind.h,
utf8.c, utf8.h, vm.c, vm.h, vmop.h, win/cleansvg.txr,
y.tab.c.shipped: Copyright year bumped to 2023.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
In autoload the _set_entries functions are being called
twice: the first time with a functional argument to associate
symbols with that function, and then when the module is loaded,
a second time with a nil argument to erase those associations.
This is inefficient; some modules have many symbols to remove
from a hash. What we can do is make the hash weak; associate
the symbols with a function weakly, such that those entries
lapse when the function becomes garbage. Lapsing of weak hash table
entries during GC is more efficient than making numerous calls
to remhash. We can use a separate strong hash table to hang on
to the functions; when a module is instantiated, all we have to
do is remove the instantiation function from the table. Then
that function is reachable only as a weak value from the other
tables.
* autoload.c (autoload_reg_hash): New static variable.
(place_instantiate, ver_instantiate, ifa_instantiate,
txr_case_instantiate, with_resources_instantiate,
path_test_instantiate, struct_instantiate,
with_stream_instantiate, hash_instantiate, except_instantiate,
type_instantiate, yield_instantiate, sock_instantiate,
termios_instantiate, awk_instantiate, build_instantiate,
trace_instantiate, getopts_instantiate, package_instantiate,
getput_instantiate, tagbody_instantiate, pmac_instantiate,
error_instantiate, keyparams_instantiate, ffi_instantiate,
doloop_instantiate, stream_wrap_instantiate, asm_instantiate,
compiler_instantiate, debugger_instantiate, op_instantiate,
save_exe_instantiate, defset_instantiate,
copy_file_instantiate, arith_each_instantiate,
each_prod_instantiate, quips_instantiate, match_instantiate,
doc_instantiate, pic_instantiate, constfun_instantiate):
Remove set_fun argument and call to that function.
(autoload_reg): Remove argument from instantiate function.
Add the function to the autoload_reg_hash table, associated
with the t symbol.
(autoload_init_tables): Initialize autoload_reg_hash.
Turn the existing symbol hashes into weak tables. Let's use
weak or-semantics, so they don't hang onto uninterned symbols.
(autoload_try): If a symbol resolves to a function,
indicating a load might be required, we now must verify
whether that is really the case by seeing whether the function
exists in the autolod_reg_hash table. If so, we remove it from
that table and do the load.
* autoload.h (autoload_reg): Declaration updated.
* gencadr.txr (cadr_register): Remove set_fun argument and
call to that function.
* cadr.c: Regenerated.
|