mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
cgen: -autofree fixes for []string{} having literals, comming from defailt string stuct field values
This commit is contained in:
parent
7101d53d74
commit
8abfe2f5a2
@ -62,10 +62,13 @@ fn new_aints(ovals []int, extreme_mins int, extreme_maxs int) Aints {
|
|||||||
mut imin := math.max_i32
|
mut imin := math.max_i32
|
||||||
mut imax := -math.max_i32
|
mut imax := -math.max_i32
|
||||||
// discard the extremes:
|
// discard the extremes:
|
||||||
mut vals := ovals.clone()
|
mut vals := []int{}
|
||||||
|
for x in ovals {
|
||||||
|
vals << x
|
||||||
|
}
|
||||||
vals.sort()
|
vals.sort()
|
||||||
if vals.len > extreme_mins + extreme_maxs {
|
if vals.len > extreme_mins + extreme_maxs {
|
||||||
vals = vals[extreme_mins..vals.len - extreme_maxs]
|
vals = vals[extreme_mins..vals.len - extreme_maxs].clone()
|
||||||
} else {
|
} else {
|
||||||
vals = []
|
vals = []
|
||||||
}
|
}
|
||||||
@ -152,7 +155,10 @@ fn (mut context Context) parse_options() {
|
|||||||
exit(1)
|
exit(1)
|
||||||
}
|
}
|
||||||
context.commands = context.expand_all_commands(commands)
|
context.commands = context.expand_all_commands(commands)
|
||||||
context.results = []CmdResult{len: context.commands.len, init: CmdResult{}}
|
context.results = []CmdResult{len: context.commands.len, cap: 100, init: CmdResult{
|
||||||
|
outputs: []string{cap: 1000}
|
||||||
|
timings: []int{cap: 1000}
|
||||||
|
}}
|
||||||
if context.use_newline {
|
if context.use_newline {
|
||||||
context.cline = '\n'
|
context.cline = '\n'
|
||||||
context.cgoback = '\n'
|
context.cgoback = '\n'
|
||||||
@ -170,7 +176,8 @@ fn (mut context Context) expand_all_commands(commands []string) []string {
|
|||||||
mut all_commands := []string{}
|
mut all_commands := []string{}
|
||||||
for cmd in commands {
|
for cmd in commands {
|
||||||
maincmd := context.cmd_template.replace('{T}', cmd)
|
maincmd := context.cmd_template.replace('{T}', cmd)
|
||||||
mut substituted_commands := [maincmd]
|
mut substituted_commands := []string{}
|
||||||
|
substituted_commands << maincmd
|
||||||
for paramk, paramlist in context.cmd_params {
|
for paramk, paramlist in context.cmd_params {
|
||||||
for paramv in paramlist {
|
for paramv in paramlist {
|
||||||
mut new_substituted_commands := []string{}
|
mut new_substituted_commands := []string{}
|
||||||
@ -178,10 +185,14 @@ fn (mut context Context) expand_all_commands(commands []string) []string {
|
|||||||
scmd := cscmd.replace(paramk, paramv)
|
scmd := cscmd.replace(paramk, paramv)
|
||||||
new_substituted_commands << scmd
|
new_substituted_commands << scmd
|
||||||
}
|
}
|
||||||
substituted_commands << new_substituted_commands
|
for sc in new_substituted_commands {
|
||||||
|
substituted_commands << sc
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
all_commands << substituted_commands
|
for sc in substituted_commands {
|
||||||
|
all_commands << sc
|
||||||
|
}
|
||||||
}
|
}
|
||||||
mut unique := map[string]int{}
|
mut unique := map[string]int{}
|
||||||
for x in all_commands {
|
for x in all_commands {
|
||||||
@ -228,8 +239,10 @@ fn (mut context Context) run() {
|
|||||||
eprintln('${i:10} non 0 exit code for cmd: $cmd')
|
eprintln('${i:10} non 0 exit code for cmd: $cmd')
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
context.results[icmd].outputs << res.output.trim_right('\r\n').replace('\r\n',
|
trimed_output := res.output.trim_right('\r\n')
|
||||||
'\n').split('\n')
|
trimed_normalized := trimed_output.replace('\r\n', '\n')
|
||||||
|
lines := trimed_normalized.split('\n')
|
||||||
|
context.results[icmd].outputs << lines
|
||||||
context.results[icmd].timings << duration
|
context.results[icmd].timings << duration
|
||||||
sum += duration
|
sum += duration
|
||||||
runs++
|
runs++
|
||||||
@ -296,10 +309,12 @@ fn (mut context Context) show_diff_summary() {
|
|||||||
println('Summary (commands are ordered by ascending mean time), after $context.series series of $context.count repetitions:')
|
println('Summary (commands are ordered by ascending mean time), after $context.series series of $context.count repetitions:')
|
||||||
base := context.results[0].atiming.average
|
base := context.results[0].atiming.average
|
||||||
mut first_cmd_percentage := f64(100.0)
|
mut first_cmd_percentage := f64(100.0)
|
||||||
|
mut first_marker := ''
|
||||||
for i, r in context.results {
|
for i, r in context.results {
|
||||||
|
first_marker = ' '
|
||||||
cpercent := (r.atiming.average / base) * 100 - 100
|
cpercent := (r.atiming.average / base) * 100 - 100
|
||||||
first_marker := if r.icmd == 0 { util.bold('>') } else { ' ' }
|
|
||||||
if r.icmd == 0 {
|
if r.icmd == 0 {
|
||||||
|
first_marker = util.bold('>')
|
||||||
first_cmd_percentage = cpercent
|
first_cmd_percentage = cpercent
|
||||||
}
|
}
|
||||||
println(' $first_marker${(i + 1):3} | ${cpercent:5.1f}% slower | ${r.cmd:-57s} | $r.atiming')
|
println(' $first_marker${(i + 1):3} | ${cpercent:5.1f}% slower | ${r.cmd:-57s} | $r.atiming')
|
||||||
|
@ -5715,7 +5715,7 @@ fn (mut g Gen) type_default(typ_ table.Type) string {
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
match sym.name {
|
match sym.name {
|
||||||
'string' { return '(string){.str=(byteptr)""}' }
|
'string' { return '(string){.str=(byteptr)"", .is_lit=1}' }
|
||||||
'rune' { return '0' }
|
'rune' { return '0' }
|
||||||
else {}
|
else {}
|
||||||
}
|
}
|
||||||
|
@ -478,9 +478,10 @@ fn (mut g Gen) method_call(node ast.CallExpr) {
|
|||||||
if node.receiver_type == 0 {
|
if node.receiver_type == 0 {
|
||||||
g.checker_bug('CallExpr.receiver_type is 0 in method_call', node.pos)
|
g.checker_bug('CallExpr.receiver_type is 0 in method_call', node.pos)
|
||||||
}
|
}
|
||||||
typ_sym := g.table.get_type_symbol(g.unwrap_generic(node.receiver_type))
|
unwrapped_rec_type := g.unwrap_generic(node.receiver_type)
|
||||||
mut receiver_type_name := util.no_dots(g.cc_type(g.unwrap_generic(node.receiver_type),
|
typ_sym := g.table.get_type_symbol(unwrapped_rec_type)
|
||||||
false))
|
rec_cc_type := g.cc_type(unwrapped_rec_type, false)
|
||||||
|
mut receiver_type_name := util.no_dots(rec_cc_type)
|
||||||
if typ_sym.kind == .interface_ && (typ_sym.info as table.Interface).defines_method(node.name) {
|
if typ_sym.kind == .interface_ && (typ_sym.info as table.Interface).defines_method(node.name) {
|
||||||
// Speaker_name_table[s._interface_idx].speak(s._object)
|
// Speaker_name_table[s._interface_idx].speak(s._object)
|
||||||
$if debug_interface_method_call ? {
|
$if debug_interface_method_call ? {
|
||||||
@ -578,6 +579,10 @@ fn (mut g Gen) method_call(node ast.CallExpr) {
|
|||||||
// && rec_sym.name == 'array' && receiver_name.starts_with('array') {
|
// && rec_sym.name == 'array' && receiver_name.starts_with('array') {
|
||||||
// `array_byte_clone` => `array_clone`
|
// `array_byte_clone` => `array_clone`
|
||||||
receiver_type_name = 'array'
|
receiver_type_name = 'array'
|
||||||
|
if false && node.name == 'free' && typ_sym.has_method(node.name) {
|
||||||
|
// TODO: allow for more specific overrides of array .free() like `pub fn (x []string) free() {`
|
||||||
|
receiver_type_name = g.typ(unwrapped_rec_type).trim('*')
|
||||||
|
}
|
||||||
if node.name in ['last', 'first', 'pop'] {
|
if node.name in ['last', 'first', 'pop'] {
|
||||||
return_type_str := g.typ(node.return_type)
|
return_type_str := g.typ(node.return_type)
|
||||||
has_cast = true
|
has_cast = true
|
||||||
|
Loading…
Reference in New Issue
Block a user