From 5161731ce0bde10695e4186c2530e030403b4d05 Mon Sep 17 00:00:00 2001 From: smoke-y Date: Fri, 5 Sep 2025 11:27:28 +0530 Subject: proc at type lvl seg fault --- src/check_expr.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) (limited to 'src/check_expr.cpp') diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 80ec4f78e..b74b0958d 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -7947,10 +7947,12 @@ 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) { - s = gb_string_append_fmt(s, "="); - s = write_type_to_string(s, v->type, false); - } + if(v->type){ + if (v->type->kind != Type_Generic) { + s = gb_string_append_fmt(s, "="); + s = write_type_to_string(s, v->type, false); + } + }; } else if (v->kind == Entity_Constant) { if (v->Constant.value.kind != ExactValue_Invalid) { s = gb_string_append_fmt(s, "="); -- cgit v1.2.3 From 906eddd1d4ad77cce1a24004a866f3fd736e018e Mon Sep 17 00:00:00 2001 From: smoke-y Date: Fri, 5 Sep 2025 21:28:00 +0530 Subject: formatting --- src/check_expr.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'src/check_expr.cpp') diff --git a/src/check_expr.cpp b/src/check_expr.cpp index b74b0958d..542a2afa1 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -7947,12 +7947,10 @@ 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){ - if (v->type->kind != Type_Generic) { - s = gb_string_append_fmt(s, "="); - s = write_type_to_string(s, v->type, false); - } - }; + if (v->type != nullptr && v->type->kind != Type_Generic) { + s = gb_string_append_fmt(s, "="); + s = write_type_to_string(s, v->type, false); + } } else if (v->kind == Entity_Constant) { if (v->Constant.value.kind != ExactValue_Invalid) { s = gb_string_append_fmt(s, "="); -- cgit v1.2.3 From 9abc3f67b52860f3fe85bfdbcd3bc014a4651ad5 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Tue, 9 Sep 2025 10:36:22 +0100 Subject: Fix constant procedure parameters when passing literals --- src/check_expr.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'src/check_expr.cpp') diff --git a/src/check_expr.cpp b/src/check_expr.cpp index 542a2afa1..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)); } @@ -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); -- cgit v1.2.3