aboutsummaryrefslogtreecommitdiff
path: root/src/check_expr.cpp
diff options
context:
space:
mode:
authorFourteenBrush <74827262+FourteenBrush@users.noreply.github.com>2025-09-09 14:41:28 +0200
committerGitHub <noreply@github.com>2025-09-09 14:41:28 +0200
commiteb7218eff0d1aa42227e45afb2b4e8bdfcd78f5c (patch)
treebd760448814e1500ac971b96c4b09a0efa7a917d /src/check_expr.cpp
parentfb1dd3052d92a8e8b8de6aca9c74c482cfac30bf (diff)
parent9abc3f67b52860f3fe85bfdbcd3bc014a4651ad5 (diff)
Merge branch 'odin-lang:master' into patch-2
Diffstat (limited to 'src/check_expr.cpp')
-rw-r--r--src/check_expr.cpp12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/check_expr.cpp b/src/check_expr.cpp
index 80ec4f78e..e005b0bd0 100644
--- a/src/check_expr.cpp
+++ b/src/check_expr.cpp
@@ -6473,7 +6473,14 @@ gb_internal CallArgumentError check_call_arguments_internal(CheckerContext *c, A
}
if (e && e->kind == Entity_Constant && is_type_proc(e->type)) {
- if (o->mode != Addressing_Constant) {
+ bool ok = false;
+ if (o->mode == Addressing_Constant) {
+ ok = true;
+ } else if (o->value.kind == ExactValue_Procedure) {
+ ok = true;
+ }
+
+ if (!ok) {
if (show_error) {
error(o->expr, "Expected a constant procedure value for the argument '%.*s'", LIT(e->token.string));
}
@@ -7947,7 +7954,7 @@ gb_internal CallArgumentError check_polymorphic_record_type(CheckerContext *c, O
s = gb_string_append_fmt(s, "$%.*s", LIT(name));
if (v->kind == Entity_TypeName) {
- if (v->type->kind != Type_Generic) {
+ if (v->type != nullptr && v->type->kind != Type_Generic) {
s = gb_string_append_fmt(s, "=");
s = write_type_to_string(s, v->type, false);
}
@@ -11423,6 +11430,7 @@ gb_internal ExprKind check_expr_base_internal(CheckerContext *c, Operand *o, Ast
o->mode = Addressing_Value;
o->type = type;
+ o->value = exact_value_procedure(node);
case_end;
case_ast_node(te, TernaryIfExpr, node);