From 81400a864178111f133a8c2d2573926f23b80229 Mon Sep 17 00:00:00 2001 From: Alexander Medvednikov Date: Mon, 13 Apr 2026 18:39:44 +0300 Subject: [PATCH] all: fix tests --- vlib/v/builder/builder.v | 6 ++ vlib/v/checker/checker.v | 6 +- vlib/v/checker/str.v | 20 +++++- .../tests/array_sort_with_compare_err.out | 2 +- .../tests/array_sorted_with_compare_err.out | 2 +- .../checker/tests/invalid_vweb_param_type.out | 70 ------------------- ...voidptr_cast_to_ref_outside_unsafe_err.out | 13 ++++ .../voidptr_cast_to_ref_outside_unsafe_err.vv | 5 ++ vlib/v/checker/tests/vweb_missing_result.out | 49 ------------- vlib/v/checker/tests/vweb_routing_checks.out | 70 ------------------- vlib/v/checker/tests/vweb_tmpl_used_var.out | 70 ------------------- ...interpolation_reference_default_fmt_test.v | 6 +- .../path4/hunam6/voak/foo/foo.v | 1 + 13 files changed, 51 insertions(+), 269 deletions(-) create mode 100644 vlib/v/checker/tests/voidptr_cast_to_ref_outside_unsafe_err.out create mode 100644 vlib/v/checker/tests/voidptr_cast_to_ref_outside_unsafe_err.vv create mode 100644 vlib/v/tests/multiple_paths_in_vmodules/path4/hunam6/voak/foo/foo.v diff --git a/vlib/v/builder/builder.v b/vlib/v/builder/builder.v index e7bd7fdfa..b87ac0ee6 100644 --- a/vlib/v/builder/builder.v +++ b/vlib/v/builder/builder.v @@ -482,6 +482,12 @@ fn find_module_path_from_search_root(search_path string, mod string) !string { if os.is_dir(try_path) { return try_path } + // Single-file modules: check if a .v file with the module name exists in the search directory. + // In this case, the module's source is a single file (e.g., `priv_sym.v`) rather than a subdirectory. + // Return the search directory itself, since V loads all .v files in a directory as part of the module. + if os.is_file(try_path + '.v') { + return search_path + } if src_try_path := find_module_path_from_vmod_root(search_path, mod) { return src_try_path } diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index 5094c345b..dd9501c27 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -2341,10 +2341,8 @@ fn (mut c Checker) check_or_expr(node ast.OrExpr, ret_type ast.Type, expr_return } mut valid_stmts := node.stmts.filter(it !is ast.SemicolonStmt) mut last_stmt := if valid_stmts.len > 0 { valid_stmts.last() } else { node.stmts.last() } - allow_none_as_option_value := ret_type.has_flag(.option) - && (expr is ast.IndexExpr || expr is ast.CallExpr) - default_or_type := if ret_type.has_flag(.option) - && (expr is ast.IndexExpr || expr is ast.CallExpr) { + allow_none_as_option_value := expr is ast.IndexExpr && ret_type.has_flag(.option) + default_or_type := if expr is ast.IndexExpr && ret_type.has_flag(.option) { ret_type } else { expr_return_type.clear_option_and_result() diff --git a/vlib/v/checker/str.v b/vlib/v/checker/str.v index 2ea754f40..ab46fcea7 100644 --- a/vlib/v/checker/str.v +++ b/vlib/v/checker/str.v @@ -41,6 +41,24 @@ fn (mut c Checker) get_default_fmt(ftyp ast.Type, typ ast.Type) u8 { } } +fn (mut c Checker) get_string_inter_default_fmt(expr ast.Expr, ftyp ast.Type, typ ast.Type) u8 { + if expr is ast.Ident { + if expr.obj is ast.Var { + obj := expr.obj + if obj.typ.is_ptr() && !obj.is_arg { + pointee_typ := obj.typ.deref() + if c.table.final_sym(pointee_typ).kind != .enum { + final_pointee_typ := c.table.final_type(pointee_typ) + if final_pointee_typ in [ast.string_type, ast.bool_type] { + return `p` + } + } + } + } + } + return c.get_default_fmt(ftyp, typ) +} + fn (mut c Checker) check_string_inter_lit_format_expr(mut expr ast.Expr, what string) { if expr is ast.EmptyExpr { return @@ -106,7 +124,7 @@ fn (mut c Checker) string_inter_lit(mut node ast.StringInterLiteral) ast.Type { c.error('unknown format specifier `${fmt:c}`', node.fmt_poss[i]) } if fmt == `_` { // set default representation for type if none has been given - fmt = c.get_default_fmt(ftyp, typ) + fmt = c.get_string_inter_default_fmt(expr, ftyp, typ) if fmt == `_` { if typ != ast.void_type && !(typ.has_flag(.generic) && (c.inside_lambda || c.table.cur_concrete_types.len > 0 diff --git a/vlib/v/checker/tests/array_sort_with_compare_err.out b/vlib/v/checker/tests/array_sort_with_compare_err.out index ee5e25ae6..d98524a51 100644 --- a/vlib/v/checker/tests/array_sort_with_compare_err.out +++ b/vlib/v/checker/tests/array_sort_with_compare_err.out @@ -19,7 +19,7 @@ vlib/v/checker/tests/array_sort_with_compare_err.vv:4:26: error: cannot use `fn | ~~~~~~~~~~~~~~~~~ 5 | println(names) 6 | -Details: expected argument 1 to be a pointer, but the passed argument 1 is NOT a pointer +Details: `FnSortCB`'s expected argument `const_a` to be a pointer, but the passed argument `a` is NOT a pointer vlib/v/checker/tests/array_sort_with_compare_err.vv:7:26: error: cannot use `int literal` as `fn (voidptr, voidptr) int` in argument 1 to `[]string.sort_with_compare` 5 | println(names) 6 | diff --git a/vlib/v/checker/tests/array_sorted_with_compare_err.out b/vlib/v/checker/tests/array_sorted_with_compare_err.out index 7412e6a4d..4fa56214e 100644 --- a/vlib/v/checker/tests/array_sorted_with_compare_err.out +++ b/vlib/v/checker/tests/array_sorted_with_compare_err.out @@ -19,7 +19,7 @@ vlib/v/checker/tests/array_sorted_with_compare_err.vv:4:37: error: cannot use `f | ~~~~~~~~~~~~~~~~~ 5 | println(name1) 6 | -Details: expected argument 1 to be a pointer, but the passed argument 1 is NOT a pointer +Details: `FnSortCB`'s expected argument `const_a` to be a pointer, but the passed argument `a` is NOT a pointer vlib/v/checker/tests/array_sorted_with_compare_err.vv:7:37: error: cannot use `int literal` as `fn (voidptr, voidptr) int` in argument 1 to `[]string.sorted_with_compare` 5 | println(name1) 6 | diff --git a/vlib/v/checker/tests/invalid_vweb_param_type.out b/vlib/v/checker/tests/invalid_vweb_param_type.out index c65fb1de2..21b71fcc8 100644 --- a/vlib/v/checker/tests/invalid_vweb_param_type.out +++ b/vlib/v/checker/tests/invalid_vweb_param_type.out @@ -6,76 +6,6 @@ vlib/v/checker/tests/invalid_vweb_param_type.vv:8:24: notice: unused parameter: | ~~~~ 9 | return app.text('') 10 | } -vlib/vweb/vweb.v:801:11: error: field `App.req` is not public - 799 | - 800 | // Skip if the HTTP request method does not match the attributes - 801 | if app.req.method in route.methods { - | ~~~ - 802 | // Used for route matching - 803 | route_words := route.path_words // route.path.split('/').filter(it != '') -vlib/vweb/vweb.v:822:14: error: field `App.req` is not public - 820 | } - 821 | - 822 | if app.req.method == .post && method.args.len > 0 { - | ~~~ - 823 | // Populate method args with form values - 824 | mut args := []string{cap: method.args.len} -vlib/vweb/vweb.v:826:21: error: field `App.form` is not public - 824 | mut args := []string{cap: method.args.len} - 825 | for param in method.args { - 826 | args << app.form[param.name] - | ~~~~ - 827 | } - 828 | -vlib/vweb/vweb.v:981:21: error: field `App.static_files` is not public - 979 | fn serve_if_static[T](mut app T, url urllib.URL, host string) bool { - 980 | // TODO: handle url parameters properly - for now, ignore them - 981 | static_file := app.static_files[url.path] or { return false } - | ~~~~~~~~~~~~ - 982 | mime_type := app.static_mime_types[url.path] or { return false } - 983 | static_host := app.static_hosts[url.path] or { '' } -vlib/vweb/vweb.v:982:19: error: field `App.static_mime_types` is not public - 980 | // TODO: handle url parameters properly - for now, ignore them - 981 | static_file := app.static_files[url.path] or { return false } - 982 | mime_type := app.static_mime_types[url.path] or { return false } - | ~~~~~~~~~~~~~~~~~ - 983 | static_host := app.static_hosts[url.path] or { '' } - 984 | if static_file == '' || mime_type == '' { -vlib/vweb/vweb.v:983:21: error: field `App.static_hosts` is not public - 981 | static_file := app.static_files[url.path] or { return false } - 982 | mime_type := app.static_mime_types[url.path] or { return false } - 983 | static_host := app.static_hosts[url.path] or { '' } - | ~~~~~~~~~~~~ - 984 | if static_file == '' || mime_type == '' { - 985 | return false -vlib/vweb/vweb.v:991:23: error: field `App.conn` is not public - 989 | } - 990 | data := os.read_file(static_file) or { - 991 | send_string(mut app.conn, http_404.bytestr()) or {} - | ~~~~ - 992 | return true - 993 | } -vlib/vweb/vweb.v:666:48: error: field `App.static_files` is not public - 664 | - 665 | // copy static files - 666 | request_app.Context.static_files = global_app.static_files.clone() - | ~~~~~~~~~~~~ - 667 | request_app.Context.static_mime_types = global_app.static_mime_types.clone() - 668 | request_app.Context.static_hosts = global_app.static_hosts.clone() -vlib/vweb/vweb.v:667:53: error: field `App.static_mime_types` is not public - 665 | // copy static files - 666 | request_app.Context.static_files = global_app.static_files.clone() - 667 | request_app.Context.static_mime_types = global_app.static_mime_types.clone() - | ~~~~~~~~~~~~~~~~~ - 668 | request_app.Context.static_hosts = global_app.static_hosts.clone() - 669 | -vlib/vweb/vweb.v:668:48: error: field `App.static_hosts` is not public - 666 | request_app.Context.static_files = global_app.static_files.clone() - 667 | request_app.Context.static_mime_types = global_app.static_mime_types.clone() - 668 | request_app.Context.static_hosts = global_app.static_hosts.clone() - | ~~~~~~~~~~~~ - 669 | - 670 | return request_app vlib/v/checker/tests/invalid_vweb_param_type.vv:8:24: error: invalid type `[]bool` for parameter `list` in vweb app method `index` (only strings, numbers, and bools are allowed) 6 | 7 | @['/:list'; get] diff --git a/vlib/v/checker/tests/voidptr_cast_to_ref_outside_unsafe_err.out b/vlib/v/checker/tests/voidptr_cast_to_ref_outside_unsafe_err.out new file mode 100644 index 000000000..b092d10fa --- /dev/null +++ b/vlib/v/checker/tests/voidptr_cast_to_ref_outside_unsafe_err.out @@ -0,0 +1,13 @@ +vlib/v/checker/tests/voidptr_cast_to_ref_outside_unsafe_err.vv:3:6: error: cannot cast voidptr to `&u32` outside `unsafe` + 1 | fn main() { + 2 | some_ptr := voidptr(1234) + 3 | _ = &u32(some_ptr) + | ~~~~~~~~~~~~~~ + 4 | _ = &u32(voidptr(5678)) + 5 | } +vlib/v/checker/tests/voidptr_cast_to_ref_outside_unsafe_err.vv:4:6: error: cannot cast voidptr to `&u32` outside `unsafe` + 2 | some_ptr := voidptr(1234) + 3 | _ = &u32(some_ptr) + 4 | _ = &u32(voidptr(5678)) + | ~~~~~~~~~~~~~~~~~~~ + 5 | } diff --git a/vlib/v/checker/tests/voidptr_cast_to_ref_outside_unsafe_err.vv b/vlib/v/checker/tests/voidptr_cast_to_ref_outside_unsafe_err.vv new file mode 100644 index 000000000..fb55be84f --- /dev/null +++ b/vlib/v/checker/tests/voidptr_cast_to_ref_outside_unsafe_err.vv @@ -0,0 +1,5 @@ +fn main() { + some_ptr := voidptr(1234) + _ = &u32(some_ptr) + _ = &u32(voidptr(5678)) +} diff --git a/vlib/v/checker/tests/vweb_missing_result.out b/vlib/v/checker/tests/vweb_missing_result.out index 01cacfa72..aa7915b6a 100644 --- a/vlib/v/checker/tests/vweb_missing_result.out +++ b/vlib/v/checker/tests/vweb_missing_result.out @@ -6,52 +6,3 @@ vlib/v/checker/tests/vweb_missing_result.vv:9:1: error: vweb actions must return | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 10 | } 11 | -vlib/vweb/vweb.v:981:21: error: field `App.static_files` is not public - 979 | fn serve_if_static[T](mut app T, url urllib.URL, host string) bool { - 980 | // TODO: handle url parameters properly - for now, ignore them - 981 | static_file := app.static_files[url.path] or { return false } - | ~~~~~~~~~~~~ - 982 | mime_type := app.static_mime_types[url.path] or { return false } - 983 | static_host := app.static_hosts[url.path] or { '' } -vlib/vweb/vweb.v:982:19: error: field `App.static_mime_types` is not public - 980 | // TODO: handle url parameters properly - for now, ignore them - 981 | static_file := app.static_files[url.path] or { return false } - 982 | mime_type := app.static_mime_types[url.path] or { return false } - | ~~~~~~~~~~~~~~~~~ - 983 | static_host := app.static_hosts[url.path] or { '' } - 984 | if static_file == '' || mime_type == '' { -vlib/vweb/vweb.v:983:21: error: field `App.static_hosts` is not public - 981 | static_file := app.static_files[url.path] or { return false } - 982 | mime_type := app.static_mime_types[url.path] or { return false } - 983 | static_host := app.static_hosts[url.path] or { '' } - | ~~~~~~~~~~~~ - 984 | if static_file == '' || mime_type == '' { - 985 | return false -vlib/vweb/vweb.v:991:23: error: field `App.conn` is not public - 989 | } - 990 | data := os.read_file(static_file) or { - 991 | send_string(mut app.conn, http_404.bytestr()) or {} - | ~~~~ - 992 | return true - 993 | } -vlib/vweb/vweb.v:666:48: error: field `App.static_files` is not public - 664 | - 665 | // copy static files - 666 | request_app.Context.static_files = global_app.static_files.clone() - | ~~~~~~~~~~~~ - 667 | request_app.Context.static_mime_types = global_app.static_mime_types.clone() - 668 | request_app.Context.static_hosts = global_app.static_hosts.clone() -vlib/vweb/vweb.v:667:53: error: field `App.static_mime_types` is not public - 665 | // copy static files - 666 | request_app.Context.static_files = global_app.static_files.clone() - 667 | request_app.Context.static_mime_types = global_app.static_mime_types.clone() - | ~~~~~~~~~~~~~~~~~ - 668 | request_app.Context.static_hosts = global_app.static_hosts.clone() - 669 | -vlib/vweb/vweb.v:668:48: error: field `App.static_hosts` is not public - 666 | request_app.Context.static_files = global_app.static_files.clone() - 667 | request_app.Context.static_mime_types = global_app.static_mime_types.clone() - 668 | request_app.Context.static_hosts = global_app.static_hosts.clone() - | ~~~~~~~~~~~~ - 669 | - 670 | return request_app diff --git a/vlib/v/checker/tests/vweb_routing_checks.out b/vlib/v/checker/tests/vweb_routing_checks.out index 0bd5dfb56..5afbb1bdd 100644 --- a/vlib/v/checker/tests/vweb_routing_checks.out +++ b/vlib/v/checker/tests/vweb_routing_checks.out @@ -13,73 +13,3 @@ vlib/v/checker/tests/vweb_routing_checks.vv:26:1: warning: mismatched parameters | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 27 | return app.html('works') 28 | } -vlib/vweb/vweb.v:801:11: error: field `App.req` is not public - 799 | - 800 | // Skip if the HTTP request method does not match the attributes - 801 | if app.req.method in route.methods { - | ~~~ - 802 | // Used for route matching - 803 | route_words := route.path_words // route.path.split('/').filter(it != '') -vlib/vweb/vweb.v:822:14: error: field `App.req` is not public - 820 | } - 821 | - 822 | if app.req.method == .post && method.args.len > 0 { - | ~~~ - 823 | // Populate method args with form values - 824 | mut args := []string{cap: method.args.len} -vlib/vweb/vweb.v:826:21: error: field `App.form` is not public - 824 | mut args := []string{cap: method.args.len} - 825 | for param in method.args { - 826 | args << app.form[param.name] - | ~~~~ - 827 | } - 828 | -vlib/vweb/vweb.v:981:21: error: field `App.static_files` is not public - 979 | fn serve_if_static[T](mut app T, url urllib.URL, host string) bool { - 980 | // TODO: handle url parameters properly - for now, ignore them - 981 | static_file := app.static_files[url.path] or { return false } - | ~~~~~~~~~~~~ - 982 | mime_type := app.static_mime_types[url.path] or { return false } - 983 | static_host := app.static_hosts[url.path] or { '' } -vlib/vweb/vweb.v:982:19: error: field `App.static_mime_types` is not public - 980 | // TODO: handle url parameters properly - for now, ignore them - 981 | static_file := app.static_files[url.path] or { return false } - 982 | mime_type := app.static_mime_types[url.path] or { return false } - | ~~~~~~~~~~~~~~~~~ - 983 | static_host := app.static_hosts[url.path] or { '' } - 984 | if static_file == '' || mime_type == '' { -vlib/vweb/vweb.v:983:21: error: field `App.static_hosts` is not public - 981 | static_file := app.static_files[url.path] or { return false } - 982 | mime_type := app.static_mime_types[url.path] or { return false } - 983 | static_host := app.static_hosts[url.path] or { '' } - | ~~~~~~~~~~~~ - 984 | if static_file == '' || mime_type == '' { - 985 | return false -vlib/vweb/vweb.v:991:23: error: field `App.conn` is not public - 989 | } - 990 | data := os.read_file(static_file) or { - 991 | send_string(mut app.conn, http_404.bytestr()) or {} - | ~~~~ - 992 | return true - 993 | } -vlib/vweb/vweb.v:666:48: error: field `App.static_files` is not public - 664 | - 665 | // copy static files - 666 | request_app.Context.static_files = global_app.static_files.clone() - | ~~~~~~~~~~~~ - 667 | request_app.Context.static_mime_types = global_app.static_mime_types.clone() - 668 | request_app.Context.static_hosts = global_app.static_hosts.clone() -vlib/vweb/vweb.v:667:53: error: field `App.static_mime_types` is not public - 665 | // copy static files - 666 | request_app.Context.static_files = global_app.static_files.clone() - 667 | request_app.Context.static_mime_types = global_app.static_mime_types.clone() - | ~~~~~~~~~~~~~~~~~ - 668 | request_app.Context.static_hosts = global_app.static_hosts.clone() - 669 | -vlib/vweb/vweb.v:668:48: error: field `App.static_hosts` is not public - 666 | request_app.Context.static_files = global_app.static_files.clone() - 667 | request_app.Context.static_mime_types = global_app.static_mime_types.clone() - 668 | request_app.Context.static_hosts = global_app.static_hosts.clone() - | ~~~~~~~~~~~~ - 669 | - 670 | return request_app diff --git a/vlib/v/checker/tests/vweb_tmpl_used_var.out b/vlib/v/checker/tests/vweb_tmpl_used_var.out index 7bacbfefa..7c80b67c9 100644 --- a/vlib/v/checker/tests/vweb_tmpl_used_var.out +++ b/vlib/v/checker/tests/vweb_tmpl_used_var.out @@ -1,71 +1 @@ `vweb` has been deprecated. Please use the more stable and fast `veb` instead. -vlib/vweb/vweb.v:801:11: error: field `App.req` is not public - 799 | - 800 | // Skip if the HTTP request method does not match the attributes - 801 | if app.req.method in route.methods { - | ~~~ - 802 | // Used for route matching - 803 | route_words := route.path_words // route.path.split('/').filter(it != '') -vlib/vweb/vweb.v:822:14: error: field `App.req` is not public - 820 | } - 821 | - 822 | if app.req.method == .post && method.args.len > 0 { - | ~~~ - 823 | // Populate method args with form values - 824 | mut args := []string{cap: method.args.len} -vlib/vweb/vweb.v:826:21: error: field `App.form` is not public - 824 | mut args := []string{cap: method.args.len} - 825 | for param in method.args { - 826 | args << app.form[param.name] - | ~~~~ - 827 | } - 828 | -vlib/vweb/vweb.v:981:21: error: field `App.static_files` is not public - 979 | fn serve_if_static[T](mut app T, url urllib.URL, host string) bool { - 980 | // TODO: handle url parameters properly - for now, ignore them - 981 | static_file := app.static_files[url.path] or { return false } - | ~~~~~~~~~~~~ - 982 | mime_type := app.static_mime_types[url.path] or { return false } - 983 | static_host := app.static_hosts[url.path] or { '' } -vlib/vweb/vweb.v:982:19: error: field `App.static_mime_types` is not public - 980 | // TODO: handle url parameters properly - for now, ignore them - 981 | static_file := app.static_files[url.path] or { return false } - 982 | mime_type := app.static_mime_types[url.path] or { return false } - | ~~~~~~~~~~~~~~~~~ - 983 | static_host := app.static_hosts[url.path] or { '' } - 984 | if static_file == '' || mime_type == '' { -vlib/vweb/vweb.v:983:21: error: field `App.static_hosts` is not public - 981 | static_file := app.static_files[url.path] or { return false } - 982 | mime_type := app.static_mime_types[url.path] or { return false } - 983 | static_host := app.static_hosts[url.path] or { '' } - | ~~~~~~~~~~~~ - 984 | if static_file == '' || mime_type == '' { - 985 | return false -vlib/vweb/vweb.v:991:23: error: field `App.conn` is not public - 989 | } - 990 | data := os.read_file(static_file) or { - 991 | send_string(mut app.conn, http_404.bytestr()) or {} - | ~~~~ - 992 | return true - 993 | } -vlib/vweb/vweb.v:666:48: error: field `App.static_files` is not public - 664 | - 665 | // copy static files - 666 | request_app.Context.static_files = global_app.static_files.clone() - | ~~~~~~~~~~~~ - 667 | request_app.Context.static_mime_types = global_app.static_mime_types.clone() - 668 | request_app.Context.static_hosts = global_app.static_hosts.clone() -vlib/vweb/vweb.v:667:53: error: field `App.static_mime_types` is not public - 665 | // copy static files - 666 | request_app.Context.static_files = global_app.static_files.clone() - 667 | request_app.Context.static_mime_types = global_app.static_mime_types.clone() - | ~~~~~~~~~~~~~~~~~ - 668 | request_app.Context.static_hosts = global_app.static_hosts.clone() - 669 | -vlib/vweb/vweb.v:668:48: error: field `App.static_hosts` is not public - 666 | request_app.Context.static_files = global_app.static_files.clone() - 667 | request_app.Context.static_mime_types = global_app.static_mime_types.clone() - 668 | request_app.Context.static_hosts = global_app.static_hosts.clone() - | ~~~~~~~~~~~~ - 669 | - 670 | return request_app diff --git a/vlib/v/tests/builtin_strings_and_interpolation/string_interpolation_reference_default_fmt_test.v b/vlib/v/tests/builtin_strings_and_interpolation/string_interpolation_reference_default_fmt_test.v index fceefbdb2..91c8f3a85 100644 --- a/vlib/v/tests/builtin_strings_and_interpolation/string_interpolation_reference_default_fmt_test.v +++ b/vlib/v/tests/builtin_strings_and_interpolation/string_interpolation_reference_default_fmt_test.v @@ -5,13 +5,13 @@ fn test_string_interpolation_reference_default_fmt() { f := f32(1.25) fp := &f - assert '${fp}' == ptr_str(fp) + assert '${fp}' == '1.25' r := rune(`A`) rp := &r - assert '${rp}' == ptr_str(rp) + assert '${rp}' == '65' i := 123 ip := &i - assert '${ip}' == ptr_str(ip) + assert '${ip}' == '123' } diff --git a/vlib/v/tests/multiple_paths_in_vmodules/path4/hunam6/voak/foo/foo.v b/vlib/v/tests/multiple_paths_in_vmodules/path4/hunam6/voak/foo/foo.v new file mode 100644 index 000000000..49525808b --- /dev/null +++ b/vlib/v/tests/multiple_paths_in_vmodules/path4/hunam6/voak/foo/foo.v @@ -0,0 +1 @@ +module foo -- 2.39.5