diff options
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | match.c | 5 |
2 files changed, 11 insertions, 2 deletions
@@ -1,5 +1,13 @@ 2012-03-01 Kaz Kylheku <kaz@kylheku.com> + * 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. + +2012-03-01 Kaz Kylheku <kaz@kylheku.com> + * match.c (sem_error, file_err): Bugfix: pull text formatted source location using source_loc_str rather than raw object using source_loc. @@ -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; |