summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2010-02-27 15:21:29 +0900
committerKaz Kylheku <kaz@kylheku.com>2010-02-27 15:21:29 +0900
commitf2b8e780f0e3c0634644887639f97adbf7c1c9dc (patch)
tree75b480ed38d9e031b028e4c112963b6ac9be386e
parent501b00b590d74253346e4c3b17331dcc07a42145 (diff)
downloadtxr-f2b8e780f0e3c0634644887639f97adbf7c1c9dc.tar.gz
txr-f2b8e780f0e3c0634644887639f97adbf7c1c9dc.tar.bz2
txr-f2b8e780f0e3c0634644887639f97adbf7c1c9dc.zip
* match.c (match_lines): Bugfix in freeform directive.
If the virtual line is partially matched, the remainder of the line is folded back into list form. In this case, the data line number must be incremented. Otherwise the calling context may conclude that no progress was made, and skip a line of input. I.e. the unmatched part of the input is a new line, even if there had originally been no line break at that point.
-rw-r--r--ChangeLog11
-rw-r--r--match.c4
2 files changed, 14 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 654122fb..a1825d53 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,16 @@
2010-02-27 Kaz Kylheku <kkylheku@gmail.com>
+ * match.c (match_lines): Bugfix in freeform directive.
+ If the virtual line is partially matched, the remainder of
+ the line is folded back into list form. In this case, the
+ data line number must be incremented. Otherwise the calling
+ context may conclude that no progress was made, and
+ skip a line of input. I.e. the unmatched part of the input
+ is a new line, even if there had originally
+ been no line break at that point.
+
+2010-02-27 Kaz Kylheku <kkylheku@gmail.com>
+
* lib.h (split_str_sep): Declared.
* lib.c (split_str_sep): New function.
diff --git a/match.c b/match.c
index 5c083a6d..32418442 100644
--- a/match.c
+++ b/match.c
@@ -1004,8 +1004,10 @@ repeat_spec_same_data:
return nil;
}
- if (nump(success))
+ if (nump(success)) {
data = lazy_str_get_trailing_list(ff_dataline, success);
+ data_lineno++;
+ }
bindings = new_bindings;
}