Browse Source

Check for procedure literals in `$` parameters

gingerBill 2 years ago
parent
commit
c386c72d10
1 changed files with 11 additions and 1 deletions
  1. 11 1
      src/check_expr.cpp

+ 11 - 1
src/check_expr.cpp

@@ -5419,7 +5419,17 @@ gb_internal CALL_ARGUMENT_CHECKER(check_call_arguments_internal) {
 		data->result_type = final_proc_type->Proc.results;
 		data->gen_entity = gen_entity;
 
-		add_type_and_value(c, ce->proc, Addressing_Value, final_proc_type, {});
+
+		Ast *proc_lit = nullptr;
+		if (ce->proc->tav.value.kind == ExactValue_Procedure) {
+			Ast *vp = unparen_expr(ce->proc->tav.value.value_procedure);
+			if (vp && vp->kind == Ast_ProcLit) {
+				proc_lit = vp;
+			}
+		}
+		if (proc_lit == nullptr) {
+			add_type_and_value(c, ce->proc, Addressing_Value, final_proc_type, {});
+		}
 	}
 
 	return err;