diff --git a/src/runtime/c/pgf/reader.cxx b/src/runtime/c/pgf/reader.cxx index 44196bda6..525cb8a54 100644 --- a/src/runtime/c/pgf/reader.cxx +++ b/src/runtime/c/pgf/reader.cxx @@ -666,12 +666,19 @@ PgfPhrasetable PgfReader::read_phrasetable() ref PgfReader::read_lincat() { ref lincat = read_name(&PgfConcrLincat::name); + + auto fields = read_lincat_fields(lincat); + auto n_lindefs = read_len(); + auto args = read_vector(&PgfReader::read_parg); + auto res = read_vector(&PgfReader::read_presult2); + auto seqs = read_seq_ids(lincat.tagged()); + lincat->abscat = namespace_lookup(abstract->cats, &lincat->name); - lincat->fields = read_lincat_fields(lincat); - lincat->n_lindefs = read_len(); - lincat->args = read_vector(&PgfReader::read_parg); - lincat->res = read_vector(&PgfReader::read_presult2); - lincat->seqs = read_seq_ids(lincat.tagged()); + lincat->fields = fields; + lincat->n_lindefs = n_lindefs; + lincat->args = args; + lincat->res = res; + lincat->seqs = seqs; return lincat; } @@ -680,9 +687,11 @@ ref> PgfReader::read_lincat_fields(ref li size_t len = read_len(); ref> fields = vector_new(len); for (size_t i = 0; i < len; i++) { + auto name = read_text(); + ref field = vector_elem(fields,i); field->lincat = lincat; - field->name = read_text(); + field->name = name; field->backrefs = 0; field->epsilons = 0; } @@ -782,10 +791,13 @@ ref PgfReader::read_lin() if (lin->absfun == 0) throw pgf_error("Found a lin without a fun"); - lin->args = read_vector(&PgfReader::read_parg); - lin->res = read_vector(&PgfReader::read_presult2); - lin->seqs = read_seq_ids(lin.tagged()); + auto args = read_vector(&PgfReader::read_parg); + auto res = read_vector(&PgfReader::read_presult2); + auto seqs = read_seq_ids(lin.tagged()); + lin->args = args; + lin->res = res; + lin->seqs = seqs; lin->lincat = namespace_lookup(concrete->lincats, &lin->absfun->type->name); if (lin->lincat == 0)