Browse Source

Improve type hinting for compound literals

gingerBill 7 years ago
parent
commit
59da98d3f0
1 changed files with 13 additions and 1 deletions
  1. 13 1
      src/check_expr.cpp

+ 13 - 1
src/check_expr.cpp

@@ -4249,7 +4249,19 @@ CallArgumentData check_call_arguments(CheckerContext *c, Operand *operand, Type
 
 	} else {
 		operands = array_make<Operand>(heap_allocator(), 0, 2*ce->args.count);
-		check_unpack_arguments(c, nullptr, -1, &operands, ce->args, false);
+		Entity **lhs = nullptr;
+		isize lhs_count = -1;
+		if (proc_type != nullptr && is_type_proc(proc_type)) {
+			TypeProc *pt = &base_type(proc_type)->Proc;
+			if (!pt->is_polymorphic || pt->is_poly_specialized) {
+				if (pt->params != nullptr) {
+					lhs = pt->params->Tuple.variables.data;
+					lhs_count = pt->params->Tuple.variables.count;
+				}
+			}
+		}
+
+		check_unpack_arguments(c, lhs, lhs_count, &operands, ce->args, false);
 	}
 
 	if (operand->mode == Addressing_ProcGroup) {