From d8a06a865b6e1256886fedb38706b1b5e6ddf858 Mon Sep 17 00:00:00 2001
From: Felipe Pena <felipensp@gmail.com>
Date: Thu, 2 Jan 2025 17:00:21 -0300
Subject: [PATCH] fix

---
 vlib/math/stats/stats_test.v             | 4 ++--
 vlib/v/checker/assign.v                  | 8 +++++++-
 vlib/v/gen/c/assign.v                    | 6 +++++-
 vlib/v/type_resolver/comptime_resolver.v | 4 ++++
 4 files changed, 18 insertions(+), 4 deletions(-)

diff --git a/vlib/math/stats/stats_test.v b/vlib/math/stats/stats_test.v
index 4610baba66acec..ebbd3bf88f0b61 100644
--- a/vlib/math/stats/stats_test.v
+++ b/vlib/math/stats/stats_test.v
@@ -458,7 +458,7 @@ fn test_kurtosis() {
 	assert stats.kurtosis[int]([1, 2, 3, 1]) == 1
 	assert stats.kurtosis[i64]([i64(1), 2, 3, 1]) == 1
 	o = stats.kurtosis[f32]([f32(1.0), 3, 5, 7, 3])
-	assert math.alike(o, -1.0443782806396484)
+	assert math.alike(o, -1.044378399848938)
 }
 
 fn test_skew() {
@@ -476,7 +476,7 @@ fn test_skew() {
 	assert stats.skew[int]([1, 2, 3, 1]) == 2
 	assert stats.skew[i64]([i64(1), 2, 3, 1]) == 2
 	o = stats.skew[f32]([f32(1.0), 3, 5, 7, 3])
-	assert math.alike(o, 0.2715454697608948)
+	assert math.alike(o, 0.27154541015625)
 }
 
 fn test_quantile() {
diff --git a/vlib/v/checker/assign.v b/vlib/v/checker/assign.v
index 2c578c354cc837..bdb270be7c0951 100644
--- a/vlib/v/checker/assign.v
+++ b/vlib/v/checker/assign.v
@@ -412,7 +412,13 @@ fn (mut c Checker) assign_stmt(mut node ast.AssignStmt) {
 									}
 								} else if mut right is ast.InfixExpr {
 									right_ct_var := c.comptime.get_ct_type_var(right.left)
-									if right_ct_var in [.generic_var, .generic_param] {
+									if right_ct_var != .no_comptime {
+										left.obj.ct_type_var = right_ct_var
+									}
+								} else if mut right is ast.IndexExpr
+									&& c.comptime.is_comptime(right) {
+									right_ct_var := c.comptime.get_ct_type_var(right.left)
+									if right_ct_var != .no_comptime {
 										left.obj.ct_type_var = right_ct_var
 									}
 								} else if mut right is ast.Ident && right.obj is ast.Var
diff --git a/vlib/v/gen/c/assign.v b/vlib/v/gen/c/assign.v
index 922fcf0d009f07..9d1413ab7bb805 100644
--- a/vlib/v/gen/c/assign.v
+++ b/vlib/v/gen/c/assign.v
@@ -371,9 +371,13 @@ fn (mut g Gen) assign_stmt(node_ ast.AssignStmt) {
 						left.obj.typ = var_type
 						g.assign_ct_type = var_type
 					}
-				} else if val is ast.InfixExpr {
+				} else if val is ast.InfixExpr && g.comptime.is_comptime(val.left) {
 					ctyp := g.unwrap_generic(g.type_resolver.get_type(val.left))
 					if ctyp != ast.void_type {
+						ct_type_var := g.comptime.get_ct_type_var(val.left)
+						if ct_type_var in [.key_var, .value_var] {
+							g.type_resolver.update_ct_type(left.name, g.unwrap_generic(ctyp))
+						}
 						var_type = ctyp
 						val_type = var_type
 						left.obj.typ = var_type
diff --git a/vlib/v/type_resolver/comptime_resolver.v b/vlib/v/type_resolver/comptime_resolver.v
index 46c7cd91d51868..a01813dc08d307 100644
--- a/vlib/v/type_resolver/comptime_resolver.v
+++ b/vlib/v/type_resolver/comptime_resolver.v
@@ -76,6 +76,10 @@ pub fn (t &ResolverInfo) get_ct_type_var(node ast.Expr) ast.ComptimeVarKind {
 		}
 	} else if node is ast.IndexExpr {
 		return t.get_ct_type_var(node.left)
+	} else if node is ast.InfixExpr {
+		return t.get_ct_type_var(node.left)
+	} else if node is ast.ParExpr {
+		return t.get_ct_type_var(node.expr)
 	}
 	return .no_comptime
 }