From 144cabede201ace9507473a9c9a9200f475eec1a Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Mon, 29 Feb 2016 06:05:51 -0800 Subject: Implement @(next nil). * match.c (v_next): If argument to @(next) is nil, then evaluate remaining query in context with no list of files, and no data. * txr.1: Documented @(next nil). --- match.c | 16 ++++++++++------ txr.1 | 12 ++++++++++++ 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/match.c b/match.c index 187f7ec9..b3684180 100644 --- a/match.c +++ b/match.c @@ -2310,9 +2310,7 @@ static val v_next(match_files_ctx *c) if3(c->data, cons(c->data, c->data_lineno), t)); return nil; } - } - - if (source == env_k) { + } else if (source == env_k) { if (rest(args)) { sem_error(specline, lit("(next :env) takes no additional arguments"), nao); } else { @@ -2324,12 +2322,18 @@ static val v_next(match_files_ctx *c) if3(c->data, cons(c->data, c->data_lineno), t)); return nil; } - } - - if (consp(source)) { + } else if (consp(source)) { val sym = car(source); if (sym == var_s || sym == expr_s) meta = t; + } else if (!source) { + cons_bind (new_bindings, success, + match_files(mf_all(c->spec, nil, c->bindings, nil, lit("empty")))); + + if (success) + return cons(new_bindings, + if3(c->data, cons(c->data, c->data_lineno), t)); + return nil; } if (opt_compat && opt_compat <= 124) diff --git a/txr.1 b/txr.1 index 3ece5efb..3b1bf55b 100644 --- a/txr.1 +++ b/txr.1 @@ -3163,6 +3163,7 @@ and takes various arguments, according to these possibilities: .mets @(next :env) .mets @(next :list << expr ) .mets @(next :string << expr ) +.mets @(next nil) .cble The lone @@ -3306,6 +3307,17 @@ the list which is not an empty input stream, but a stream consisting of one empty line. +The +.code @(next nil) +variant indicates that the following subquery is applied to empty data, +and the list of data sources from the command line is considered empty. +This directive is useful in front of \*(TX code which doesn't process data +sources from the command line, but takes command line arguments. +The +.code @(next nil) +incantation absolutely prevents \*(TX from trying to open the +first command line argument as a data source. + Note that the .code @(next) directive only redirect the source of input over the scope of subquery in which -- cgit v1.2.3