mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
cgen: fix sorting of shared array fields (fix #15244)
This commit is contained in:
parent
857e047d01
commit
45c601b79c
@ -519,8 +519,15 @@ fn (mut g Gen) gen_array_sort(node ast.CallExpr) {
|
||||
}
|
||||
|
||||
fn (mut g Gen) gen_array_sort_call(node ast.CallExpr, compare_fn string) {
|
||||
deref_field := if node.left_type.is_ptr() || node.left_type.is_pointer() { '->' } else { '.' }
|
||||
// eprintln('> qsort: pointer $node.left_type | deref: `$deref`')
|
||||
mut deref_field := if node.left_type.is_ptr() || node.left_type.is_pointer() {
|
||||
'->'
|
||||
} else {
|
||||
'.'
|
||||
}
|
||||
if node.left_type.has_flag(.shared_f) {
|
||||
deref_field += 'val.'
|
||||
}
|
||||
// eprintln('> qsort: pointer $node.left_type | deref_field: `$deref_field`')
|
||||
g.empty_line = true
|
||||
g.write('qsort(')
|
||||
g.expr(node.left)
|
||||
|
34
vlib/v/tests/shared_array_sort_test.v
Normal file
34
vlib/v/tests/shared_array_sort_test.v
Normal file
@ -0,0 +1,34 @@
|
||||
module main
|
||||
|
||||
import time
|
||||
|
||||
struct Alarms {
|
||||
mut:
|
||||
times shared []time.Time
|
||||
}
|
||||
|
||||
fn (alarms Alarms) add(alarm time.Time) {
|
||||
lock alarms.times {
|
||||
alarms.times << alarm
|
||||
alarms.times.sort(a < b)
|
||||
}
|
||||
}
|
||||
|
||||
fn test_sorting_shared_arrays() ? {
|
||||
alarms := Alarms{}
|
||||
utc := time.utc()
|
||||
alarms.add(utc)
|
||||
alarms.add(time.parse_iso8601('2022-03-01')?)
|
||||
alarms.add(time.parse_iso8601('3001-03-01')?)
|
||||
alarms.add(time.parse_iso8601('2002-03-01')?)
|
||||
alarms.add(time.parse_iso8601('3002-03-01')?)
|
||||
alarms.add(time.parse_iso8601('2021-03-01')?)
|
||||
println(alarms)
|
||||
lock alarms.times {
|
||||
assert alarms.times.len == 6
|
||||
assert alarms.times[0].year == 2002
|
||||
assert alarms.times.pop().year == 3002
|
||||
assert alarms.times.pop().year == 3001
|
||||
assert alarms.times.len == 4
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user