summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkr.angelov <kr.angelov@gmail.com>2013-04-05 09:11:24 +0000
committerkr.angelov <kr.angelov@gmail.com>2013-04-05 09:11:24 +0000
commit9e741cfe30d80cb6ff60843a0335eac8e9616844 (patch)
tree8f760dd7d0c4c5e16a25c3da8dc6164f6c6cff5b
parenta449a240de28948ea045021e923dea0594170782 (diff)
a bugfix which was causing an infinite loop in the C linearizer for some sentences
-rw-r--r--src/runtime/c/pgf/linearizer.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/runtime/c/pgf/linearizer.c b/src/runtime/c/pgf/linearizer.c
index 4f3bee0a0..55249741c 100644
--- a/src/runtime/c/pgf/linearizer.c
+++ b/src/runtime/c/pgf/linearizer.c
@@ -408,6 +408,11 @@ pgf_cnc_tree_enum_next(GuEnum* self, void* to, GuPool* pool)
PgfLzn* lzn = gu_container(self, PgfLzn, en);
PgfCncTree* toc = to;
+ if (lzn->ch == NULL) {
+ *toc = gu_null_variant;
+ return;
+ }
+
GuChoiceMark mark = gu_choice_mark(lzn->ch);
*toc = pgf_lzn_resolve(lzn, lzn->expr, NULL, pool);
gu_choice_reset(lzn->ch, mark);
@@ -426,7 +431,9 @@ pgf_cnc_tree_enum_next(GuEnum* self, void* to, GuPool* pool)
gu_pool_free(tmp_pool);
#endif
- gu_choice_advance(lzn->ch);
+ if (!gu_choice_advance(lzn->ch)) {
+ lzn->ch = NULL;
+ }
}
PgfCncTreeEnum*