forked from GitHub/gf-core
PGFs merging should update the probspace only once
This commit is contained in:
@@ -306,7 +306,7 @@ ref<PgfDTyp> PgfReader::read_type()
|
|||||||
return tp;
|
return tp;
|
||||||
}
|
}
|
||||||
|
|
||||||
ref<PgfAbsFun> PgfReader::read_absfun()
|
ref<PgfAbsFun> PgfReader::read_absfun_only()
|
||||||
{
|
{
|
||||||
ref<PgfAbsFun> absfun =
|
ref<PgfAbsFun> absfun =
|
||||||
read_name<PgfAbsFun>(&PgfAbsFun::name);
|
read_name<PgfAbsFun>(&PgfAbsFun::name);
|
||||||
@@ -330,6 +330,13 @@ ref<PgfAbsFun> PgfReader::read_absfun()
|
|||||||
}
|
}
|
||||||
absfun->prob = read_prob(&absfun->name);
|
absfun->prob = read_prob(&absfun->name);
|
||||||
|
|
||||||
|
return absfun;
|
||||||
|
}
|
||||||
|
|
||||||
|
ref<PgfAbsFun> PgfReader::read_absfun()
|
||||||
|
{
|
||||||
|
ref<PgfAbsFun> absfun = read_absfun_only();
|
||||||
|
|
||||||
PgfProbspace funs_by_cat =
|
PgfProbspace funs_by_cat =
|
||||||
probspace_insert(abstract->funs_by_cat, absfun);
|
probspace_insert(abstract->funs_by_cat, absfun);
|
||||||
abstract->funs_by_cat = funs_by_cat;
|
abstract->funs_by_cat = funs_by_cat;
|
||||||
@@ -337,6 +344,17 @@ ref<PgfAbsFun> PgfReader::read_absfun()
|
|||||||
return absfun;
|
return absfun;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ref<PgfAbsFun> PgfReader::merge_absfun()
|
||||||
|
{
|
||||||
|
ref<PgfAbsFun> absfun = read_absfun_only();
|
||||||
|
|
||||||
|
if (namespace_lookup(abstract->funs, &absfun->name) == 0) {
|
||||||
|
throw pgf_error("The set of abstract functions is merged PGFs must be the same");
|
||||||
|
}
|
||||||
|
|
||||||
|
return absfun;
|
||||||
|
}
|
||||||
|
|
||||||
ref<PgfAbsCat> PgfReader::read_abscat()
|
ref<PgfAbsCat> PgfReader::read_abscat()
|
||||||
{
|
{
|
||||||
ref<PgfAbsCat> abscat = read_name<PgfAbsCat>(&PgfAbsCat::name);
|
ref<PgfAbsCat> abscat = read_name<PgfAbsCat>(&PgfAbsCat::name);
|
||||||
@@ -460,7 +478,7 @@ void PgfReader::merge_abstract(ref<PgfAbstr> abstract)
|
|||||||
throw pgf_error("The abstract syntax names doesn't match");
|
throw pgf_error("The abstract syntax names doesn't match");
|
||||||
|
|
||||||
merge_namespace<PgfFlag>(&PgfReader::read_flag);
|
merge_namespace<PgfFlag>(&PgfReader::read_flag);
|
||||||
merge_namespace<PgfAbsFun>(&PgfReader::read_absfun);
|
merge_namespace<PgfAbsFun>(&PgfReader::merge_absfun);
|
||||||
merge_namespace<PgfAbsCat>(&PgfReader::read_abscat);
|
merge_namespace<PgfAbsCat>(&PgfReader::read_abscat);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -64,6 +64,8 @@ public:
|
|||||||
ref<PgfFlag> read_flag();
|
ref<PgfFlag> read_flag();
|
||||||
|
|
||||||
ref<PgfAbsFun> read_absfun();
|
ref<PgfAbsFun> read_absfun();
|
||||||
|
ref<PgfAbsFun> merge_absfun();
|
||||||
|
ref<PgfAbsFun> read_absfun_only();
|
||||||
ref<PgfAbsCat> read_abscat();
|
ref<PgfAbsCat> read_abscat();
|
||||||
void read_abstract(ref<PgfAbstr> abstract);
|
void read_abstract(ref<PgfAbstr> abstract);
|
||||||
void merge_abstract(ref<PgfAbstr> abstract);
|
void merge_abstract(ref<PgfAbstr> abstract);
|
||||||
|
|||||||
Reference in New Issue
Block a user