diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2012-03-01 22:00:11 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2012-03-01 22:04:54 -0800 |
commit | ed157718223eaca5f02a5fff4a801643a07dff0b (patch) | |
tree | d23554e176df3877c71e4316cd195d8ce091a92a /match.c | |
parent | d4830e29da794cdb5704109343dbe4d0f0d97105 (diff) | |
download | txr-ed157718223eaca5f02a5fff4a801643a07dff0b.tar.gz txr-ed157718223eaca5f02a5fff4a801643a07dff0b.tar.bz2 txr-ed157718223eaca5f02a5fff4a801643a07dff0b.zip |
* match.c (search_form): search_form works with relative positions now,
but match_line returns absolute, and so needs to be offset by -c->base.
(h_trailer, h_fun): Bugfix: return the absolute position, rather than
relative c->pos. The return value of these functions becomes the return
value of do_match_line, so the semantics has to agree.
Diffstat (limited to 'match.c')
-rw-r--r-- | match.c | 5 |
1 files changed, 3 insertions, 2 deletions
@@ -442,6 +442,7 @@ static val search_form(match_line_ctx *c, val needle_form, val from_end) cons_bind (new_bindings, new_pos, match_line(ml_specline_pos(*c, spec, pos))); if (new_pos) { + new_pos = minus(new_pos, c->base); c->bindings = new_bindings; return cons(pos, minus(new_pos, pos)); } @@ -979,7 +980,7 @@ static val h_trailer(match_line_ctx *c) } LOG_MATCH("trailer", new_pos); - return cons(c->bindings, c->pos); + return cons(c->bindings, plus(c->pos, c->base)); } static val h_fun(match_line_ctx *c) @@ -1075,7 +1076,7 @@ static val h_eol(match_line_ctx *c) if (length_str_le(c->dataline, c->pos)) { LOG_MATCH("eol", c->pos); - return cons(c->bindings, c->pos); + return cons(c->bindings, plus(c->pos, c->base)); } LOG_MISMATCH("eol"); return nil; |