aboutsummaryrefslogtreecommitdiff
path: root/src/check_stmt.cpp
diff options
context:
space:
mode:
authorgingerBill <gingerBill@users.noreply.github.com>2021-08-16 12:03:43 +0100
committerGitHub <noreply@github.com>2021-08-16 12:03:43 +0100
commit5f072591ba70abf6df59f4ed9372649e7ebda710 (patch)
tree8c9d02259b75be22736d65d4a595ee933a26a259 /src/check_stmt.cpp
parentd62f189d7261160a2d3c66bfba2fda182a863fbd (diff)
parente3fef2dadef2b10342222f0314583f6f53e39ff4 (diff)
Merge pull request #1082 from odin-lang/or_else-or_return-operator
`or_else` and `or_return` operators
Diffstat (limited to 'src/check_stmt.cpp')
-rw-r--r--src/check_stmt.cpp10
1 files changed, 6 insertions, 4 deletions
diff --git a/src/check_stmt.cpp b/src/check_stmt.cpp
index 236b5a9f5..504c23d53 100644
--- a/src/check_stmt.cpp
+++ b/src/check_stmt.cpp
@@ -1480,8 +1480,10 @@ void check_stmt_internal(CheckerContext *ctx, Ast *node, u32 flags) {
if (kind == Expr_Stmt) {
return;
}
- if (operand.expr->kind == Ast_CallExpr) {
- AstCallExpr *ce = &operand.expr->CallExpr;
+ Ast *expr = strip_or_return_expr(operand.expr);
+
+ if (expr->kind == Ast_CallExpr) {
+ AstCallExpr *ce = &expr->CallExpr;
Type *t = type_of_expr(ce->proc);
if (is_type_proc(t)) {
if (t->Proc.require_results) {
@@ -1491,8 +1493,8 @@ void check_stmt_internal(CheckerContext *ctx, Ast *node, u32 flags) {
}
}
return;
- } else if (operand.expr->kind == Ast_SelectorCallExpr) {
- AstSelectorCallExpr *se = &operand.expr->SelectorCallExpr;
+ } else if (expr->kind == Ast_SelectorCallExpr) {
+ AstSelectorCallExpr *se = &expr->SelectorCallExpr;
ast_node(ce, CallExpr, se->call);
Type *t = type_of_expr(ce->proc);
if (is_type_proc(t)) {