PGFs merging should update the probspace only once

This commit is contained in:
Krasimir Angelov
2023-03-09 12:59:18 +01:00
parent dfa2c7873b
commit 4863ab0ec9
2 changed files with 22 additions and 2 deletions

View File

@@ -306,7 +306,7 @@ ref<PgfDTyp> PgfReader::read_type()
return tp;
}
ref<PgfAbsFun> PgfReader::read_absfun()
ref<PgfAbsFun> PgfReader::read_absfun_only()
{
ref<PgfAbsFun> absfun =
read_name<PgfAbsFun>(&PgfAbsFun::name);
@@ -330,6 +330,13 @@ ref<PgfAbsFun> PgfReader::read_absfun()
}
absfun->prob = read_prob(&absfun->name);
return absfun;
}
ref<PgfAbsFun> PgfReader::read_absfun()
{
ref<PgfAbsFun> absfun = read_absfun_only();
PgfProbspace funs_by_cat =
probspace_insert(abstract->funs_by_cat, absfun);
abstract->funs_by_cat = funs_by_cat;
@@ -337,6 +344,17 @@ ref<PgfAbsFun> PgfReader::read_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> 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");
merge_namespace<PgfFlag>(&PgfReader::read_flag);
merge_namespace<PgfAbsFun>(&PgfReader::read_absfun);
merge_namespace<PgfAbsFun>(&PgfReader::merge_absfun);
merge_namespace<PgfAbsCat>(&PgfReader::read_abscat);
}

View File

@@ -64,6 +64,8 @@ public:
ref<PgfFlag> read_flag();
ref<PgfAbsFun> read_absfun();
ref<PgfAbsFun> merge_absfun();
ref<PgfAbsFun> read_absfun_only();
ref<PgfAbsCat> read_abscat();
void read_abstract(ref<PgfAbstr> abstract);
void merge_abstract(ref<PgfAbstr> abstract);