checker: make use of private enum from outside module an error. (#9821)
parent
c85eefa5b2
commit
7443179cc8
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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<int>(0)
|
||||
mut chl := sync.new_channel<i64>(1)
|
||||
mut chb := sync.new_channel<byte>(10)
|
||||
mut recch := sync.new_channel<i64>(0)
|
||||
mut chi := new_channel<int>(0)
|
||||
mut chl := new_channel<i64>(1)
|
||||
mut chb := new_channel<byte>(10)
|
||||
mut recch := new_channel<i64>(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
|
||||
|
|
|
@ -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<int>(0)
|
||||
mut chl := sync.new_channel<i64>(1)
|
||||
mut chb := sync.new_channel<byte>(10)
|
||||
mut recch := sync.new_channel<i64>(0)
|
||||
mut chi := new_channel<int>(0)
|
||||
mut chl := new_channel<i64>(1)
|
||||
mut chb := new_channel<byte>(10)
|
||||
mut recch := new_channel<i64>(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
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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 | }
|
|
@ -1,5 +0,0 @@
|
|||
import v.scanner
|
||||
|
||||
fn main() {
|
||||
println(scanner.single_quote)
|
||||
}
|
|
@ -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 | }
|
|
@ -1,8 +0,0 @@
|
|||
import time { now, since }
|
||||
fn main() {
|
||||
since(now())
|
||||
}
|
||||
|
||||
fn method() {
|
||||
_ = map{'h':2}.exists('h')
|
||||
}
|
|
@ -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 | }
|
|
@ -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{}
|
||||
}
|
|
@ -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 | }
|
|
@ -1,4 +0,0 @@
|
|||
import io { ReaderWriterImpl }
|
||||
fn main() {
|
||||
_ := ReaderWriterImpl{}
|
||||
}
|
|
@ -49,7 +49,7 @@ enum Flag {
|
|||
}
|
||||
|
||||
// State represents the state of the websocket connection.
|
||||
enum State {
|
||||
pub enum State {
|
||||
connecting = 0
|
||||
open
|
||||
closing
|
||||
|
|
Loading…
Reference in New Issue