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 }