summaryrefslogtreecommitdiff
path: root/src/runtime/c
diff options
context:
space:
mode:
authorJohn J. Camilleri <john@digitalgrammars.com>2020-07-28 22:19:15 +0200
committerJohn J. Camilleri <john@digitalgrammars.com>2020-07-28 22:19:15 +0200
commit22d5f31d7450722e45abe07474469c1e3838fce2 (patch)
tree3df5efb31edf6cc854c68142dcbab88afeba085a /src/runtime/c
parent38f468eed3325d5e435021b8b137f80545f22a95 (diff)
parent830dbe760db2df0c573c06cb481d0611bf55908b (diff)
Merge remote-tracking branch 'origin/master' into pgf2-hackage
Diffstat (limited to 'src/runtime/c')
-rw-r--r--src/runtime/c/pgf/parser.c25
-rw-r--r--src/runtime/c/pgf/scanner.c3
2 files changed, 16 insertions, 12 deletions
diff --git a/src/runtime/c/pgf/parser.c b/src/runtime/c/pgf/parser.c
index c3255154d..1ee24ac59 100644
--- a/src/runtime/c/pgf/parser.c
+++ b/src/runtime/c/pgf/parser.c
@@ -2301,26 +2301,29 @@ pgf_get_parse_roots(PgfParsing* ps, GuPool* pool)
PGF_API GuSeq*
pgf_ccat_to_range(PgfParsing* ps, PgfCCat* ccat, GuPool* pool)
{
- PgfItemConts* conts = ccat->conts;
PgfParseState* state = ps->before;
GuBuf* buf = gu_new_buf(PgfParseRange, pool);
- while (conts != NULL) {
- PgfParseRange* range = gu_buf_extend(buf);
- range->start = conts->state->end_offset;
- range->end = conts->state->end_offset;
- range->field = conts->ccat->cnccat->labels[conts->lin_idx];
-
+ while (ccat->conts != NULL) {
+ size_t start = ccat->conts->state->end_offset;
+ size_t end = start;
while (state != NULL) {
- if (pgf_parsing_get_completed(state, conts) == ccat) {
- if (state->start_offset >= range->start)
- range->end = state->start_offset;
+ if (pgf_parsing_get_completed(state, ccat->conts) == ccat) {
+ if (state->start_offset >= start)
+ end = state->start_offset;
break;
}
state = state->next;
}
- conts = conts->ccat->conts;
+ if (start != end) {
+ PgfParseRange* range = gu_buf_extend(buf);
+ range->start = start;
+ range->end = end;
+ range->field = ccat->cnccat->labels[ccat->conts->lin_idx];
+ }
+
+ ccat = ccat->conts->ccat;
}
return gu_buf_data_seq(buf);
diff --git a/src/runtime/c/pgf/scanner.c b/src/runtime/c/pgf/scanner.c
index ad78233ea..7a91b5c7c 100644
--- a/src/runtime/c/pgf/scanner.c
+++ b/src/runtime/c/pgf/scanner.c
@@ -115,7 +115,8 @@ pgf_morpho_iter(PgfProductionIdx* idx,
PgfCId lemma = entry->papp->fun->absfun->name;
GuString analysis = entry->ccat->cnccat->labels[entry->lin_idx];
- prob_t prob = entry->papp->fun->absfun->ep.prob;
+ prob_t prob = entry->ccat->cnccat->abscat->prob +
+ entry->papp->fun->absfun->ep.prob;
callback->callback(callback,
lemma, analysis, prob, err);
if (!gu_ok(err))