summaryrefslogtreecommitdiff
path: root/src/runtime/c/pgf/expr.c
diff options
context:
space:
mode:
authorkr.angelov <kr.angelov@gmail.com>2012-01-23 10:17:20 +0000
committerkr.angelov <kr.angelov@gmail.com>2012-01-23 10:17:20 +0000
commit4e4881dba5b33a7603a0ddcf33c3f5fbbe3e31e8 (patch)
tree322168ba8fc7e4b2486232e18375714008cb51f5 /src/runtime/c/pgf/expr.c
parent7fcaa81858959699938ae0f032583a498c63019a (diff)
libpgf: printing of literals and flags
Diffstat (limited to 'src/runtime/c/pgf/expr.c')
-rw-r--r--src/runtime/c/pgf/expr.c34
1 files changed, 33 insertions, 1 deletions
diff --git a/src/runtime/c/pgf/expr.c b/src/runtime/c/pgf/expr.c
index 105a3db9d..73ed251d1 100644
--- a/src/runtime/c/pgf/expr.c
+++ b/src/runtime/c/pgf/expr.c
@@ -292,6 +292,34 @@ pgf_read_expr(GuReader* rdr, GuPool* pool, GuExn* err)
}
void
+pgf_print_literal(PgfLiteral lit,
+ GuWriter* wtr, GuExn* err)
+{
+ GuVariantInfo ei = gu_variant_open(lit);
+ switch (ei.tag) {
+ case PGF_LITERAL_STR: {
+ PgfLiteralStr* lit = ei.data;
+ gu_putc('"', wtr, err);
+ gu_string_write(lit->val, wtr, err);
+ gu_putc('"', wtr, err);
+ break;
+ }
+ case PGF_LITERAL_INT: {
+ PgfLiteralInt* lit = ei.data;
+ gu_printf(wtr, err, "%d", lit->val);
+ break;
+ }
+ case PGF_LITERAL_FLT: {
+ PgfLiteralFlt* lit = ei.data;
+ gu_printf(wtr, err, "%f", lit->val);
+ break;
+ }
+ default:
+ gu_impossible();
+ }
+}
+
+void
pgf_print_expr(PgfExpr expr, int prec,
GuWriter* wtr, GuExn* err)
{
@@ -316,7 +344,11 @@ pgf_print_expr(PgfExpr expr, int prec,
break;
}
case PGF_EXPR_ABS:
- case PGF_EXPR_LIT:
+ case PGF_EXPR_LIT: {
+ PgfExprLit* lit = ei.data;
+ pgf_print_literal(lit->lit, wtr, err);
+ break;
+ }
case PGF_EXPR_META:
case PGF_EXPR_VAR:
case PGF_EXPR_TYPED: