mirror of
https://github.com/vlang/v.git
synced 2023-08-10 21:13:21 +03:00
checker: warn when casting a fixed array (use &arr[0]
instead) (#8787)
This commit is contained in:
parent
177c8bfc78
commit
4ccf991f61
@ -90,8 +90,8 @@ fn print_backtrace_skipping_top_frames_linux(skipframes int) bool {
|
|||||||
C.tcc_backtrace("Backtrace")
|
C.tcc_backtrace("Backtrace")
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
buffer := [100]byteptr{}
|
buffer := [100]voidptr{}
|
||||||
nr_ptrs := C.backtrace(voidptr(buffer), 100)
|
nr_ptrs := C.backtrace(&buffer[0], 100)
|
||||||
if nr_ptrs < 2 {
|
if nr_ptrs < 2 {
|
||||||
eprintln('C.backtrace returned less than 2 frames')
|
eprintln('C.backtrace returned less than 2 frames')
|
||||||
return false
|
return false
|
||||||
@ -117,8 +117,9 @@ fn print_backtrace_skipping_top_frames_linux(skipframes int) bool {
|
|||||||
buf := [1000]byte{}
|
buf := [1000]byte{}
|
||||||
mut output := ''
|
mut output := ''
|
||||||
unsafe {
|
unsafe {
|
||||||
for C.fgets(charptr(buf), 1000, f) != 0 {
|
bp := &buf[0]
|
||||||
output += tos(byteptr(buf), vstrlen(byteptr(buf)))
|
for C.fgets(charptr(bp), 1000, f) != 0 {
|
||||||
|
output += tos(bp, vstrlen(bp))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
output = output.trim_space() + ':'
|
output = output.trim_space() + ':'
|
||||||
|
@ -34,8 +34,7 @@ pub fn (mut con TcpConn) read_line() string {
|
|||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bufbp := byteptr(buf)
|
line = unsafe { tos_clone(&buf[0]) }
|
||||||
line = unsafe { tos_clone(bufbp) }
|
|
||||||
if eol_idx > 0 {
|
if eol_idx > 0 {
|
||||||
// At this point, we are sure that recv returned valid data,
|
// At this point, we are sure that recv returned valid data,
|
||||||
// that contains *at least* one line.
|
// that contains *at least* one line.
|
||||||
|
@ -93,8 +93,8 @@ pub fn ls(path string) ?[]string {
|
|||||||
if isnil(ent) {
|
if isnil(ent) {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
bptr := byteptr(ent.d_name)
|
|
||||||
unsafe {
|
unsafe {
|
||||||
|
bptr := byteptr(&ent.d_name[0])
|
||||||
if bptr[0] == 0 || (bptr[0] == `.` && bptr[1] == 0)
|
if bptr[0] == 0 || (bptr[0] == `.` && bptr[1] == 0)
|
||||||
|| (bptr[0] == `.` && bptr[1] == `.` && bptr[2] == 0) {
|
|| (bptr[0] == `.` && bptr[1] == `.` && bptr[2] == 0) {
|
||||||
continue
|
continue
|
||||||
@ -169,8 +169,8 @@ pub fn exec(cmd string) ?Result {
|
|||||||
buf := [4096]byte{}
|
buf := [4096]byte{}
|
||||||
mut res := strings.new_builder(1024)
|
mut res := strings.new_builder(1024)
|
||||||
unsafe {
|
unsafe {
|
||||||
for C.fgets(charptr(buf), 4096, f) != 0 {
|
bufbp := &buf[0]
|
||||||
bufbp := byteptr(buf)
|
for C.fgets(charptr(bufbp), 4096, f) != 0 {
|
||||||
res.write_bytes(bufbp, vstrlen(bufbp))
|
res.write_bytes(bufbp, vstrlen(bufbp))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -210,11 +210,11 @@ pub fn (mut c Command) read_line() string {
|
|||||||
buf := [4096]byte{}
|
buf := [4096]byte{}
|
||||||
mut res := strings.new_builder(1024)
|
mut res := strings.new_builder(1024)
|
||||||
unsafe {
|
unsafe {
|
||||||
for C.fgets(charptr(buf), 4096, c.f) != 0 {
|
bufbp := &buf[0]
|
||||||
bufbp := byteptr(buf)
|
for C.fgets(charptr(bufbp), 4096, c.f) != 0 {
|
||||||
len := vstrlen(bufbp)
|
len := vstrlen(bufbp)
|
||||||
for i in 0 .. len {
|
for i in 0 .. len {
|
||||||
if int(bufbp[i]) == `\n` {
|
if bufbp[i] == `\n` {
|
||||||
res.write_bytes(bufbp, i)
|
res.write_bytes(bufbp, i)
|
||||||
return res.str()
|
return res.str()
|
||||||
}
|
}
|
||||||
|
@ -102,12 +102,12 @@ pub fn ls(path string) ?[]string {
|
|||||||
// NOTE:TODO: once we have a way to convert utf16 wide character to utf8
|
// NOTE:TODO: once we have a way to convert utf16 wide character to utf8
|
||||||
// we should use FindFirstFileW and FindNextFileW
|
// we should use FindFirstFileW and FindNextFileW
|
||||||
h_find_files := C.FindFirstFile(path_files.to_wide(), voidptr(&find_file_data))
|
h_find_files := C.FindFirstFile(path_files.to_wide(), voidptr(&find_file_data))
|
||||||
first_filename := unsafe { string_from_wide(&u16(find_file_data.c_file_name)) }
|
first_filename := unsafe { string_from_wide(&find_file_data.c_file_name[0]) }
|
||||||
if first_filename != '.' && first_filename != '..' {
|
if first_filename != '.' && first_filename != '..' {
|
||||||
dir_files << first_filename
|
dir_files << first_filename
|
||||||
}
|
}
|
||||||
for C.FindNextFile(h_find_files, voidptr(&find_file_data)) > 0 {
|
for C.FindNextFile(h_find_files, voidptr(&find_file_data)) > 0 {
|
||||||
filename := unsafe { string_from_wide(&u16(find_file_data.c_file_name)) }
|
filename := unsafe { string_from_wide(&find_file_data.c_file_name[0]) }
|
||||||
if filename != '.' && filename != '..' {
|
if filename != '.' && filename != '..' {
|
||||||
dir_files << filename.clone()
|
dir_files << filename.clone()
|
||||||
}
|
}
|
||||||
|
@ -3911,6 +3911,8 @@ pub fn (mut c Checker) cast_expr(mut node ast.CastExpr) table.Type {
|
|||||||
ft := c.table.type_to_str(node.expr_type)
|
ft := c.table.type_to_str(node.expr_type)
|
||||||
tt := c.table.type_to_str(node.typ)
|
tt := c.table.type_to_str(node.typ)
|
||||||
c.warn('casting `$ft` to `$tt` is only allowed in `unsafe` code', node.pos)
|
c.warn('casting `$ft` to `$tt` is only allowed in `unsafe` code', node.pos)
|
||||||
|
} else if from_type_sym.kind == .array_fixed && !node.expr_type.is_ptr() {
|
||||||
|
c.warn('cannot cast a fixed array (use e.g. `&arr[0]` instead)', node.pos)
|
||||||
}
|
}
|
||||||
if node.has_arg {
|
if node.has_arg {
|
||||||
c.expr(node.arg)
|
c.expr(node.arg)
|
||||||
|
@ -30,7 +30,7 @@ pub fn vhash() string {
|
|||||||
mut buf := [50]byte{}
|
mut buf := [50]byte{}
|
||||||
buf[0] = 0
|
buf[0] = 0
|
||||||
unsafe {
|
unsafe {
|
||||||
C.snprintf(charptr(buf), 50, '%s', C.V_COMMIT_HASH)
|
C.snprintf(charptr(&buf[0]), 50, '%s', C.V_COMMIT_HASH)
|
||||||
return tos_clone(buf)
|
return tos_clone(buf)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -98,7 +98,7 @@ pub fn githash(should_get_from_filesystem bool) string {
|
|||||||
mut buf := [50]byte{}
|
mut buf := [50]byte{}
|
||||||
buf[0] = 0
|
buf[0] = 0
|
||||||
unsafe {
|
unsafe {
|
||||||
C.snprintf(charptr(buf), 50, '%s', C.V_CURRENT_COMMIT_HASH)
|
C.snprintf(charptr(&buf[0]), 50, '%s', C.V_CURRENT_COMMIT_HASH)
|
||||||
return tos_clone(buf)
|
return tos_clone(buf)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -215,7 +215,7 @@ pub fn (mut ws Client) parse_frame_header() ?Frame {
|
|||||||
mut rbuff := [1]byte{}
|
mut rbuff := [1]byte{}
|
||||||
mut mask_end_byte := 0
|
mut mask_end_byte := 0
|
||||||
for ws.state == .open {
|
for ws.state == .open {
|
||||||
read_bytes := ws.socket_read_ptr(byteptr(rbuff), 1) ?
|
read_bytes := ws.socket_read_ptr(&rbuff[0], 1) ?
|
||||||
if read_bytes == 0 {
|
if read_bytes == 0 {
|
||||||
// this is probably a timeout or close
|
// this is probably a timeout or close
|
||||||
continue
|
continue
|
||||||
|
Loading…
Reference in New Issue
Block a user