diff options
| author | kr.angelov <kr.angelov@gmail.com> | 2012-01-20 13:41:10 +0000 |
|---|---|---|
| committer | kr.angelov <kr.angelov@gmail.com> | 2012-01-20 13:41:10 +0000 |
| commit | 2eee382a62a909d5a3f2f5eda94f30fe68fd5335 (patch) | |
| tree | b0b0d513535895f244214aebf6358e172b8dce6d /src/runtime/c/pgf/unloader.c | |
| parent | b9728357126f8b9a6311cca17d9f0dcc2a7bfb9b (diff) | |
initial import of the C runtime
Diffstat (limited to 'src/runtime/c/pgf/unloader.c')
| -rw-r--r-- | src/runtime/c/pgf/unloader.c | 248 |
1 files changed, 0 insertions, 248 deletions
diff --git a/src/runtime/c/pgf/unloader.c b/src/runtime/c/pgf/unloader.c deleted file mode 100644 index 6a1b0d41d..000000000 --- a/src/runtime/c/pgf/unloader.c +++ /dev/null @@ -1,248 +0,0 @@ -#include "../pgf.h" -#include "data.h" -#include "panic.h" -#include <stdlib.h> - -static void freeCId(CId id) { - free(id); -} - -static void freeCIdList(CIdList ids) { - int i; - for (i = 0; i < ids->count; i++) { - freeCId(ids->names[i]); - } - free(ids); -} - -static void freeString(String str) { - free(str); -} - -static void freeLiteral(Literal lit) { - switch (lit->tag) { - case LIT_STR: - freeString (((LiteralStr) lit)->val); - break; - } - free(lit); -} - -static void freeFlags(Flags flags) { - int i; - for (i = 0; i < flags->count; i++) { - freeCId(flags->values[i].name); - freeLiteral(flags->values[i].value); - } - free(flags); -} - -static void freeContext(Context ctxt); -static void freeType(Type ty); - -static void freeExpr(Expr e0) { - - switch (e0->tag) { - case TAG_ABS: - { - ExprAbs e = (ExprAbs) e0; - freeCId(e->var); - freeExpr(e->body); - } - break; - case TAG_APP: - { - ExprApp e = (ExprApp) e0; - freeExpr(e->left); - freeExpr(e->right); - } - break; - case TAG_LIT: - { - ExprLit e = (ExprLit) e0; - freeLiteral(e->lit); - } - break; - case TAG_MET: - { - ExprMeta e = (ExprMeta) e0; - } - break; - case TAG_FUN: - { - ExprFun e = (ExprFun) e0; - freeCId(e->fun); - } - break; - case TAG_VAR: - { - ExprVar e = (ExprVar) e0; - } - break; - case TAG_TYP: - { - ExprTyped e = (ExprTyped) e0; - freeExpr(e->e); - freeType(e->ty); - } - break; - case TAG_IMP: - { - ExprImplArg e = (ExprImplArg) e0; - freeExpr(e->e); - } - break; - default: - __pgf_panic("Unknown expression tag"); - } - - free(e0); -} - -static void freeType(Type ty) { - freeContext(ty->hypos); - freeCId(ty->cat); - - int i; - for (i = 0; i < ty->nArgs; i++) { - freeExpr(ty->args[i]); - } - - free(ty); -} - -static void freeHypo(Hypo hypo) { - freeCId(hypo->var); - freeType(hypo->ty); -} - -static void freeContext(Context ctxt) { - int i; - for (i = 0; i < ctxt->size; i++) { - freeHypo(&ctxt->hypos[i]); - } - free(ctxt); -} - -static void freePatt(Patt p0) { - switch (p0->tag) { - case TAG_PAPP: - { - int i; - PattApp p = (PattApp) p0; - - freeCId(p->fun); - for (i = 0; i < p->args.count; i++) { - freePatt(p->args.pats[i]); - } - } - break; - case TAG_PVAR: - { - PattVar p = (PattVar) p0; - freeCId(p->var); - } - break; - case TAG_PAT: - { - PattAt p = (PattAt) p0; - freeCId(p->var); - freePatt(p->pat); - } - break; - case TAG_PWILD: - { - PattWild p = (PattWild) p0; - } - break; - case TAG_PLIT: - { - PattLit p = (PattLit) p0; - freeLiteral(p->lit); - } - break; - case TAG_PIMP: - { - PattImplArg p = (PattImplArg) p0; - freePatt(p->pat); - } - break; - case TAG_PTILDE: - { - PattTilde p = (PattTilde) p0; - freeExpr(p->e); - } - break; - default: - __pgf_panic("Unknown pattern tag"); - } - - free(p0); -} - -static void freePatts(Patts pats) { - int i; - for (i = 0; i < pats->count; i++) { - freePatt(pats->pats[i]); - } - free(pats); -} - -static void freeEquations(Equations equs) { - int i; - for (i = 0; i < equs->count; i++) { - freePatts(equs->equs[i].lhs); - freeExpr(equs->equs[i].rhs); - } - free(equs); -} - -static void freeAbsFun(AbsFun fun) { - freeCId(fun->name); - freeType(fun->ty); - freeEquations(fun->equs); -} - -static void freeAbsFuns(AbsFuns funs) { - int i; - for (i = 0; i < funs->count; i++) { - freeAbsFun(&funs->lst[i]); - } - free(funs); -} - -static void freeAbsCat(AbsCat cat) { - freeCId(cat->name); - freeContext(cat->hypos); - freeCIdList(cat->funs); -} - -static void freeAbsCats(AbsCats cats) { - int i; - for (i = 0; i < cats->count; i++) { - freeAbsCat(&cats->lst[i]); - } - free(cats); -} - -static void freeAbstract(Abstract abstr) { - freeCId(abstr->name); - freeFlags(abstr->flags); - freeAbsFuns(abstr->funs); - freeAbsCats(abstr->cats); -} - -static void freeConcrete(Concrete concr) { -// freeCId(concr->name); -// freeFlags(concr->flags); -} - -void freePGF(PGF pgf) { - int i; - - freeFlags(pgf->flags); - freeAbstract(&pgf->abstract); - for (i = 0; i < pgf->nConcr; i++) - freeConcrete(&pgf->concretes[i]); - free(pgf); -} |
