From bb1c1dd27c8adc007ef64546cae67ac729b05422 Mon Sep 17 00:00:00 2001 From: "kr.angelov" Date: Fri, 19 Dec 2014 08:47:00 +0000 Subject: added mkApp to the Haskell binding --- src/runtime/c/pgf/expr.c | 23 +++++++++++++++++++++++ src/runtime/c/pgf/expr.h | 2 ++ 2 files changed, 25 insertions(+) (limited to 'src/runtime/c/pgf') diff --git a/src/runtime/c/pgf/expr.c b/src/runtime/c/pgf/expr.c index 551d2fb09..0192ba816 100644 --- a/src/runtime/c/pgf/expr.c +++ b/src/runtime/c/pgf/expr.c @@ -73,6 +73,29 @@ pgf_expr_unapply(PgfExpr expr, GuPool* pool) return appl; } +PgfExpr +pgf_expr_apply(PgfApplication* app, GuPool* pool) +{ + PgfExpr expr; + + size_t len = strlen(app->fun); + PgfExprFun *efun = + gu_new_flex_variant(PGF_EXPR_FUN, + PgfExprFun, + fun, len+1, + &expr, pool); + strcpy(efun->fun, app->fun); + + for (int i = 0; i < app->n_args; i++) { + expr = gu_new_variant_i(pool, + PGF_EXPR_APP, PgfExprApp, + .fun = expr, + .arg = app->args[i]); + } + + return expr; +} + typedef struct PgfExprParser PgfExprParser; typedef enum { diff --git a/src/runtime/c/pgf/expr.h b/src/runtime/c/pgf/expr.h index a613c9666..07933556b 100644 --- a/src/runtime/c/pgf/expr.h +++ b/src/runtime/c/pgf/expr.h @@ -143,6 +143,8 @@ struct PgfApplication { PgfApplication* pgf_expr_unapply(PgfExpr expr, GuPool* pool); +PgfExpr +pgf_expr_apply(PgfApplication*, GuPool* pool); PgfExpr pgf_read_expr(GuIn* in, GuPool* pool, GuExn* err); -- cgit v1.2.3