diff --git a/tools/qfcc/source/expr.c b/tools/qfcc/source/expr.c index 1efde4579..0d96f4fcf 100644 --- a/tools/qfcc/source/expr.c +++ b/tools/qfcc/source/expr.c @@ -1796,6 +1796,10 @@ has_function_call (expr_t *e) int is_function_call (expr_t *e) { + if (e->type != ex_block || !e->e.block.is_call) { + return 0; + } + e = e->e.block.result; return e->type == ex_branch && e->e.branch.type == pr_branch_call; } diff --git a/tools/qfcc/source/expr_obj.c b/tools/qfcc/source/expr_obj.c index 41405c1e4..b2463e4d1 100644 --- a/tools/qfcc/source/expr_obj.c +++ b/tools/qfcc/source/expr_obj.c @@ -249,8 +249,8 @@ message_expr (expr_t *receiver, keywordarg_t *message) if (call->type == ex_error) return receiver; - if (!is_function_call (call->e.block.result)) { - internal_error (call, "unexpected block result type"); + if (!is_function_call (call)) { + internal_error (call, "unexpected call expression type"); } call->e.block.result->e.branch.ret_type = return_type; return call;