1
0
forked from GitHub/gf-core
Files
gf-core/src/runtime/c/pgf/linearizer.h
2021-11-26 18:44:17 +01:00

61 lines
1.6 KiB
C++

#ifndef LINEARIZER_H
#define LINEARIZER_H
class PGF_INTERNAL_DECL PgfLinearizer : public PgfUnmarshaller {
ref<PgfConcr> concr;
PgfMarshaller *m;
struct TreeNode {
TreeNode *next;
TreeNode *next_arg;
TreeNode *args;
ref<PgfConcrLin> lin;
TreeNode(PgfLinearizer *linearizer, ref<PgfConcrLin> lin) {
this->next = linearizer->root;
this->next_arg = NULL;
this->args = linearizer->args;
this->lin = lin;
if (linearizer->first == NULL)
linearizer->first = this;
linearizer->root = this;
}
};
TreeNode *root;
TreeNode *first;
TreeNode *args;
public:
PgfLinearizer(ref<PgfConcr> concr, PgfMarshaller *m) {
this->concr = concr;
this->m = m;
this->root = NULL;
this->first = NULL;
this->args = NULL;
};
~PgfLinearizer();
virtual PgfExpr eabs(PgfBindType btype, PgfText *name, PgfExpr body);
virtual PgfExpr eapp(PgfExpr fun, PgfExpr arg);
virtual PgfExpr elit(PgfLiteral lit);
virtual PgfExpr emeta(PgfMetaId meta);
virtual PgfExpr efun(PgfText *name);
virtual PgfExpr evar(int index);
virtual PgfExpr etyped(PgfExpr expr, PgfType typ);
virtual PgfExpr eimplarg(PgfExpr expr);
virtual PgfLiteral lint(size_t size, uintmax_t *v);
virtual PgfLiteral lflt(double v);
virtual PgfLiteral lstr(PgfText *v);
virtual PgfType dtyp(size_t n_hypos, PgfTypeHypo *hypos,
PgfText *cat,
size_t n_exprs, PgfExpr *exprs);
virtual void free_ref(object x);
};
#endif