From 7443179cc89bbab6a1ae2257963d2bbad93e038d Mon Sep 17 00:00:00 2001 From: zakuro Date: Thu, 22 Apr 2021 13:07:56 +0900 Subject: [PATCH] checker: make use of private enum from outside module an error. (#9821) --- vlib/builtin/chan.v | 2 +- vlib/net/socket_options.c.v | 24 +++++----- vlib/os/inode_test.v | 34 ++++++------- vlib/sync/channel_select_test.v | 22 ++++----- vlib/sync/select_close_test.v | 23 ++++----- vlib/v/checker/checker.v | 3 ++ .../tests/import_symbol_const_private_err.out | 6 --- .../tests/import_symbol_const_private_err.vv | 5 -- .../tests/import_symbol_fn_private_err.out | 18 ------- .../tests/import_symbol_fn_private_err.vv | 8 ---- .../tests/import_symbol_private_err.out | 48 +++++++++++++++++++ .../tests/import_symbol_private_err.vv | 12 +++++ .../tests/import_symbol_type_private_err.out | 11 ----- .../tests/import_symbol_type_private_err.vv | 4 -- vlib/x/websocket/websocket_client.v | 2 +- 15 files changed, 117 insertions(+), 105 deletions(-) delete mode 100644 vlib/v/checker/tests/import_symbol_const_private_err.out delete mode 100644 vlib/v/checker/tests/import_symbol_const_private_err.vv delete mode 100644 vlib/v/checker/tests/import_symbol_fn_private_err.out delete mode 100644 vlib/v/checker/tests/import_symbol_fn_private_err.vv create mode 100644 vlib/v/checker/tests/import_symbol_private_err.out create mode 100644 vlib/v/checker/tests/import_symbol_private_err.vv delete mode 100644 vlib/v/checker/tests/import_symbol_type_private_err.out delete mode 100644 vlib/v/checker/tests/import_symbol_type_private_err.vv diff --git a/vlib/builtin/chan.v b/vlib/builtin/chan.v index 0185fdb5d..1692d5f9a 100644 --- a/vlib/builtin/chan.v +++ b/vlib/builtin/chan.v @@ -1,7 +1,7 @@ module builtin // ChanState describes the result of an attempted channel transaction. -enum ChanState { +pub enum ChanState { success not_ready // push()/pop() would have to wait, but no_block was requested closed diff --git a/vlib/net/socket_options.c.v b/vlib/net/socket_options.c.v index 5decc9bd3..cc60223d7 100644 --- a/vlib/net/socket_options.c.v +++ b/vlib/net/socket_options.c.v @@ -1,6 +1,6 @@ module net -enum SocketOption { +pub enum SocketOption { // TODO: SO_ACCEPT_CONN is not here becuase windows doesnt support it // and there is no easy way to define it @@ -28,10 +28,10 @@ enum SocketOption { const ( opts_bool = [SocketOption.broadcast, .debug, .dont_route, .error, .keep_alive, .oob_inline] opts_int = [ - .recieve_buf_size, - .recieve_low_size, + .recieve_buf_size, + .recieve_low_size, .recieve_timeout, - + .send_buf_size, .send_low_size, .send_timeout, @@ -39,15 +39,15 @@ const ( opts_can_set = [ SocketOption.broadcast, - .debug, - .dont_route, - .keep_alive, - .linger, - .oob_inline, - .recieve_buf_size, - .recieve_low_size, + .debug, + .dont_route, + .keep_alive, + .linger, + .oob_inline, + .recieve_buf_size, + .recieve_low_size, .recieve_timeout, - + .send_buf_size, .send_low_size, .send_timeout, diff --git a/vlib/os/inode_test.v b/vlib/os/inode_test.v index e4510c16a..8cd830758 100644 --- a/vlib/os/inode_test.v +++ b/vlib/os/inode_test.v @@ -1,42 +1,42 @@ -import os +module os const ( // tfolder will contain all the temporary files/subfolders made by // the different tests. It would be removed in testsuite_end(), so // individual os tests do not need to clean up after themselves. - tfolder = os.join_path(os.temp_dir(), 'v', 'tests', 'inode_test') + tfolder = join_path(temp_dir(), 'v', 'tests', 'inode_test') ) fn testsuite_begin() { - eprintln('testsuite_begin, tfolder = $tfolder') - os.rmdir_all(tfolder) or {} - assert !os.is_dir(tfolder) - os.mkdir_all(tfolder) or { panic(err) } - os.chdir(tfolder) - assert os.is_dir(tfolder) + eprintln('testsuite_begin, tfolder = $os.tfolder') + rmdir_all(os.tfolder) or {} + assert !is_dir(os.tfolder) + mkdir_all(os.tfolder) or { panic(err) } + chdir(os.tfolder) + assert is_dir(os.tfolder) } fn testsuite_end() { - os.chdir(os.wd_at_startup) - os.rmdir_all(tfolder) or { panic(err) } - assert !os.is_dir(tfolder) + chdir(wd_at_startup) + rmdir_all(os.tfolder) or { panic(err) } + assert !is_dir(os.tfolder) } fn test_inode_file_type() { filename := './test1.txt' - mut file := os.open_file(filename, 'w', 0o600) or { return } + mut file := open_file(filename, 'w', 0o600) or { return } file.close() - mode := os.inode(filename) - os.rm(filename) or { panic(err) } + mode := inode(filename) + rm(filename) or { panic(err) } assert mode.typ == .regular } fn test_inode_file_owner_permission() { filename := './test2.txt' - mut file := os.open_file(filename, 'w', 0o600) or { return } + mut file := open_file(filename, 'w', 0o600) or { return } file.close() - mode := os.inode(filename) - os.rm(filename) or {} + mode := inode(filename) + rm(filename) or {} assert mode.owner.read assert mode.owner.write assert !mode.owner.execute diff --git a/vlib/sync/channel_select_test.v b/vlib/sync/channel_select_test.v index 384a8e9ab..d24854197 100644 --- a/vlib/sync/channel_select_test.v +++ b/vlib/sync/channel_select_test.v @@ -6,9 +6,9 @@ * in order to test it independently from the support in the core language */ -import sync +module sync -fn do_rec_i64(mut ch sync.Channel) { +fn do_rec_i64(mut ch Channel) { mut sum := i64(0) for _ in 0 .. 300 { mut a := i64(0) @@ -18,20 +18,20 @@ fn do_rec_i64(mut ch sync.Channel) { assert sum == 300 * (300 - 1) / 2 } -fn do_send_int(mut ch sync.Channel) { +fn do_send_int(mut ch Channel) { for i in 0 .. 300 { ch.push(&i) } } -fn do_send_byte(mut ch sync.Channel) { +fn do_send_byte(mut ch Channel) { for i in 0 .. 300 { ii := byte(i) ch.push(&ii) } } -fn do_send_i64(mut ch sync.Channel) { +fn do_send_i64(mut ch Channel) { for i in 0 .. 300 { ii := i64(i) ch.push(&ii) @@ -39,16 +39,16 @@ fn do_send_i64(mut ch sync.Channel) { } fn test_select() { - mut chi := sync.new_channel(0) - mut chl := sync.new_channel(1) - mut chb := sync.new_channel(10) - mut recch := sync.new_channel(0) + mut chi := new_channel(0) + mut chl := new_channel(1) + mut chb := new_channel(10) + mut recch := new_channel(0) go do_rec_i64(mut recch) go do_send_int(mut chi) go do_send_byte(mut chb) go do_send_i64(mut chl) mut channels := [chi, recch, chl, chb] - directions := [sync.Direction.pop, .push, .pop, .pop] + directions := [Direction.pop, .push, .pop, .pop] mut sum := i64(0) mut rl := i64(0) mut ri := int(0) @@ -56,7 +56,7 @@ fn test_select() { mut sl := i64(0) mut objs := [voidptr(&ri), &sl, &rl, &rb] for _ in 0 .. 1200 { - idx := sync.channel_select(mut channels, directions, mut objs, -1) + idx := channel_select(mut channels, directions, mut objs, -1) match idx { 0 { sum += ri diff --git a/vlib/sync/select_close_test.v b/vlib/sync/select_close_test.v index 4d282a91f..5e6030932 100644 --- a/vlib/sync/select_close_test.v +++ b/vlib/sync/select_close_test.v @@ -1,7 +1,8 @@ -import sync +module sync + import time -fn do_rec_i64(mut ch sync.Channel) { +fn do_rec_i64(mut ch Channel) { mut sum := i64(0) for i in 0 .. 300 { if i == 200 { @@ -15,14 +16,14 @@ fn do_rec_i64(mut ch sync.Channel) { assert sum == 200 * (200 - 1) / 2 } -fn do_send_int(mut ch sync.Channel) { +fn do_send_int(mut ch Channel) { for i in 0 .. 300 { ch.push(&i) } ch.close() } -fn do_send_byte(mut ch sync.Channel) { +fn do_send_byte(mut ch Channel) { for i in 0 .. 300 { ii := byte(i) ch.push(&ii) @@ -30,7 +31,7 @@ fn do_send_byte(mut ch sync.Channel) { ch.close() } -fn do_send_i64(mut ch sync.Channel) { +fn do_send_i64(mut ch Channel) { for i in 0 .. 300 { ii := i64(i) ch.push(&ii) @@ -39,16 +40,16 @@ fn do_send_i64(mut ch sync.Channel) { } fn test_select() { - mut chi := sync.new_channel(0) - mut chl := sync.new_channel(1) - mut chb := sync.new_channel(10) - mut recch := sync.new_channel(0) + mut chi := new_channel(0) + mut chl := new_channel(1) + mut chb := new_channel(10) + mut recch := new_channel(0) go do_rec_i64(mut recch) go do_send_int(mut chi) go do_send_byte(mut chb) go do_send_i64(mut chl) mut channels := [chi, recch, chl, chb] - directions := [sync.Direction.pop, .push, .pop, .pop] + directions := [Direction.pop, .push, .pop, .pop] mut sum := i64(0) mut rl := i64(0) mut ri := int(0) @@ -56,7 +57,7 @@ fn test_select() { mut sl := i64(0) mut objs := [voidptr(&ri), &sl, &rl, &rb] for j in 0 .. 1101 { - idx := sync.channel_select(mut channels, directions, mut objs, time.infinite) + idx := channel_select(mut channels, directions, mut objs, time.infinite) match idx { 0 { sum += ri diff --git a/vlib/v/checker/checker.v b/vlib/v/checker/checker.v index f119c9c26..041a11f31 100644 --- a/vlib/v/checker/checker.v +++ b/vlib/v/checker/checker.v @@ -6031,6 +6031,9 @@ pub fn (mut c Checker) enum_val(mut node ast.EnumVal) ast.Type { c.error('not an enum', node.pos) return ast.void_type } + if !(typ_sym.is_public || typ_sym.mod == c.mod) { + c.error('enum `$typ_sym.name` is private', node.pos) + } // info := typ_sym.info as ast.Enum info := typ_sym.enum_info() // rintln('checker: x = $info.x enum val $c.expected_type $typ_sym.name') diff --git a/vlib/v/checker/tests/import_symbol_const_private_err.out b/vlib/v/checker/tests/import_symbol_const_private_err.out deleted file mode 100644 index 42c70dee9..000000000 --- a/vlib/v/checker/tests/import_symbol_const_private_err.out +++ /dev/null @@ -1,6 +0,0 @@ -vlib/v/checker/tests/import_symbol_const_private_err.vv:4:19: error: constant `v.scanner.single_quote` is private - 2 | - 3 | fn main() { - 4 | println(scanner.single_quote) - | ~~~~~~~~~~~~ - 5 | } diff --git a/vlib/v/checker/tests/import_symbol_const_private_err.vv b/vlib/v/checker/tests/import_symbol_const_private_err.vv deleted file mode 100644 index df1f87275..000000000 --- a/vlib/v/checker/tests/import_symbol_const_private_err.vv +++ /dev/null @@ -1,5 +0,0 @@ -import v.scanner - -fn main() { - println(scanner.single_quote) -} diff --git a/vlib/v/checker/tests/import_symbol_fn_private_err.out b/vlib/v/checker/tests/import_symbol_fn_private_err.out deleted file mode 100644 index 758ccb0ea..000000000 --- a/vlib/v/checker/tests/import_symbol_fn_private_err.out +++ /dev/null @@ -1,18 +0,0 @@ -vlib/v/checker/tests/import_symbol_fn_private_err.vv:1:20: error: module `time` function `since()` is private - 1 | import time { now, since } - | ~~~~~ - 2 | fn main() { - 3 | since(now()) -vlib/v/checker/tests/import_symbol_fn_private_err.vv:3:3: error: function `time.since` is private - 1 | import time { now, since } - 2 | fn main() { - 3 | since(now()) - | ~~~~~~~~~~~~ - 4 | } - 5 | -vlib/v/checker/tests/import_symbol_fn_private_err.vv:7:20: error: method `map[string]int.exists` is private - 5 | - 6 | fn method() { - 7 | _ = map{'h':2}.exists('h') - | ~~~~~~~~~~~ - 8 | } diff --git a/vlib/v/checker/tests/import_symbol_fn_private_err.vv b/vlib/v/checker/tests/import_symbol_fn_private_err.vv deleted file mode 100644 index c11911f87..000000000 --- a/vlib/v/checker/tests/import_symbol_fn_private_err.vv +++ /dev/null @@ -1,8 +0,0 @@ -import time { now, since } -fn main() { - since(now()) -} - -fn method() { - _ = map{'h':2}.exists('h') -} diff --git a/vlib/v/checker/tests/import_symbol_private_err.out b/vlib/v/checker/tests/import_symbol_private_err.out new file mode 100644 index 000000000..2d3d1e2c9 --- /dev/null +++ b/vlib/v/checker/tests/import_symbol_private_err.out @@ -0,0 +1,48 @@ +vlib/v/checker/tests/import_symbol_private_err.vv:3:20: error: module `time` function `since()` is private + 1 | import v.scanner + 2 | import v.parser + 3 | import time { now, since } + | ~~~~~ + 4 | import io { ReaderWriterImpl } + 5 | +vlib/v/checker/tests/import_symbol_private_err.vv:4:13: error: module `io` type `ReaderWriterImpl` is private + 2 | import v.parser + 3 | import time { now, since } + 4 | import io { ReaderWriterImpl } + | ~~~~~~~~~~~~~~~~ + 5 | + 6 | fn main() { +vlib/v/checker/tests/import_symbol_private_err.vv:7:18: error: constant `v.scanner.single_quote` is private + 5 | + 6 | fn main() { + 7 | println(scanner.single_quote) + | ~~~~~~~~~~~~ + 8 | println(parser.State.html) + 9 | since(now()) +vlib/v/checker/tests/import_symbol_private_err.vv:8:17: error: enum `v.parser.State` is private + 6 | fn main() { + 7 | println(scanner.single_quote) + 8 | println(parser.State.html) + | ~~~~~~~~~~ + 9 | since(now()) + 10 | _ = map{'h': 2}.exists('h') +vlib/v/checker/tests/import_symbol_private_err.vv:9:2: error: function `time.since` is private + 7 | println(scanner.single_quote) + 8 | println(parser.State.html) + 9 | since(now()) + | ~~~~~~~~~~~~ + 10 | _ = map{'h': 2}.exists('h') + 11 | _ = ReaderWriterImpl{} +vlib/v/checker/tests/import_symbol_private_err.vv:10:18: error: method `map[string]int.exists` is private + 8 | println(parser.State.html) + 9 | since(now()) + 10 | _ = map{'h': 2}.exists('h') + | ~~~~~~~~~~~ + 11 | _ = ReaderWriterImpl{} + 12 | } +vlib/v/checker/tests/import_symbol_private_err.vv:11:6: error: type `io.ReaderWriterImpl` is private + 9 | since(now()) + 10 | _ = map{'h': 2}.exists('h') + 11 | _ = ReaderWriterImpl{} + | ~~~~~~~~~~~~~~~~~~ + 12 | } diff --git a/vlib/v/checker/tests/import_symbol_private_err.vv b/vlib/v/checker/tests/import_symbol_private_err.vv new file mode 100644 index 000000000..0957e8623 --- /dev/null +++ b/vlib/v/checker/tests/import_symbol_private_err.vv @@ -0,0 +1,12 @@ +import v.scanner +import v.parser +import time { now, since } +import io { ReaderWriterImpl } + +fn main() { + println(scanner.single_quote) + println(parser.State.html) + since(now()) + _ = map{'h': 2}.exists('h') + _ = ReaderWriterImpl{} +} diff --git a/vlib/v/checker/tests/import_symbol_type_private_err.out b/vlib/v/checker/tests/import_symbol_type_private_err.out deleted file mode 100644 index 8efe2f603..000000000 --- a/vlib/v/checker/tests/import_symbol_type_private_err.out +++ /dev/null @@ -1,11 +0,0 @@ -vlib/v/checker/tests/import_symbol_type_private_err.vv:1:13: error: module `io` type `ReaderWriterImpl` is private - 1 | import io { ReaderWriterImpl } - | ~~~~~~~~~~~~~~~~ - 2 | fn main() { - 3 | _ := ReaderWriterImpl{} -vlib/v/checker/tests/import_symbol_type_private_err.vv:3:8: error: type `io.ReaderWriterImpl` is private - 1 | import io { ReaderWriterImpl } - 2 | fn main() { - 3 | _ := ReaderWriterImpl{} - | ~~~~~~~~~~~~~~~~~~ - 4 | } diff --git a/vlib/v/checker/tests/import_symbol_type_private_err.vv b/vlib/v/checker/tests/import_symbol_type_private_err.vv deleted file mode 100644 index 8c9d9b39e..000000000 --- a/vlib/v/checker/tests/import_symbol_type_private_err.vv +++ /dev/null @@ -1,4 +0,0 @@ -import io { ReaderWriterImpl } -fn main() { - _ := ReaderWriterImpl{} -} diff --git a/vlib/x/websocket/websocket_client.v b/vlib/x/websocket/websocket_client.v index b96d86d9e..a684d3914 100644 --- a/vlib/x/websocket/websocket_client.v +++ b/vlib/x/websocket/websocket_client.v @@ -49,7 +49,7 @@ enum Flag { } // State represents the state of the websocket connection. -enum State { +pub enum State { connecting = 0 open closing -- 2.30.2