Unify the data model between the C runtime and the Haskell binding

This commit is contained in:
krangelov
2021-11-09 02:04:36 +01:00
parent b3ef14c39b
commit 6552bcf909
13 changed files with 118 additions and 140 deletions

View File

@@ -391,26 +391,19 @@ void PgfWriter::write_lincat(ref<PgfConcrLincat> lincat)
write_vector(lincat->fields, &PgfWriter::write_text);
}
void PgfWriter::write_lindex(ref<PgfConcrLIndex> lindex)
void PgfWriter::write_lparam(ref<PgfLParam> lparam)
{
write_int(lindex->i0);
write_len(lindex->n_terms);
for (size_t i = 0; i < lindex->n_terms; i++) {
write_int(lindex->terms[i].factor);
write_int(lindex->terms[i].var);
write_int(lparam->i0);
write_len(lparam->n_terms);
for (size_t i = 0; i < lparam->n_terms; i++) {
write_int(lparam->terms[i].factor);
write_int(lparam->terms[i].var);
}
}
void PgfWriter::write_linarg(ref<PgfConcrLinArg> linarg)
void PgfWriter::write_parg(ref<PgfPArg> parg)
{
write_name(&linarg->lincat->name);
write_lindex(linarg->param);
}
void PgfWriter::write_linres(ref<PgfConcrLinRes> linres)
{
write_name(&linres->lincat->name);
write_lindex(linres->param);
write_lparam(parg->param);
}
void PgfWriter::write_symbol(PgfSymbol sym)
@@ -422,13 +415,13 @@ void PgfWriter::write_symbol(PgfSymbol sym)
case PgfSymbolCat::tag: {
auto sym_cat = ref<PgfSymbolCat>::untagged(sym);
write_int(sym_cat->d);
write_lindex(ref<PgfConcrLIndex>::from_ptr(&sym_cat->r));
write_lparam(ref<PgfLParam>::from_ptr(&sym_cat->r));
break;
}
case PgfSymbolLit::tag: {
auto sym_lit = ref<PgfSymbolLit>::untagged(sym);
write_int(sym_lit->d);
write_lindex(ref<PgfConcrLIndex>::from_ptr(&sym_lit->r));
write_lparam(ref<PgfLParam>::from_ptr(&sym_lit->r));
break;
}
case PgfSymbolVar::tag: {
@@ -458,7 +451,7 @@ void PgfWriter::write_symbol(PgfSymbol sym)
}
}
void PgfWriter::write_seq(ref<PgfSequence> seq)
void PgfWriter::write_seq(ref<PgfVector<PgfSymbol>> seq)
{
write_vector(seq, &PgfWriter::write_symbol);
}
@@ -466,8 +459,8 @@ void PgfWriter::write_seq(ref<PgfSequence> seq)
void PgfWriter::write_lin(ref<PgfConcrLin> lin)
{
write_name(&lin->name);
write_vector(lin->args, &PgfWriter::write_linarg);
write_vector(lin->res, &PgfWriter::write_linres);
write_vector(lin->args, &PgfWriter::write_parg);
write_vector(lin->res, &PgfWriter::write_lparam);
write_vector(lin->seqs, &PgfWriter::write_seq);
}