libpgf: printing of literals and flags

This commit is contained in:
kr.angelov
2012-01-23 10:17:20 +00:00
parent 7fcaa81858
commit 4e4881dba5
2 changed files with 37 additions and 2 deletions

View File

@@ -291,6 +291,34 @@ pgf_read_expr(GuReader* rdr, GuPool* pool, GuExn* err)
return expr;
}
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:

View File

@@ -40,7 +40,7 @@ typedef enum {
} PgfLiteralTag;
typedef struct {
GuStr val;
GuString val;
} PgfLiteralStr;
typedef struct {
@@ -146,6 +146,9 @@ pgf_expr_unapply(PgfExpr expr, GuPool* pool);
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);