v2: parser - use defer to make sure scope is closed for filter
							parent
							
								
									06fc8a830b
								
							
						
					
					
						commit
						cfbd8ab7e7
					
				|  | @ -868,12 +868,6 @@ fn (p mut Parser) index_expr(left ast.Expr) ast.IndexExpr { | |||
| } | ||||
| 
 | ||||
| fn (p mut Parser) filter(typ table.Type) { | ||||
| 	/* | ||||
| 	p.table.register_var(table.Var{ | ||||
| 		name: 'it' | ||||
| 		typ: typ | ||||
| 	}) | ||||
| 	*/ | ||||
| 	p.scope.register_var(ast.VarDecl{ | ||||
| 		name: 'it' | ||||
| 		typ: typ | ||||
|  | @ -886,6 +880,9 @@ fn (p mut Parser) dot_expr(left ast.Expr, left_type table.Type) ast.Expr { | |||
| 	if field_name == 'filter' { | ||||
| 		p.open_scope() | ||||
| 		p.filter(left_type) | ||||
| 		defer { | ||||
| 			p.close_scope() | ||||
| 		} | ||||
| 	} | ||||
| 	// Method call
 | ||||
| 	if p.tok.kind == .lpar { | ||||
|  | @ -903,8 +900,6 @@ fn (p mut Parser) dot_expr(left ast.Expr, left_type table.Type) ast.Expr { | |||
| 		} | ||||
| 		mut node := ast.Expr{} | ||||
| 		node = mcall_expr | ||||
| 		// typ := p.add_unresolved('${left_type.typ.name}.${field_name}()', mcall_expr)
 | ||||
| 		// typ := p.add_unresolved('${table.type_idx(left_type)}.${field_name}()', mcall_expr)
 | ||||
| 		return node | ||||
| 	} | ||||
| 	sel_expr := ast.SelectorExpr{ | ||||
|  | @ -912,13 +907,8 @@ fn (p mut Parser) dot_expr(left ast.Expr, left_type table.Type) ast.Expr { | |||
| 		field: field_name | ||||
| 		pos: p.tok.position() | ||||
| 	} | ||||
| 	// typ := p.add_unresolved('${left_type.typ.name}.$field_name', sel_expr)
 | ||||
| 	// typ := p.add_unresolved('${table.type_idx(left_type)}.$field_name', sel_expr)
 | ||||
| 	mut node := ast.Expr{} | ||||
| 	node = sel_expr | ||||
| 	if field_name == 'filter' { | ||||
| 		p.close_scope() | ||||
| 	} | ||||
| 	return node | ||||
| } | ||||
| 
 | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue