mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
checker: restrict numeric promotions to cases where no data is lost
This commit is contained in:
@@ -123,22 +123,22 @@ fn (mut d DenseArray) push(key string, value voidptr) u32 {
|
||||
if d.cap == d.size {
|
||||
d.cap += d.cap >> 3
|
||||
d.keys = &string(C.realloc(d.keys, sizeof(string) * d.cap))
|
||||
d.values = C.realloc(d.values, d.value_bytes * d.cap)
|
||||
d.values = C.realloc(d.values, u32(d.value_bytes) * d.cap)
|
||||
}
|
||||
push_index := d.size
|
||||
d.keys[push_index] = key
|
||||
C.memcpy(d.values + push_index * d.value_bytes, value, d.value_bytes)
|
||||
C.memcpy(d.values + push_index * u32(d.value_bytes), value, d.value_bytes)
|
||||
d.size++
|
||||
return push_index
|
||||
}
|
||||
|
||||
fn (d DenseArray) get(i int) voidptr {
|
||||
$if !no_bounds_checking? {
|
||||
if i < 0 || i >= d.size {
|
||||
if i < 0 || i >= int(d.size) {
|
||||
panic('DenseArray.get: index out of range (i == $i, d.len == $d.size)')
|
||||
}
|
||||
}
|
||||
return byteptr(d.keys) + i * sizeof(string)
|
||||
return byteptr(d.keys) + i * int(sizeof(string))
|
||||
}
|
||||
|
||||
// Move all zeros to the end of the array
|
||||
@@ -153,8 +153,8 @@ fn (mut d DenseArray) zeros_to_end() {
|
||||
d.keys[count] = d.keys[i]
|
||||
d.keys[i] = tmp_key
|
||||
// swap values (TODO: optimize)
|
||||
C.memcpy(tmp_value, d.values + count * d.value_bytes, d.value_bytes)
|
||||
C.memcpy(d.values + count * d.value_bytes, d.values + i * d.value_bytes, d.value_bytes)
|
||||
C.memcpy(tmp_value, d.values + count * u32(d.value_bytes), d.value_bytes)
|
||||
C.memcpy(d.values + count * u32(d.value_bytes), d.values + i * d.value_bytes, d.value_bytes)
|
||||
C.memcpy(d.values + i * d.value_bytes, tmp_value, d.value_bytes)
|
||||
count++
|
||||
}
|
||||
@@ -164,7 +164,7 @@ fn (mut d DenseArray) zeros_to_end() {
|
||||
d.size = count
|
||||
d.cap = if count < 8 { u32(8) } else { count }
|
||||
d.keys = &string(C.realloc(d.keys, sizeof(string) * d.cap))
|
||||
d.values = C.realloc(d.values, d.value_bytes * d.cap)
|
||||
d.values = C.realloc(d.values, u32(d.value_bytes) * d.cap)
|
||||
}
|
||||
|
||||
pub struct map {
|
||||
@@ -280,7 +280,7 @@ fn (mut m map) set(k string, value voidptr) {
|
||||
for meta == m.metas[index] {
|
||||
kv_index := m.metas[index + 1]
|
||||
if fast_string_eq(key, m.key_values.keys[kv_index]) {
|
||||
C.memcpy(m.key_values.values + kv_index * m.value_bytes , value, m.value_bytes)
|
||||
C.memcpy(m.key_values.values + kv_index * u32(m.value_bytes), value, m.value_bytes)
|
||||
return
|
||||
}
|
||||
index += 2
|
||||
@@ -349,7 +349,7 @@ fn (m map) get3(key string, zero voidptr) voidptr {
|
||||
if meta == m.metas[index] {
|
||||
kv_index := m.metas[index + 1]
|
||||
if fast_string_eq(key, m.key_values.keys[kv_index]) {
|
||||
return voidptr(m.key_values.values + kv_index * m.value_bytes)
|
||||
return voidptr(m.key_values.values + kv_index * u32(m.value_bytes))
|
||||
}
|
||||
}
|
||||
index += 2
|
||||
@@ -431,10 +431,10 @@ pub fn (d DenseArray) clone() DenseArray {
|
||||
size: d.size
|
||||
deletes: d.deletes
|
||||
keys: &string(malloc(d.cap * sizeof(string)))
|
||||
values: byteptr(malloc(d.cap * d.value_bytes))
|
||||
values: byteptr(malloc(d.cap * u32(d.value_bytes)))
|
||||
}
|
||||
C.memcpy(res.keys, d.keys, d.cap * sizeof(string))
|
||||
C.memcpy(res.values, d.values, d.cap * d.value_bytes)
|
||||
C.memcpy(res.values, d.values, d.cap * u32(d.value_bytes))
|
||||
return res
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user