diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2015-07-02 06:13:18 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2015-07-02 06:13:18 -0700 |
commit | 7e13dd271df070671f9ef59969307d1bfb045ffb (patch) | |
tree | e39d85f36569a929b48047d2969be2615aeaaf2c /parser.c | |
parent | d0ddce910a9f541400a069ab402502e49093c5ca (diff) | |
download | txr-7e13dd271df070671f9ef59969307d1bfb045ffb.tar.gz txr-7e13dd271df070671f9ef59969307d1bfb045ffb.tar.bz2 txr-7e13dd271df070671f9ef59969307d1bfb045ffb.zip |
Hash-bang support for .tl files.
* parser.c (read_eval_stream): New boolean argument
to request hash bang support.
* parser.h (read_eval_stream): Declaration updated.
* eval.c (sys_load): Pass new thid argument to read_eval_stream,
to decline hash bang support.
* match.c (v_load): Likewise.
* txr.c (txr_main): Request hash bang support from
read_eval_stream. Thus files referenced from the txr
command line can have a #! line, which is ignored.
Diffstat (limited to 'parser.c')
-rw-r--r-- | parser.c | 11 |
1 files changed, 10 insertions, 1 deletions
@@ -252,10 +252,19 @@ val lisp_parse(val source_in, val error_stream, val error_return_val, val name_i return pi->syntax_tree; } -val read_eval_stream(val stream, val error_stream) +val read_eval_stream(val stream, val error_stream, val hash_bang_support) { val error_val = gensym(nil); + if (hash_bang_support) { + val firstline = get_line(stream); + + if (!match_str(firstline, lit("#!"), nil)) { + val string_stream = make_string_byte_input_stream(firstline); + stream = make_catenated_stream(list(string_stream, stream, nao)); + } + } + for (;;) { val form = lisp_parse(stream, error_stream, error_val, nil); |