diff options
| author | kr.angelov <kr.angelov@gmail.com> | 2013-04-05 09:11:24 +0000 |
|---|---|---|
| committer | kr.angelov <kr.angelov@gmail.com> | 2013-04-05 09:11:24 +0000 |
| commit | 9e741cfe30d80cb6ff60843a0335eac8e9616844 (patch) | |
| tree | 8f760dd7d0c4c5e16a25c3da8dc6164f6c6cff5b /src/runtime/c/pgf | |
| parent | a449a240de28948ea045021e923dea0594170782 (diff) | |
a bugfix which was causing an infinite loop in the C linearizer for some sentences
Diffstat (limited to 'src/runtime/c/pgf')
| -rw-r--r-- | src/runtime/c/pgf/linearizer.c | 9 |
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* |
