diff options
Diffstat (limited to 'src/runtime/c/pgf/expr.c')
| -rw-r--r-- | src/runtime/c/pgf/expr.c | 38 |
1 files changed, 15 insertions, 23 deletions
diff --git a/src/runtime/c/pgf/expr.c b/src/runtime/c/pgf/expr.c index 4b2644931..d7f23c207 100644 --- a/src/runtime/c/pgf/expr.c +++ b/src/runtime/c/pgf/expr.c @@ -91,20 +91,12 @@ GU_DEFINE_TYPE(PgfHypo, struct, GU_MEMBER(PgfHypo, cid, PgfCId), GU_MEMBER_P(PgfHypo, type, PgfType)); -GU_DEFINE_TYPE(PgfHypos, GuSeq, gu_type(PgfHypo)); - -GU_DEFINE_TYPE(PgfType, struct, - GU_MEMBER(PgfType, hypos, PgfHypos), - GU_MEMBER(PgfType, cid, PgfCId), - GU_MEMBER(PgfType, n_exprs, GuLength), - GU_FLEX_MEMBER(PgfType, exprs, PgfExpr)); - GU_DEFINE_TYPE( PgfExpr, GuVariant, GU_CONSTRUCTOR_S( PGF_EXPR_ABS, PgfExprAbs, GU_MEMBER(PgfExprAbs, bind_type, PgfBindType), - GU_MEMBER(PgfExprAbs, id, GuStr), + GU_MEMBER(PgfExprAbs, id, GuString), GU_MEMBER(PgfExprAbs, body, PgfExpr)), GU_CONSTRUCTOR_S( PGF_EXPR_APP, PgfExprApp, @@ -160,7 +152,7 @@ struct PgfExprParser { GuPool* expr_pool; GuPool* tmp_pool; PGF_TOKEN_TAG token_tag; - GuChars token_value; + GuCharBuf* token_value; int ch; }; @@ -182,7 +174,7 @@ pgf_expr_parser_token(PgfExprParser* parser) } parser->token_tag = PGF_TOKEN_UNKNOWN; - parser->token_value = gu_null_seq; + parser->token_value = NULL; switch (parser->ch) { case EOF: @@ -250,7 +242,7 @@ pgf_expr_parser_token(PgfExprParser* parser) pgf_expr_parser_getc(parser); } parser->token_tag = PGF_TOKEN_IDENT; - parser->token_value = gu_buf_seq(chars); + parser->token_value = chars; } else if (isdigit(parser->ch)) { while (isdigit(parser->ch)) { gu_buf_push(chars, char, parser->ch); @@ -266,10 +258,10 @@ pgf_expr_parser_token(PgfExprParser* parser) pgf_expr_parser_getc(parser); } parser->token_tag = PGF_TOKEN_FLT; - parser->token_value = gu_buf_seq(chars); + parser->token_value = chars; } else { parser->token_tag = PGF_TOKEN_INT; - parser->token_value = gu_buf_seq(chars); + parser->token_value = chars; } } else if (parser->ch == '"') { pgf_expr_parser_getc(parser); @@ -282,7 +274,7 @@ pgf_expr_parser_token(PgfExprParser* parser) if (parser->ch == '"') { pgf_expr_parser_getc(parser); parser->token_tag = PGF_TOKEN_STR; - parser->token_value = gu_buf_seq(chars); + parser->token_value = chars; } } break; @@ -350,7 +342,7 @@ pgf_expr_parser_term(PgfExprParser* parser) } case PGF_TOKEN_IDENT: { char* str = - gu_chars_str(parser->token_value, parser->tmp_pool); + gu_char_buf_str(parser->token_value, parser->tmp_pool); PgfCId id = gu_str_string(str, parser->expr_pool); pgf_expr_parser_token(parser); return gu_new_variant_i(parser->expr_pool, @@ -360,7 +352,7 @@ pgf_expr_parser_term(PgfExprParser* parser) } case PGF_TOKEN_INT: { char* str = - gu_chars_str(parser->token_value, parser->tmp_pool); + gu_char_buf_str(parser->token_value, parser->tmp_pool); int n = atoi(str); pgf_expr_parser_token(parser); PgfLiteral lit = @@ -375,7 +367,7 @@ pgf_expr_parser_term(PgfExprParser* parser) } case PGF_TOKEN_STR: { char* str = - gu_chars_str(parser->token_value, parser->tmp_pool); + gu_char_buf_str(parser->token_value, parser->tmp_pool); GuString s = gu_str_string(str, parser->expr_pool); pgf_expr_parser_token(parser); PgfLiteral lit = @@ -390,7 +382,7 @@ pgf_expr_parser_term(PgfExprParser* parser) } case PGF_TOKEN_FLT: { char* str = - gu_chars_str(parser->token_value, parser->tmp_pool); + gu_char_buf_str(parser->token_value, parser->tmp_pool); double d = atof(str); pgf_expr_parser_token(parser); PgfLiteral lit = @@ -451,7 +443,7 @@ pgf_expr_parser_bind(PgfExprParser* parser, GuBuf* binds) for (;;) { if (parser->token_tag == PGF_TOKEN_IDENT) { char* str = - gu_chars_str(parser->token_value, parser->tmp_pool); + gu_char_buf_str(parser->token_value, parser->tmp_pool); var = gu_str_string(str, parser->expr_pool); pgf_expr_parser_token(parser); } else if (parser->token_tag == PGF_TOKEN_WILD) { @@ -571,7 +563,7 @@ pgf_expr_parser_hypos(PgfExprParser* parser, GuBuf* hypos) if (parser->token_tag == PGF_TOKEN_IDENT) { char* str = - gu_chars_str(parser->token_value, parser->tmp_pool); + gu_char_buf_str(parser->token_value, parser->tmp_pool); var = gu_str_string(str, parser->expr_pool); pgf_expr_parser_token(parser); } else if (parser->token_tag == PGF_TOKEN_WILD) { @@ -612,7 +604,7 @@ pgf_expr_parser_atom(PgfExprParser* parser) return NULL; char* str = - gu_chars_str(parser->token_value, parser->tmp_pool); + gu_char_buf_str(parser->token_value, parser->tmp_pool); PgfCId cid = gu_str_string(str, parser->expr_pool); pgf_expr_parser_token(parser); @@ -712,7 +704,7 @@ pgf_expr_parser_type(PgfExprParser* parser) } } - type->hypos = gu_buf_seq(hypos); + type->hypos = gu_buf_data_seq(hypos); return type; } |
