summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorkr.angelov <kr.angelov@gmail.com>2012-01-23 09:46:45 +0000
committerkr.angelov <kr.angelov@gmail.com>2012-01-23 09:46:45 +0000
commit7fcaa81858959699938ae0f032583a498c63019a (patch)
tree0bba5eae8acd2b9707b4148c4c83d159666cd0f0 /src
parent28bce1cdc01bff7a2caf1f30152b99827b907576 (diff)
libpgf: move the lindefs field from PgfCncCat to PgfCCat. display the list in the grammar printout
Diffstat (limited to 'src')
-rw-r--r--src/runtime/c/pgf/data.c11
-rw-r--r--src/runtime/c/pgf/data.h2
-rw-r--r--src/runtime/c/pgf/reader.c21
3 files changed, 18 insertions, 16 deletions
diff --git a/src/runtime/c/pgf/data.c b/src/runtime/c/pgf/data.c
index 19aa51f23..6356da8b1 100644
--- a/src/runtime/c/pgf/data.c
+++ b/src/runtime/c/pgf/data.c
@@ -4,11 +4,10 @@
#include <gu/variant.h>
#include <gu/assert.h>
-
-PgfCCat pgf_ccat_string = { NULL, GU_NULL_SEQ, -1 };
-PgfCCat pgf_ccat_int = { NULL, GU_NULL_SEQ, -2 };
-PgfCCat pgf_ccat_float = { NULL, GU_NULL_SEQ, -3 };
-PgfCCat pgf_ccat_var = { NULL, GU_NULL_SEQ, -4 };
+PgfCCat pgf_ccat_string = { NULL, NULL, GU_NULL_SEQ, -1 };
+PgfCCat pgf_ccat_int = { NULL, NULL, GU_NULL_SEQ, -2 };
+PgfCCat pgf_ccat_float = { NULL, NULL, GU_NULL_SEQ, -3 };
+PgfCCat pgf_ccat_var = { NULL, NULL, GU_NULL_SEQ, -4 };
PgfCCatId
pgf_literal_cat(PgfLiteral lit)
@@ -59,6 +58,7 @@ typedef GuType_GuStringMap GuType_PgfCIdMap;
GU_DEFINE_TYPE(PgfCCat, struct,
GU_MEMBER_S(PgfCCat, cnccat, PgfCncCat),
+ GU_MEMBER_P(PgfCCat, lindefs, PgfFunIds),
GU_MEMBER(PgfCCat, prods, PgfProductionSeq));
GU_DEFINE_TYPE(PgfCCatId, shared, gu_type(PgfCCat));
@@ -100,7 +100,6 @@ GU_DEFINE_TYPE(
GU_MEMBER(PgfCncCat, cid, PgfCId),
GU_MEMBER_P(PgfCncCat, cats, PgfCCatIds),
GU_MEMBER(PgfCncCat, n_lins, size_t),
- GU_MEMBER_P(PgfCncCat, lindefs, PgfFunIds),
GU_MEMBER_P(PgfCncCat, labels, GuStringL));
// GU_DEFINE_TYPE(PgfSequence, GuList, gu_ptr_type(PgfSymbol));
diff --git a/src/runtime/c/pgf/data.h b/src/runtime/c/pgf/data.h
index 1cc053e37..8d23af4b8 100644
--- a/src/runtime/c/pgf/data.h
+++ b/src/runtime/c/pgf/data.h
@@ -143,7 +143,6 @@ struct PgfCat {
struct PgfCncCat {
PgfCId cid;
PgfCCatIds* cats;
- PgfFunIds* lindefs;
size_t n_lins;
GuStringL* labels;
@@ -173,6 +172,7 @@ struct PgfAlternative {
struct PgfCCat {
PgfCncCat* cnccat;
+ PgfFunIds* lindefs;
PgfProductionSeq prods;
int fid;
};
diff --git a/src/runtime/c/pgf/reader.c b/src/runtime/c/pgf/reader.c
index d902b698a..391a0e719 100644
--- a/src/runtime/c/pgf/reader.c
+++ b/src/runtime/c/pgf/reader.c
@@ -437,6 +437,7 @@ pgf_read_to_PgfCCatId(GuType* type, PgfReader* rdr, void* to)
if (!ccat) {
ccat = gu_new(PgfCCat, rdr->pool);
ccat->cnccat = NULL;
+ ccat->lindefs = gu_map_get(rdr->curr_lindefs, &fid, PgfFunIds*);
ccat->prods = gu_null_seq;
ccat->fid = fid;
@@ -449,14 +450,16 @@ pgf_read_to_PgfCCatId(GuType* type, PgfReader* rdr, void* to)
static void
pgf_read_to_PgfCCat(GuType* type, PgfReader* rdr, void* to)
{
- (void) type;
- gu_enter("->");
- PgfCCat* cat = to;
- cat->cnccat = NULL;
- pgf_read_to(rdr, gu_type(PgfProductionSeq), &cat->prods);
- int* fidp = rdr->curr_key;
- cat->fid = *fidp;
- gu_exit("<-");
+ (void) type;
+ gu_enter("->");
+ int* fidp = rdr->curr_key;
+
+ PgfCCat* ccat = to;
+ ccat->cnccat = NULL;
+ ccat->lindefs = gu_map_get(rdr->curr_lindefs, fidp, PgfFunIds*);
+ pgf_read_to(rdr, gu_type(PgfProductionSeq), &ccat->prods);
+ ccat->fid = *fidp;
+ gu_exit("<-");
}
// This is only needed because new_struct would otherwise override.
@@ -736,6 +739,7 @@ pgf_read_new_PgfCncCat(GuType* type, PgfReader* rdr, GuPool* pool,
if (!ccat) {
ccat = gu_new(PgfCCat, rdr->pool);
ccat->cnccat = NULL;
+ ccat->lindefs = gu_map_get(rdr->curr_lindefs, &fid, PgfFunIds*);
ccat->prods = gu_null_seq;
ccat->fid = fid;
@@ -752,7 +756,6 @@ pgf_read_new_PgfCncCat(GuType* type, PgfReader* rdr, GuPool* pool,
}
cnccat->n_lins = n_lins == -1 ? 0 : (size_t) n_lins;
cnccat->cats = cats;
- cnccat->lindefs = gu_map_get(rdr->curr_lindefs, &first, PgfFunIds*);
cnccat->labels = pgf_read_new(rdr, gu_type(GuStringL),
pool, NULL);
gu_exit("<-");