string: is_lit
							parent
							
								
									1991220797
								
							
						
					
					
						commit
						8cfb2ad6c9
					
				|  | @ -43,6 +43,7 @@ NB: A V string should be/is immutable from the point of view of | |||
| 
 | ||||
| 
 | ||||
| pub struct string { | ||||
| 	is_lit bool | ||||
| pub: | ||||
| 	str byteptr // points to a C style 0 terminated string of bytes.
 | ||||
| 	len int // the length of the .str field, excluding the ending 0 byte. It is always equal to strlen(.str).
 | ||||
|  | @ -104,6 +105,15 @@ pub fn tos3(s charptr) string { | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| pub fn tos_lit(s charptr) string { | ||||
| 	return string{ | ||||
| 		str: byteptr(s) | ||||
| 		len: C.strlen(s) | ||||
| 		is_lit:true | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| // string.clone_static returns an independent copy of a given array
 | ||||
| // It should be used only in -autofree generated code.
 | ||||
| fn (a string) clone_static() string { | ||||
|  | @ -1172,6 +1182,7 @@ pub fn (c byte) is_letter() bool { | |||
| } | ||||
| 
 | ||||
| pub fn (s &string) free() { | ||||
| 	if s.is_lit {return} | ||||
| 	free(s.str) | ||||
| } | ||||
| 
 | ||||
|  |  | |||
|  | @ -1061,7 +1061,6 @@ fn (g &Gen) autofree_variable(v ast.Var) string { | |||
| 	} | ||||
| 	if sym.kind == .string { | ||||
| 		// Don't free simple string literals.
 | ||||
| 		t := typeof(v.expr) | ||||
| 		match v.expr { | ||||
| 			ast.StringLiteral { | ||||
| 				return '// str literal\n' | ||||
|  | @ -1069,6 +1068,7 @@ fn (g &Gen) autofree_variable(v ast.Var) string { | |||
| 			else { | ||||
| 				// NOTE/TODO: assign_stmt multi returns variables have no expr
 | ||||
| 				// since the type comes from the called fns return type
 | ||||
| 				t := typeof(v.expr) | ||||
| 				return '// other ' + t + '\n' | ||||
| 			} | ||||
| 		} | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue