diff options
| author | kr.angelov <kr.angelov@gmail.com> | 2014-10-17 09:27:37 +0000 |
|---|---|---|
| committer | kr.angelov <kr.angelov@gmail.com> | 2014-10-17 09:27:37 +0000 |
| commit | 3f11f3d602f0688286077313cd54dd10f5b715bd (patch) | |
| tree | b433ec5ad2d6de2fb02f26f16856a1d17f5ffea1 /src/runtime/c/pgf/expr.c | |
| parent | 955c4b6a2381b3779067c0acd3af495152e9f2b8 (diff) | |
the C runtime now supports reading and writing expressions with indexed meta variables. The type checker generates fresh indices
Diffstat (limited to 'src/runtime/c/pgf/expr.c')
| -rw-r--r-- | src/runtime/c/pgf/expr.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/runtime/c/pgf/expr.c b/src/runtime/c/pgf/expr.c index 3c643e28a..551d2fb09 100644 --- a/src/runtime/c/pgf/expr.c +++ b/src/runtime/c/pgf/expr.c @@ -344,10 +344,18 @@ pgf_expr_parser_term(PgfExprParser* parser) } case PGF_TOKEN_QUESTION: { pgf_expr_parser_token(parser); + + PgfMetaId id = 0; + if (parser->token_tag == PGF_TOKEN_INT) { + char* str = + gu_buf_data(parser->token_value); + id = atoi(str); + pgf_expr_parser_token(parser); + } return gu_new_variant_i(parser->expr_pool, PGF_EXPR_META, PgfExprMeta, - 0); + id); } case PGF_TOKEN_IDENT: { PgfCId id = gu_buf_data(parser->token_value); @@ -1052,9 +1060,13 @@ pgf_print_expr(PgfExpr expr, PgfPrintContext* ctxt, int prec, pgf_print_literal(lit->lit, out, err); break; } - case PGF_EXPR_META: + case PGF_EXPR_META: { + PgfExprMeta* meta = ei.data; gu_putc('?', out, err); + if (meta->id > 0) + gu_printf(out, err, "%d", meta->id); break; + } case PGF_EXPR_FUN: { PgfExprFun* fun = ei.data; pgf_print_cid(fun->fun, out, err); |
