parser/cgen: autofree - move branch_parent_pos to cgen.
							parent
							
								
									d7c057840a
								
							
						
					
					
						commit
						7733834751
					
				| 
						 | 
				
			
			@ -286,10 +286,9 @@ pub mut:
 | 
			
		|||
// break, continue
 | 
			
		||||
pub struct BranchStmt {
 | 
			
		||||
pub:
 | 
			
		||||
	kind       token.Kind
 | 
			
		||||
	label      string
 | 
			
		||||
	pos        token.Position
 | 
			
		||||
	parent_pos int
 | 
			
		||||
	kind  token.Kind
 | 
			
		||||
	label string
 | 
			
		||||
	pos   token.Position
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub struct CallExpr {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -126,6 +126,7 @@ mut:
 | 
			
		|||
	// sum type deref needs to know which index to deref because unions take care of the correct field
 | 
			
		||||
	aggregate_type_idx               int
 | 
			
		||||
	returned_var_name                string // to detect that a var doesn't need to be freed since it's being returned
 | 
			
		||||
	branch_parent_pos                int    // used in BranchStmt (continue/break) for autofree stop position
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
| 
						 | 
				
			
			@ -853,7 +854,7 @@ fn (mut g Gen) stmt(node ast.Stmt) {
 | 
			
		|||
				if g.pref.autofree && !g.is_builtin_mod {
 | 
			
		||||
					g.writeln('// free before continue/break')
 | 
			
		||||
					g.autofree_scope_vars_stop(node.pos.pos - 1, node.pos.line_nr, true,
 | 
			
		||||
						node.parent_pos)
 | 
			
		||||
						g.branch_parent_pos)
 | 
			
		||||
				}
 | 
			
		||||
				g.writeln('$node.kind;')
 | 
			
		||||
			}
 | 
			
		||||
| 
						 | 
				
			
			@ -1008,6 +1009,8 @@ fn (mut g Gen) stmt(node ast.Stmt) {
 | 
			
		|||
			g.for_in(node)
 | 
			
		||||
		}
 | 
			
		||||
		ast.ForStmt {
 | 
			
		||||
			prev_branch_parent_pos := g.branch_parent_pos
 | 
			
		||||
			g.branch_parent_pos = node.pos.pos
 | 
			
		||||
			g.write_v_source_line_info(node.pos)
 | 
			
		||||
			g.is_vlines_enabled = false
 | 
			
		||||
			if node.label.len > 0 {
 | 
			
		||||
| 
						 | 
				
			
			@ -1031,6 +1034,7 @@ fn (mut g Gen) stmt(node ast.Stmt) {
 | 
			
		|||
			if node.label.len > 0 {
 | 
			
		||||
				g.writeln('${node.label}__break: {}')
 | 
			
		||||
			}
 | 
			
		||||
			g.branch_parent_pos = prev_branch_parent_pos
 | 
			
		||||
		}
 | 
			
		||||
		ast.GlobalDecl {
 | 
			
		||||
			g.global_decl(node)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -9,11 +9,6 @@ import v.table
 | 
			
		|||
fn (mut p Parser) for_stmt() ast.Stmt {
 | 
			
		||||
	p.check(.key_for)
 | 
			
		||||
	pos := p.tok.position()
 | 
			
		||||
	prev_branch_parent_pos := p.branch_parent_pos
 | 
			
		||||
	p.branch_parent_pos = pos.pos
 | 
			
		||||
	defer {
 | 
			
		||||
		p.branch_parent_pos = prev_branch_parent_pos
 | 
			
		||||
	}
 | 
			
		||||
	p.open_scope()
 | 
			
		||||
	p.inside_for = true
 | 
			
		||||
	if p.tok.kind == .key_match {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -60,7 +60,6 @@ mut:
 | 
			
		|||
	vet_errors        []string
 | 
			
		||||
	cur_fn_name       string
 | 
			
		||||
	in_generic_params bool // indicates if parsing between `<` and `>` of a method/function
 | 
			
		||||
	branch_parent_pos int // used in BranchStmt (continue/break) autofree stop position
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// for tests
 | 
			
		||||
| 
						 | 
				
			
			@ -691,7 +690,6 @@ pub fn (mut p Parser) stmt(is_top_level bool) ast.Stmt {
 | 
			
		|||
				kind: tok.kind
 | 
			
		||||
				label: label
 | 
			
		||||
				pos: tok.position()
 | 
			
		||||
				parent_pos: p.branch_parent_pos
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		.key_unsafe {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue