KBD2A5MUJHKGV4JD6MLJXTKNAYZ5D44LX5WRB2ZXX5YCWBODWR3AC
HDINGIHXRIQBDEWVYCC26V5JBRXTK6FOG2E3VD6RDSU44EQIHSAQC
TN5RCIH3OI5AW756GICACN24TBABGLNDQ7LZJTUYHXYVW3ARGBBQC
YU2N2HEPNDEB65LGBWESEHNZNCZ63H3MGT4R7VLX4KMZHFYC4SIAC
2CXQ53RHKGIT5KR7VHOVRVHCD5MK4V2J3AJDQ3CNSJLHJXXA4GXQC
UW27LKXM2BJ77FQLTY4WPKDSSWI2RFNFRJ7CB4U3TS7KYVIV72LQC
JNVQOJXCBGPCN3XT2GAAGZ2ZOIUVGRB6WCRWOPI6RPJDDWL2KGKAC
A56GZW6HLIZQ6NX47XFPEPPGLZAA725KNYST7VK2MMK3DCCIXAXAC
NBEO3TPNOUG7MRFYRSDDFB5TQKTEDL6GHHFQVOB5MXVPIBKFNZKAC
5XO7IKBGCVXGVWMDJDE5MELS4FWRITKAU6NNV36NQ4TOZRR7UQ7QC
JDZASPALXSFZOL3MXCKBPX74CUD3W743ZJ6W2422FIJ7NJOD67ZAC
OUNA3ZMTTISFWX3HHIJ46WTYQJBX4OFSNU4SU3GOJMBLLHQDFT7AC
GOXQFKWDQUYUH3XLJSAUL5LPNQ46NDO3ZGFJNVTECB4ARGZ4DW3QC
I3MID22EURRK26C4JZ2U5FBEZ57GZVMBT44KFKTU4BBYXKLILWRAC
A2JAXDJWT2FAKADYOY6QOQ7LQRMTTCDIOYT7STSESVHLZQEQJBMAC
MPN7OJSZD5CS5N7WWS3ZSOYE7ZRCABIBHZDMHVS6IT25EO2INK7AC
6WM2DD32XSC2HFLOXBDPFCU6BI2BD5ZYFGBIEIVEQOKWRCNTXROQC
FITNBSMMJCQIFJGUMVSZYHJM4OSBXEZO5YWYEJ4CXGMFPBSIT5WAC
# the reason to keep lists of parser state is so we can have forms
# that span lines, rather than requiring each line of input to be
# a complete form.
tokenize($0)
read_forms_into(_TO_EVAL)
# the reason to keep global arrays of parser state (_TOKENS,
# _TO_EVAL) is so we can have forms that span lines, rather than
# requiring each line of input to be a complete form.
tokenize($0, _TOKENS, _WHERE, _INSIDE_STRING)
read_forms_into(_TO_EVAL, _TOKENS, _WHERE, _INSIDE_STRING)
return _nil()
}
}
function _load(fn, my_tokens, my_where, my_inside_string, my_to_eval) {
# arrays
delete my_tokens
delete my_where
delete my_inside_string
delete my_to_eval
if(_TYPE[fn] == "s") {
# eval_read_str appears to work with multiple forms, but not
# partial forms across calls. scarcely surprising.
while((getline < _STRING[fn]) > 0) {
tokenize($0, my_tokens, my_where, my_inside_string)
read_forms_into(my_to_eval, my_tokens, my_where, my_inside_string)
_just_eval_all(my_to_eval) # may not contain anything
delete my_to_eval
}
_incomplete_parse_at_end(my_tokens, my_where, my_inside_string)
close(fn)
return _true()
} else {
logg_err("_load", "filename to load from should be a string")