summaryrefslogtreecommitdiff
path: root/parse.c
diff options
context:
space:
mode:
authorLeo Tenenbaum <pommicket@gmail.com>2020-03-01 12:21:50 -0500
committerLeo Tenenbaum <pommicket@gmail.com>2020-03-01 12:21:50 -0500
commit88e7c92e76ce771e7a1efd4824060e3905194070 (patch)
tree04b36c981e662cb2c4a4db364dc36b3e8dd7164a /parse.c
parentda748748c0239c21b9d62c77b51e269ad1d7de9f (diff)
casting to #C types
Diffstat (limited to 'parse.c')
-rw-r--r--parse.c14
1 files changed, 11 insertions, 3 deletions
diff --git a/parse.c b/parse.c
index f49d9a0..bad5956 100644
--- a/parse.c
+++ b/parse.c
@@ -1714,8 +1714,15 @@ static Status parse_expr(Parser *p, Expression *e, Token *end) {
if (!parse_expr(p, casted, lowest_precedence_op))
return false;
t->token = lowest_precedence_op + 1;
- if (!parse_type(p, &e->cast.type))
- return false;
+ if (token_is_direct(t->token, DIRECT_C)) {
+ /* cast to #C type */
+ CType unused;
+ if (!parse_c_type(p, &unused, &e->cast.type))
+ return false;
+ } else {
+ if (!parse_type(p, &e->cast.type))
+ return false;
+ }
if (t->token != end) {
tokr_err(t, "Cast expression continues after type");
return false;
@@ -1940,7 +1947,8 @@ static Status parse_expr(Parser *p, Expression *e, Token *end) {
if (single_arg) {
++t->token;
if (!token_is_kw(t->token, KW_LPAREN)) {
- tokr_err(t, "Expected ( to follow #%s.", directives[t->token->direct]);
+ printf("%d\n",t->token->direct);
+ tokr_err(t, "Expected ( to follow #%s.", directives[t->token[-1].direct]);
return false;
}
++t->token;