summaryrefslogtreecommitdiff
path: root/src/runtime/c/pgf/unloader.c
diff options
context:
space:
mode:
authorkr.angelov <kr.angelov@gmail.com>2012-01-20 13:41:10 +0000
committerkr.angelov <kr.angelov@gmail.com>2012-01-20 13:41:10 +0000
commit2eee382a62a909d5a3f2f5eda94f30fe68fd5335 (patch)
treeb0b0d513535895f244214aebf6358e172b8dce6d /src/runtime/c/pgf/unloader.c
parentb9728357126f8b9a6311cca17d9f0dcc2a7bfb9b (diff)
initial import of the C runtime
Diffstat (limited to 'src/runtime/c/pgf/unloader.c')
-rw-r--r--src/runtime/c/pgf/unloader.c248
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);
-}