diff options
| author | kr.angelov <kr.angelov@gmail.com> | 2012-01-23 10:17:20 +0000 |
|---|---|---|
| committer | kr.angelov <kr.angelov@gmail.com> | 2012-01-23 10:17:20 +0000 |
| commit | 4e4881dba5b33a7603a0ddcf33c3f5fbbe3e31e8 (patch) | |
| tree | 322168ba8fc7e4b2486232e18375714008cb51f5 /src | |
| parent | 7fcaa81858959699938ae0f032583a498c63019a (diff) | |
libpgf: printing of literals and flags
Diffstat (limited to 'src')
| -rw-r--r-- | src/runtime/c/pgf/expr.c | 34 | ||||
| -rw-r--r-- | src/runtime/c/pgf/expr.h | 5 |
2 files changed, 37 insertions, 2 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: diff --git a/src/runtime/c/pgf/expr.h b/src/runtime/c/pgf/expr.h index 65e2d66a9..003102792 100644 --- a/src/runtime/c/pgf/expr.h +++ b/src/runtime/c/pgf/expr.h @@ -40,7 +40,7 @@ typedef enum { } PgfLiteralTag; typedef struct { - GuStr val; + GuString val; } PgfLiteralStr; typedef struct { @@ -147,6 +147,9 @@ PgfExpr pgf_read_expr(GuReader* rdr, GuPool* pool, GuExn* err); void +pgf_print_literal(PgfLiteral lit, GuWriter* wtr, GuExn* err); + +void pgf_print_expr(PgfExpr expr, int prec, GuWriter* wtr, GuExn* err); void |
