From 0b7b939aca84526cd58587d80d5552c76c58ed9c Mon Sep 17 00:00:00 2001 From: "kr.angelov" Date: Mon, 11 Feb 2013 14:10:54 +0000 Subject: [PATCH] refactoring: now all named objects in the C runtime have an explicit name field --- src/runtime/c/pgf/data.h | 4 ++- src/runtime/c/pgf/pgf.c | 2 +- src/runtime/c/pgf/printer.c | 7 ++--- src/runtime/c/pgf/reader.c | 56 +++++++++++++++++++++---------------- 4 files changed, 39 insertions(+), 30 deletions(-) diff --git a/src/runtime/c/pgf/data.h b/src/runtime/c/pgf/data.h index a726519a1..fe339a50b 100644 --- a/src/runtime/c/pgf/data.h +++ b/src/runtime/c/pgf/data.h @@ -71,6 +71,7 @@ typedef struct { typedef GuSeq PgfEquations; typedef struct { + PgfCId name; PgfType* type; int arity; PgfEquations defns; // maybe null @@ -96,6 +97,7 @@ typedef struct { extern GU_DECLARE_TYPE(PgfAbsCat, abstract); typedef struct { + PgfCId name; PgfFlags* aflags; PgfCIdMap* funs; // |-> PgfAbsFun* PgfCIdMap* cats; // |-> PgfAbsCat* @@ -105,7 +107,6 @@ struct PgfPGF { uint16_t major_version; uint16_t minor_version; PgfFlags* gflags; - PgfCId absname; PgfAbstr abstract; PgfCIdMap* concretes; // |-> PgfConcr* GuPool* pool; @@ -223,6 +224,7 @@ typedef struct { typedef GuList(PgfCncFun*) PgfCncFuns; struct PgfConcr { + PgfCId name; PgfFlags* cflags; PgfPrintNames* printnames; GuMap* ccats; diff --git a/src/runtime/c/pgf/pgf.c b/src/runtime/c/pgf/pgf.c index 9f836150a..898d3be05 100644 --- a/src/runtime/c/pgf/pgf.c +++ b/src/runtime/c/pgf/pgf.c @@ -94,7 +94,7 @@ close: GuString pgf_abstract_name(PgfPGF* pgf) { - return pgf->absname; + return pgf->abstract.name; } void diff --git a/src/runtime/c/pgf/printer.c b/src/runtime/c/pgf/printer.c index cf851d386..c94202ba9 100644 --- a/src/runtime/c/pgf/printer.c +++ b/src/runtime/c/pgf/printer.c @@ -59,11 +59,10 @@ pgf_print_absfun(GuMapItor* fn, const void* key, void* value, gu_printf(wtr, err, " ; -- %f\n", fun->ep.prob); } static void -pgf_print_abstract(PgfCId absname, PgfAbstr* abstr, - GuWriter* wtr, GuExn* err) +pgf_print_abstract(PgfAbstr* abstr, GuWriter* wtr, GuExn* err) { gu_puts("abstract ", wtr, err); - gu_string_write(absname, wtr, err); + gu_string_write(abstr->name, wtr, err); gu_puts(" {\n", wtr, err); PgfPrintFn clo1 = { { pgf_print_flag }, wtr }; @@ -349,7 +348,7 @@ pgf_print_concr_cb(GuMapItor* fn, const void* key, void* value, void pgf_print(PgfPGF* pgf, GuWriter* wtr, GuExn* err) { - pgf_print_abstract(pgf->absname, &pgf->abstract, wtr, err); + pgf_print_abstract(&pgf->abstract, wtr, err); PgfPrintFn clo = { { pgf_print_concr_cb }, wtr }; gu_map_iter(pgf->concretes, &clo.fn, err); diff --git a/src/runtime/c/pgf/reader.c b/src/runtime/c/pgf/reader.c index 874f90fb3..840c6e0d4 100644 --- a/src/runtime/c/pgf/reader.c +++ b/src/runtime/c/pgf/reader.c @@ -413,10 +413,13 @@ pgf_read_patt(PgfReader* rdr) } static PgfAbsFun* -pgf_read_absfun(PgfReader* rdr, PgfCId name) +pgf_read_absfun(PgfReader* rdr) { PgfAbsFun* absfun = gu_new(PgfAbsFun, rdr->opool); + absfun->name = pgf_read_cid(rdr); + gu_return_on_exn(rdr->err, NULL); + absfun->type = pgf_read_type(rdr); gu_return_on_exn(rdr->err, NULL); @@ -464,7 +467,7 @@ pgf_read_absfun(PgfReader* rdr, PgfCId name) gu_new_variant(PGF_EXPR_FUN, PgfExprFun, &absfun->ep.expr, rdr->opool); - expr_fun->fun = name; + expr_fun->fun = absfun->name; return absfun; } @@ -482,24 +485,22 @@ pgf_read_absfuns(PgfReader* rdr) gu_return_on_exn(rdr->err, NULL); for (size_t i = 0; i < len; i++) { - PgfCId name = pgf_read_cid(rdr); - gu_return_on_exn(rdr->err, NULL); - - PgfAbsFun* decl = pgf_read_absfun(rdr, name); + PgfAbsFun* absfun = pgf_read_absfun(rdr); gu_return_on_exn(rdr->err, NULL); - gu_map_put(absfuns, &name, PgfAbsFun*, decl); + gu_map_put(absfuns, &absfun->name, PgfAbsFun*, absfun); } return absfuns; } static PgfAbsCat* -pgf_read_abscat(PgfReader* rdr, PgfAbstr* abstr, PgfCId name) +pgf_read_abscat(PgfReader* rdr, PgfAbstr* abstr) { PgfAbsCat* abscat = gu_new(PgfAbsCat, rdr->opool); - - abscat->name = name; + + abscat->name = pgf_read_cid(rdr); + gu_return_on_exn(rdr->err, NULL); size_t n_hypos = pgf_read_len(rdr); gu_return_on_exn(rdr->err, NULL); @@ -547,13 +548,10 @@ pgf_read_abscats(PgfReader* rdr, PgfAbstr* abstr) gu_return_on_exn(rdr->err, NULL); for (size_t i = 0; i < len; i++) { - PgfCId name = pgf_read_cid(rdr); + PgfAbsCat* abscat = pgf_read_abscat(rdr, abstr); gu_return_on_exn(rdr->err, NULL); - PgfAbsCat* abscat = pgf_read_abscat(rdr, abstr, name); - gu_return_on_exn(rdr->err, NULL); - - gu_map_put(abscats, &name, PgfAbsCat*, abscat); + gu_map_put(abscats, &abscat->name, PgfAbsCat*, abscat); } return abscats; @@ -562,6 +560,9 @@ pgf_read_abscats(PgfReader* rdr, PgfAbstr* abstr) static void pgf_read_abstract(PgfReader* rdr, PgfAbstr* abstract) { + abstract->name = pgf_read_cid(rdr); + gu_return_on_exn(rdr->err, ); + abstract->aflags = pgf_read_flags(rdr); gu_return_on_exn(rdr->err, ); @@ -1090,14 +1091,27 @@ static PgfConcr* pgf_read_concrete(PgfReader* rdr, PgfAbstr* abstr) { PgfConcr* concr = gu_new(PgfConcr, rdr->opool); + + concr->name = + pgf_read_cid(rdr); + gu_return_on_exn(rdr->err, NULL); + concr->cflags = pgf_read_flags(rdr); + gu_return_on_exn(rdr->err, NULL); + concr->printnames = pgf_read_printnames(rdr); + gu_return_on_exn(rdr->err, NULL); + concr->sequences = pgf_read_sequences(rdr); + gu_return_on_exn(rdr->err, NULL); + concr->cncfuns = - pgf_read_cncfuns(rdr, abstr, concr); + pgf_read_cncfuns(rdr, abstr, concr); + gu_return_on_exn(rdr->err, NULL); + concr->ccats = gu_new_int_map(PgfCCat*, &gu_null_struct, rdr->opool); concr->fun_indices = gu_map_type_new(PgfCncFunOverloadMap, rdr->opool); @@ -1133,13 +1147,10 @@ pgf_read_concretes(PgfReader* rdr, PgfAbstr* abstr) gu_return_on_exn(rdr->err, NULL); for (size_t i = 0; i < len; i++) { - PgfCId name = pgf_read_cid(rdr); - gu_return_on_exn(rdr->err, NULL); - PgfConcr* concr = pgf_read_concrete(rdr, abstr); gu_return_on_exn(rdr->err, NULL); - gu_map_put(concretes, &name, PgfConcr*, concr); + gu_map_put(concretes, &concr->name, PgfConcr*, concr); } return concretes; @@ -1157,10 +1168,7 @@ pgf_read_pgf(PgfReader* rdr) { pgf->gflags = pgf_read_flags(rdr); gu_return_on_exn(rdr->err, NULL); - - pgf->absname = pgf_read_cid(rdr); - gu_return_on_exn(rdr->err, NULL); - + pgf_read_abstract(rdr, &pgf->abstract); gu_return_on_exn(rdr->err, NULL);