refactoring: now all named objects in the C runtime have an explicit name field

This commit is contained in:
kr.angelov
2013-02-11 14:10:54 +00:00
parent 56c8f91d19
commit 0b7b939aca
4 changed files with 39 additions and 30 deletions

View File

@@ -71,6 +71,7 @@ typedef struct {
typedef GuSeq PgfEquations; typedef GuSeq PgfEquations;
typedef struct { typedef struct {
PgfCId name;
PgfType* type; PgfType* type;
int arity; int arity;
PgfEquations defns; // maybe null PgfEquations defns; // maybe null
@@ -96,6 +97,7 @@ typedef struct {
extern GU_DECLARE_TYPE(PgfAbsCat, abstract); extern GU_DECLARE_TYPE(PgfAbsCat, abstract);
typedef struct { typedef struct {
PgfCId name;
PgfFlags* aflags; PgfFlags* aflags;
PgfCIdMap* funs; // |-> PgfAbsFun* PgfCIdMap* funs; // |-> PgfAbsFun*
PgfCIdMap* cats; // |-> PgfAbsCat* PgfCIdMap* cats; // |-> PgfAbsCat*
@@ -105,7 +107,6 @@ struct PgfPGF {
uint16_t major_version; uint16_t major_version;
uint16_t minor_version; uint16_t minor_version;
PgfFlags* gflags; PgfFlags* gflags;
PgfCId absname;
PgfAbstr abstract; PgfAbstr abstract;
PgfCIdMap* concretes; // |-> PgfConcr* PgfCIdMap* concretes; // |-> PgfConcr*
GuPool* pool; GuPool* pool;
@@ -223,6 +224,7 @@ typedef struct {
typedef GuList(PgfCncFun*) PgfCncFuns; typedef GuList(PgfCncFun*) PgfCncFuns;
struct PgfConcr { struct PgfConcr {
PgfCId name;
PgfFlags* cflags; PgfFlags* cflags;
PgfPrintNames* printnames; PgfPrintNames* printnames;
GuMap* ccats; GuMap* ccats;

View File

@@ -94,7 +94,7 @@ close:
GuString GuString
pgf_abstract_name(PgfPGF* pgf) pgf_abstract_name(PgfPGF* pgf)
{ {
return pgf->absname; return pgf->abstract.name;
} }
void void

View File

@@ -59,11 +59,10 @@ pgf_print_absfun(GuMapItor* fn, const void* key, void* value,
gu_printf(wtr, err, " ; -- %f\n", fun->ep.prob); gu_printf(wtr, err, " ; -- %f\n", fun->ep.prob);
} }
static void static void
pgf_print_abstract(PgfCId absname, PgfAbstr* abstr, pgf_print_abstract(PgfAbstr* abstr, GuWriter* wtr, GuExn* err)
GuWriter* wtr, GuExn* err)
{ {
gu_puts("abstract ", wtr, err); gu_puts("abstract ", wtr, err);
gu_string_write(absname, wtr, err); gu_string_write(abstr->name, wtr, err);
gu_puts(" {\n", wtr, err); gu_puts(" {\n", wtr, err);
PgfPrintFn clo1 = { { pgf_print_flag }, wtr }; PgfPrintFn clo1 = { { pgf_print_flag }, wtr };
@@ -349,7 +348,7 @@ pgf_print_concr_cb(GuMapItor* fn, const void* key, void* value,
void void
pgf_print(PgfPGF* pgf, GuWriter* wtr, GuExn* err) 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 }; PgfPrintFn clo = { { pgf_print_concr_cb }, wtr };
gu_map_iter(pgf->concretes, &clo.fn, err); gu_map_iter(pgf->concretes, &clo.fn, err);

View File

@@ -413,10 +413,13 @@ pgf_read_patt(PgfReader* rdr)
} }
static PgfAbsFun* static PgfAbsFun*
pgf_read_absfun(PgfReader* rdr, PgfCId name) pgf_read_absfun(PgfReader* rdr)
{ {
PgfAbsFun* absfun = gu_new(PgfAbsFun, rdr->opool); 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); absfun->type = pgf_read_type(rdr);
gu_return_on_exn(rdr->err, NULL); gu_return_on_exn(rdr->err, NULL);
@@ -464,7 +467,7 @@ pgf_read_absfun(PgfReader* rdr, PgfCId name)
gu_new_variant(PGF_EXPR_FUN, gu_new_variant(PGF_EXPR_FUN,
PgfExprFun, PgfExprFun,
&absfun->ep.expr, rdr->opool); &absfun->ep.expr, rdr->opool);
expr_fun->fun = name; expr_fun->fun = absfun->name;
return absfun; return absfun;
} }
@@ -482,24 +485,22 @@ pgf_read_absfuns(PgfReader* rdr)
gu_return_on_exn(rdr->err, NULL); gu_return_on_exn(rdr->err, NULL);
for (size_t i = 0; i < len; i++) { for (size_t i = 0; i < len; i++) {
PgfCId name = pgf_read_cid(rdr); PgfAbsFun* absfun = pgf_read_absfun(rdr);
gu_return_on_exn(rdr->err, NULL);
PgfAbsFun* decl = pgf_read_absfun(rdr, name);
gu_return_on_exn(rdr->err, NULL); gu_return_on_exn(rdr->err, NULL);
gu_map_put(absfuns, &name, PgfAbsFun*, decl); gu_map_put(absfuns, &absfun->name, PgfAbsFun*, absfun);
} }
return absfuns; return absfuns;
} }
static PgfAbsCat* 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); 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); size_t n_hypos = pgf_read_len(rdr);
gu_return_on_exn(rdr->err, NULL); 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); gu_return_on_exn(rdr->err, NULL);
for (size_t i = 0; i < len; i++) { 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); gu_return_on_exn(rdr->err, NULL);
PgfAbsCat* abscat = pgf_read_abscat(rdr, abstr, name); gu_map_put(abscats, &abscat->name, PgfAbsCat*, abscat);
gu_return_on_exn(rdr->err, NULL);
gu_map_put(abscats, &name, PgfAbsCat*, abscat);
} }
return abscats; return abscats;
@@ -562,6 +560,9 @@ pgf_read_abscats(PgfReader* rdr, PgfAbstr* abstr)
static void static void
pgf_read_abstract(PgfReader* rdr, PgfAbstr* abstract) 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); abstract->aflags = pgf_read_flags(rdr);
gu_return_on_exn(rdr->err, ); gu_return_on_exn(rdr->err, );
@@ -1090,14 +1091,27 @@ static PgfConcr*
pgf_read_concrete(PgfReader* rdr, PgfAbstr* abstr) pgf_read_concrete(PgfReader* rdr, PgfAbstr* abstr)
{ {
PgfConcr* concr = gu_new(PgfConcr, rdr->opool); PgfConcr* concr = gu_new(PgfConcr, rdr->opool);
concr->name =
pgf_read_cid(rdr);
gu_return_on_exn(rdr->err, NULL);
concr->cflags = concr->cflags =
pgf_read_flags(rdr); pgf_read_flags(rdr);
gu_return_on_exn(rdr->err, NULL);
concr->printnames = concr->printnames =
pgf_read_printnames(rdr); pgf_read_printnames(rdr);
gu_return_on_exn(rdr->err, NULL);
concr->sequences = concr->sequences =
pgf_read_sequences(rdr); pgf_read_sequences(rdr);
gu_return_on_exn(rdr->err, NULL);
concr->cncfuns = concr->cncfuns =
pgf_read_cncfuns(rdr, abstr, concr); pgf_read_cncfuns(rdr, abstr, concr);
gu_return_on_exn(rdr->err, NULL);
concr->ccats = concr->ccats =
gu_new_int_map(PgfCCat*, &gu_null_struct, rdr->opool); gu_new_int_map(PgfCCat*, &gu_null_struct, rdr->opool);
concr->fun_indices = gu_map_type_new(PgfCncFunOverloadMap, 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); gu_return_on_exn(rdr->err, NULL);
for (size_t i = 0; i < len; i++) { 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); PgfConcr* concr = pgf_read_concrete(rdr, abstr);
gu_return_on_exn(rdr->err, NULL); gu_return_on_exn(rdr->err, NULL);
gu_map_put(concretes, &name, PgfConcr*, concr); gu_map_put(concretes, &concr->name, PgfConcr*, concr);
} }
return concretes; return concretes;
@@ -1157,10 +1168,7 @@ pgf_read_pgf(PgfReader* rdr) {
pgf->gflags = pgf_read_flags(rdr); pgf->gflags = pgf_read_flags(rdr);
gu_return_on_exn(rdr->err, NULL); 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); pgf_read_abstract(rdr, &pgf->abstract);
gu_return_on_exn(rdr->err, NULL); gu_return_on_exn(rdr->err, NULL);