From dc20e04cf1e2645158d01f1fc06d744402a1ee99 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Tue, 27 Sep 2011 18:27:33 -0700 Subject: * match.c (match_files): Bugfix in skip directive. We should try the match at least once even if there is no data after a hard skip, so that the query has an opportunity to do an explicit match for no data, as with @(endp). This commit makes possible queries like: @fourth_line_from_bottom @(skip 1 3) @(eof) This query depends on @(skip 1 3) not failing when it runs out of data, because @(eof) checks for htis. --- ChangeLog | 13 +++++++++++++ match.c | 5 ++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index a9b65e4a..aeaf659a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,16 @@ +2011-09-27 Kaz Kylheku + + * match.c (match_files): Bugfix in skip directive. + We should try the match at least once even if there is no data + after a hard skip, so that the query has an opportunity + to do an explicit match for no data, as with @(endp). + This commit makes possible queries like: + @fourth_line_from_bottom + @(skip 1 3) + @(eof) + This query depends on @(skip 1 3) not failing when + it runs out of data, because @(eof) checks for htis. + 2011-09-27 Kaz Kylheku * lib.c (eof_s): New symbol variable. diff --git a/match.c b/match.c index 73435770..bb44ff52 100644 --- a/match.c +++ b/match.c @@ -992,7 +992,7 @@ repeat_spec_same_data: num(data_lineno), nao); } - while (data && (!max || reps_max++ < cmax)) { + while (!max || reps_max++ < cmax) { result = match_files(spec, files, bindings, data, num(data_lineno)); @@ -1006,6 +1006,9 @@ repeat_spec_same_data: num(data_lineno), nao); data = rest(data); data_lineno++; + + if (!data) + break; } uw_block_end; -- cgit v1.2.3