diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index 8111c287e9..bcd0acd844 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -1028,8 +1028,7 @@ pub fn (mut c Checker) call_expr(mut call_expr ast.CallExpr) table.Type { // Now call `call_method` or `call_fn` for specific checks. typ := if call_expr.is_method { c.call_method(mut call_expr) } else { c.call_fn(mut call_expr) } // autofree: mark args that have to be freed (after saving them in tmp exprs) - free_tmp_arg_vars := c.pref.autofree && c.pref.experimental && !c.is_builtin_mod && - call_expr.args.len > 0 && !call_expr.args[0].typ.has_flag(.optional) + free_tmp_arg_vars := c.pref.autofree && !c.is_builtin_mod && call_expr.args.len > 0 && !call_expr.args[0].typ.has_flag(.optional) if free_tmp_arg_vars && !c.inside_const { for i, arg in call_expr.args { if arg.typ != table.string_type { diff --git a/vlib/v/gen/cgen.v b/vlib/v/gen/cgen.v index 592703efb7..4dfc4013b0 100644 --- a/vlib/v/gen/cgen.v +++ b/vlib/v/gen/cgen.v @@ -747,7 +747,7 @@ fn (mut g Gen) stmts_with_tmp_var(stmts []ast.Stmt, tmp_var string) { g.write('') g.write(')') } - if g.pref.autofree && g.pref.experimental && !g.inside_vweb_tmpl && stmts.len > 0 { + if g.pref.autofree && !g.inside_vweb_tmpl && stmts.len > 0 { // use the first stmt to get the scope stmt := stmts[0] // stmt := stmts[stmts.len-1] diff --git a/vlib/v/gen/fn.v b/vlib/v/gen/fn.v index c78f47171a..9fdf71dc88 100644 --- a/vlib/v/gen/fn.v +++ b/vlib/v/gen/fn.v @@ -638,8 +638,7 @@ fn (mut g Gen) autofree_call_pregen(node ast.CallExpr) { // g.writeln('// autofree_call_pregen()') // Create a temporary var before fn call for each argument in order to free it (only if it's a complex expression, // like `foo(get_string())` or `foo(a + b)` - mut free_tmp_arg_vars := g.autofree && g.pref.experimental && !g.is_builtin_mod && - node.args.len > 0 && !node.args[0].typ.has_flag(.optional) // TODO copy pasta checker.v + mut free_tmp_arg_vars := g.autofree && !g.is_builtin_mod && node.args.len > 0 && !node.args[0].typ.has_flag(.optional) // TODO copy pasta checker.v if !free_tmp_arg_vars { return } @@ -778,8 +777,8 @@ fn (mut g Gen) call_args(node ast.CallExpr) { if gen_vargs && i == expected_types.len - 1 { break } - use_tmp_var_autofree := g.autofree && g.pref.experimental && arg.typ == table.string_type && - arg.is_tmp_autofree && !g.inside_const + use_tmp_var_autofree := g.autofree && arg.typ == table.string_type && arg.is_tmp_autofree && + !g.inside_const // g.write('/* af=$arg.is_tmp_autofree */') mut is_interface := false // some c fn definitions dont have args (cfns.v) or are not updated in checker