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 {
|
pub struct string {
|
||||||
|
is_lit bool
|
||||||
pub:
|
pub:
|
||||||
str byteptr // points to a C style 0 terminated string of bytes.
|
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).
|
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
|
// string.clone_static returns an independent copy of a given array
|
||||||
// It should be used only in -autofree generated code.
|
// It should be used only in -autofree generated code.
|
||||||
fn (a string) clone_static() string {
|
fn (a string) clone_static() string {
|
||||||
|
@ -1172,6 +1182,7 @@ pub fn (c byte) is_letter() bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn (s &string) free() {
|
pub fn (s &string) free() {
|
||||||
|
if s.is_lit {return}
|
||||||
free(s.str)
|
free(s.str)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1061,7 +1061,6 @@ fn (g &Gen) autofree_variable(v ast.Var) string {
|
||||||
}
|
}
|
||||||
if sym.kind == .string {
|
if sym.kind == .string {
|
||||||
// Don't free simple string literals.
|
// Don't free simple string literals.
|
||||||
t := typeof(v.expr)
|
|
||||||
match v.expr {
|
match v.expr {
|
||||||
ast.StringLiteral {
|
ast.StringLiteral {
|
||||||
return '// str literal\n'
|
return '// str literal\n'
|
||||||
|
@ -1069,6 +1068,7 @@ fn (g &Gen) autofree_variable(v ast.Var) string {
|
||||||
else {
|
else {
|
||||||
// NOTE/TODO: assign_stmt multi returns variables have no expr
|
// NOTE/TODO: assign_stmt multi returns variables have no expr
|
||||||
// since the type comes from the called fns return type
|
// since the type comes from the called fns return type
|
||||||
|
t := typeof(v.expr)
|
||||||
return '// other ' + t + '\n'
|
return '// other ' + t + '\n'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue