File tree Expand file tree Collapse file tree 3 files changed +34
-30
lines changed
Expand file tree Collapse file tree 3 files changed +34
-30
lines changed Original file line number Diff line number Diff line change @@ -341,15 +341,13 @@ fn (mut g Gen) assign_stmt(node_ ast.AssignStmt) {
341341 }
342342 g.assign_ct_type = var_type
343343 }
344- } else if val is ast.IndexExpr {
345- if val.left is ast.Ident && g.type_resolver.is_generic_param_var (val.left) {
346- ctyp := g.unwrap_generic (g.get_gn_var_type (val.left))
347- if ctyp != ast.void_type {
348- var_type = ctyp
349- val_type = var_type
350- left.obj.typ = var_type
351- g.assign_ct_type = var_type
352- }
344+ } else if val is ast.IndexExpr && (val.left is ast.Ident && val.left.ct_expr) {
345+ ctyp := g.unwrap_generic (g.type_resolver.get_type (val))
346+ if ctyp != ast.void_type {
347+ var_type = ctyp
348+ val_type = var_type
349+ left.obj.typ = var_type
350+ g.assign_ct_type = var_type
353351 }
354352 } else if left.obj.ct_type_var == .generic_var && val is ast.CallExpr {
355353 if val.return_type_generic != 0 && val.return_type_generic.has_flag (.generic) {
Original file line number Diff line number Diff line change @@ -1353,27 +1353,6 @@ fn (mut g Gen) gen_to_str_method_call(node ast.CallExpr) bool {
13531353 return false
13541354}
13551355
1356- fn (mut g Gen) get_gn_var_type (var ast.Ident) ast.Type {
1357- if g.cur_fn != unsafe { nil } && g.cur_fn.generic_names.len > 0 {
1358- for k, cur_param in g.cur_fn.params {
1359- if (k == 0 && g.cur_fn.is_method) || ! cur_param.typ.has_flag (.generic)
1360- || var.name != cur_param.name {
1361- continue
1362- }
1363- mut typ := cur_param.typ
1364- mut cparam_type_sym := g.table.sym (g.unwrap_generic (typ))
1365-
1366- if cparam_type_sym.kind == .array {
1367- typ = g.unwrap_generic ((cparam_type_sym.info as ast.Array ).elem_type)
1368- } else if cparam_type_sym.kind == .array_fixed {
1369- typ = g.unwrap_generic ((cparam_type_sym.info as ast.ArrayFixed ).elem_type)
1370- }
1371- return typ
1372- }
1373- }
1374- return ast.void_type
1375- }
1376-
13771356// resolve_return_type resolves the generic return type of CallExpr
13781357fn (mut g Gen) resolve_return_type (node ast.CallExpr) ast.Type {
13791358 if node.is_method {
Original file line number Diff line number Diff line change 1+ module main
2+
3+ fn validate [T](values map [string ]T, rules map [string ][]string ) ! {
4+ for key, _ in rules {
5+ value := values[key]!
6+ assert typeof (value).name == T.name
7+ }
8+ }
9+
10+ fn test_main () {
11+ validate ({
12+ 'age' : 31
13+ }, {
14+ 'age' : [
15+ 'required' ,
16+ ]
17+ }) or { assert false }
18+
19+ validate ({
20+ 'foo' : 'bar'
21+ }, {
22+ 'foo' : [
23+ 'required' ,
24+ ]
25+ }) or { assert false }
26+ assert true
27+ }
You can’t perform that action at this time.
0 commit comments