forked from GitHub/gf-core
libpgf: printing of literals and flags
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user