pull/13636/head
			
			
		
		
							parent
							
								
									57c6454656
								
							
						
					
					
						commit
						6a3d34ae11
					
				| 
						 | 
					@ -1667,6 +1667,12 @@ pub fn (mut c Checker) selector_expr(mut node ast.SelectorExpr) ast.Type {
 | 
				
			||||||
	if sym.kind !in [.struct_, .aggregate, .interface_, .sum_type] {
 | 
						if sym.kind !in [.struct_, .aggregate, .interface_, .sum_type] {
 | 
				
			||||||
		if sym.kind != .placeholder {
 | 
							if sym.kind != .placeholder {
 | 
				
			||||||
			unwrapped_sym := c.table.sym(c.unwrap_generic(typ))
 | 
								unwrapped_sym := c.table.sym(c.unwrap_generic(typ))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								if unwrapped_sym.kind == .array_fixed && node.field_name == 'len' {
 | 
				
			||||||
 | 
									node.typ = ast.int_type
 | 
				
			||||||
 | 
									return ast.int_type
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			c.error('`$unwrapped_sym.name` has no property `$node.field_name`', node.pos)
 | 
								c.error('`$unwrapped_sym.name` has no property `$node.field_name`', node.pos)
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,38 @@
 | 
				
			||||||
 | 
					fn test_comptime_generic() {
 | 
				
			||||||
 | 
						a := [5]int{}
 | 
				
			||||||
 | 
						func1(&a)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[inline]
 | 
				
			||||||
 | 
					pub fn func1<T>(t &T) {
 | 
				
			||||||
 | 
						func2<T>(t)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[inline]
 | 
				
			||||||
 | 
					pub fn func2<T>(t &T) {
 | 
				
			||||||
 | 
						$if T is $Array {
 | 
				
			||||||
 | 
							unsafe {
 | 
				
			||||||
 | 
								for i in 0 .. t.len {
 | 
				
			||||||
 | 
									func2(&t[i])
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						} $else $if T is $Map {
 | 
				
			||||||
 | 
							// fake_map(t, df)
 | 
				
			||||||
 | 
						} $else $if T is $Struct {
 | 
				
			||||||
 | 
							$for f in T.fields {
 | 
				
			||||||
 | 
								$if f.typ is string {
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								// Dummy expression to generate and specify t.$(f.name)'s type
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// mut attrs := get_attrs(t.$(f.name), f)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								// if !attrs.skip() {
 | 
				
			||||||
 | 
								// 	fake_data_wdf(&(t.$(f.name)))
 | 
				
			||||||
 | 
								// }
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						} $else {
 | 
				
			||||||
 | 
							unsafe {
 | 
				
			||||||
 | 
								// *t = fake_primitive_value<T>(df) or { panic(err) }
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
		Reference in New Issue