summaryrefslogtreecommitdiffstats
path: root/parser.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2015-07-02 06:13:18 -0700
committerKaz Kylheku <kaz@kylheku.com>2015-07-02 06:13:18 -0700
commit7e13dd271df070671f9ef59969307d1bfb045ffb (patch)
treee39d85f36569a929b48047d2969be2615aeaaf2c /parser.c
parentd0ddce910a9f541400a069ab402502e49093c5ca (diff)
downloadtxr-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.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/parser.c b/parser.c
index 32052700..c0f3c6da 100644
--- a/parser.c
+++ b/parser.c
@@ -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);