diff options
| author | gingerBill <gingerBill@users.noreply.github.com> | 2026-01-26 19:13:48 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-01-26 19:13:48 +0000 |
| commit | 415752992f76409ed9c8561081c735000e043e1c (patch) | |
| tree | eed58cd0968be771f2f039a4beae9480b7aac2f7 /src/check_expr.cpp | |
| parent | 467954bc7baed8061348b6dc5ddda1a742ea69f4 (diff) | |
| parent | b85f29d979ffbeb044bba644d43dd2e462a63008 (diff) | |
Merge pull request #6181 from odin-lang/bill/type-assert-behaviour
Use `context.assertion_failure_proc` with type assertions when possible
Diffstat (limited to 'src/check_expr.cpp')
| -rw-r--r-- | src/check_expr.cpp | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 42a398597..7d2240fdf 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -11064,8 +11064,20 @@ gb_internal ExprKind check_type_assertion(CheckerContext *c, Operand *o, Ast *no end:; if ((c->state_flags & StateFlag_no_type_assert) == 0) { - add_package_dependency(c, "runtime", "type_assertion_check"); - add_package_dependency(c, "runtime", "type_assertion_check2"); + bool has_context = true; + if (c->proc_name.len == 0 && c->curr_proc_sig == nullptr) { + has_context = false; + } else if ((c->scope->flags & ScopeFlag_ContextDefined) == 0) { + has_context = false; + } + + if (has_context) { + add_package_dependency(c, "runtime", "type_assertion_check_with_context"); + add_package_dependency(c, "runtime", "type_assertion_check2_with_context"); + } else { + add_package_dependency(c, "runtime", "type_assertion_check_contextless"); + add_package_dependency(c, "runtime", "type_assertion_check2_contextless"); + } } return kind; } |