cgen: fix string frees in calls
							parent
							
								
									ab37dcaa9c
								
							
						
					
					
						commit
						77e56aa3f9
					
				|  | @ -92,6 +92,7 @@ mut: | |||
| 	inside_vweb_tmpl     bool | ||||
| 	inside_return        bool | ||||
| 	strs_to_free         string | ||||
| 	inside_call          bool | ||||
| } | ||||
| 
 | ||||
| const ( | ||||
|  | @ -598,7 +599,7 @@ fn (mut g Gen) stmt(node ast.Stmt) { | |||
| 	defer { | ||||
| 		// If have temporary string exprs to free after this statement, do it. e.g.:
 | ||||
| 		// `foo('a' + 'b')` => `tmp := 'a' + 'b'; foo(tmp); string_free(&tmp);`
 | ||||
| 		if false && g.pref.autofree { | ||||
| 		if g.pref.autofree { | ||||
| 			if g.strs_to_free != '' { | ||||
| 				g.writeln(g.strs_to_free) | ||||
| 				g.strs_to_free = '' | ||||
|  |  | |||
|  | @ -313,6 +313,8 @@ fn (mut g Gen) call_expr(node ast.CallExpr) { | |||
| 	if node.should_be_skipped { | ||||
| 		return | ||||
| 	} | ||||
| 	g.inside_call = true | ||||
| 	defer {g.inside_call = false} | ||||
| 	gen_or := node.or_block.kind != .absent | ||||
| 	cur_line := if gen_or && g.is_assign_rhs { | ||||
| 		line := g.go_before_stmt(0) | ||||
|  |  | |||
|  | @ -142,7 +142,7 @@ fn (mut g Gen) string_literal(node ast.StringLiteral) { | |||
| fn (mut g Gen) string_inter_literal(node ast.StringInterLiteral) { | ||||
| 	mut cur_line := '' | ||||
| 	mut tmp := '' | ||||
| 	free := g.pref.autofree && !g.inside_return && | ||||
| 	free := g.pref.autofree && g.inside_call && !g.inside_return && | ||||
| 		g.inside_ternary == 0 && g.cur_fn != 0 && | ||||
| 		g.cur_fn.name != '' | ||||
| 	if free { | ||||
|  | @ -157,7 +157,7 @@ fn (mut g Gen) string_inter_literal(node ast.StringInterLiteral) { | |||
| 		*/ | ||||
| 		// g.insert_before_stmt('// str tmp var\nstring $tmp = ')
 | ||||
| 		cur_line = g.go_before_stmt(0) | ||||
| 		g.writeln('// free _str') | ||||
| 		g.writeln('// free _str2 $g.inside_call') | ||||
| 		g.write('string $tmp = ') | ||||
| 		g.strs_to_free += 'string_free(&$tmp); /*tmp str*/' | ||||
| 	} | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue