cgen: do not free strings in const decls
							parent
							
								
									6dad3cc018
								
							
						
					
					
						commit
						013a4fc0f6
					
				| 
						 | 
				
			
			@ -83,7 +83,7 @@ mut:
 | 
			
		|||
	attrs                []string // attributes before next decl stmt
 | 
			
		||||
	is_builtin_mod       bool
 | 
			
		||||
	hotcode_fn_names     []string
 | 
			
		||||
	cur_fn               &ast.FnDecl = 0
 | 
			
		||||
	//cur_fn               ast.FnDecl
 | 
			
		||||
	cur_generic_type     table.Type // `int`, `string`, etc in `foo<T>()`
 | 
			
		||||
	sql_i                int
 | 
			
		||||
	sql_stmt_name        string
 | 
			
		||||
| 
						 | 
				
			
			@ -93,6 +93,7 @@ mut:
 | 
			
		|||
	strs_to_free         string
 | 
			
		||||
	inside_call          bool
 | 
			
		||||
	has_main             bool
 | 
			
		||||
	inside_const bool
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
const (
 | 
			
		||||
| 
						 | 
				
			
			@ -2517,6 +2518,11 @@ fn (mut g Gen) return_statement(node ast.Return) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
fn (mut g Gen) const_decl(node ast.ConstDecl) {
 | 
			
		||||
	g.inside_const = true
 | 
			
		||||
	defer {
 | 
			
		||||
		g.inside_const = false
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for field in node.fields {
 | 
			
		||||
		name := c_name(field.name)
 | 
			
		||||
		// TODO hack. Cut the generated value and paste it into definitions.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -28,6 +28,7 @@ fn (mut g Gen) gen_fn_decl(it ast.FnDecl) {
 | 
			
		|||
		g.cur_generic_type = 0
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	//g.cur_fn = it
 | 
			
		||||
	fn_start_pos := g.out.len
 | 
			
		||||
	msvc_attrs := g.write_fn_attrs()
 | 
			
		||||
	// Live
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -135,7 +135,6 @@ fn (mut g Gen) string_literal(node ast.StringLiteral) {
 | 
			
		|||
		// g.write('tos4("$escaped_val", $it.val.len)')
 | 
			
		||||
		// g.write('_SLIT("$escaped_val")')
 | 
			
		||||
		g.write('tos_lit("$escaped_val")')
 | 
			
		||||
		// g.write('tos_lit("$escaped_val")')
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -143,8 +142,9 @@ fn (mut g Gen) string_inter_literal(node ast.StringInterLiteral) {
 | 
			
		|||
	mut cur_line := ''
 | 
			
		||||
	mut tmp := ''
 | 
			
		||||
	free := g.pref.autofree && g.inside_call && !g.inside_return &&
 | 
			
		||||
		g.inside_ternary == 0 && g.cur_fn != 0 &&
 | 
			
		||||
		g.cur_fn.name != ''
 | 
			
		||||
		g.inside_ternary == 0 && !g.inside_const 
 | 
			
		||||
		//&& g.cur_fn != 0 &&
 | 
			
		||||
		//g.cur_fn.name != ''
 | 
			
		||||
	if free {
 | 
			
		||||
		// Save the string expr in a temporary variable, so that it can be removed after the call.
 | 
			
		||||
		tmp = g.new_tmp_var()
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue