summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/runtime/c/pgf/data.h4
-rw-r--r--src/runtime/c/pgf/reader.c13
2 files changed, 11 insertions, 6 deletions
diff --git a/src/runtime/c/pgf/data.h b/src/runtime/c/pgf/data.h
index 45689dd11..45685c82d 100644
--- a/src/runtime/c/pgf/data.h
+++ b/src/runtime/c/pgf/data.h
@@ -351,6 +351,10 @@ struct PgfCCat {
GuFinalizer fin[0];
};
+PGF_API_DECL bool
+pgf_production_is_lexical(PgfProductionApply *papp,
+ GuBuf* non_lexical_buf, GuPool* pool);
+
PGF_API_DECL void
pgf_parser_index(PgfConcr* concr,
PgfCCat* ccat, PgfProduction prod,
diff --git a/src/runtime/c/pgf/reader.c b/src/runtime/c/pgf/reader.c
index 2821857d6..d7094c9d5 100644
--- a/src/runtime/c/pgf/reader.c
+++ b/src/runtime/c/pgf/reader.c
@@ -936,8 +936,9 @@ pgf_read_pargs(PgfReader* rdr, PgfConcr* concr)
return pargs;
}
-static bool
-pgf_production_is_lexical(PgfReader* rdr, PgfProductionApply *papp)
+PGF_API bool
+pgf_production_is_lexical(PgfProductionApply *papp,
+ GuBuf* non_lexical_buf, GuPool* pool)
{
if (gu_seq_length(papp->args) > 0)
return false;
@@ -957,13 +958,13 @@ pgf_production_is_lexical(PgfReader* rdr, PgfProductionApply *papp)
inf.tag == PGF_SYMBOL_SOFT_SPACE ||
inf.tag == PGF_SYMBOL_CAPIT ||
inf.tag == PGF_SYMBOL_ALL_CAPIT) {
- seq->idx = rdr->non_lexical_buf;
+ seq->idx = non_lexical_buf;
return false;
}
}
- seq->idx = gu_new_buf(PgfProductionIdxEntry, rdr->opool);
- } if (seq->idx == rdr->non_lexical_buf) {
+ seq->idx = gu_new_buf(PgfProductionIdxEntry, pool);
+ } if (seq->idx == non_lexical_buf) {
return false;
}
}
@@ -992,7 +993,7 @@ pgf_read_production(PgfReader* rdr, PgfConcr* concr,
papp->args = pgf_read_pargs(rdr, concr);
gu_return_on_exn(rdr->err, );
- is_lexical = pgf_production_is_lexical(rdr, papp);
+ is_lexical = pgf_production_is_lexical(papp, rdr->non_lexical_buf, rdr->opool);
if (!is_lexical)
gu_seq_set(ccat->prods, PgfProduction, (*top)++, prod);
else