checker: make use of private enum from outside module an error. (#9821)
parent
c85eefa5b2
commit
7443179cc8
|
@ -1,7 +1,7 @@
|
||||||
module builtin
|
module builtin
|
||||||
|
|
||||||
// ChanState describes the result of an attempted channel transaction.
|
// ChanState describes the result of an attempted channel transaction.
|
||||||
enum ChanState {
|
pub enum ChanState {
|
||||||
success
|
success
|
||||||
not_ready // push()/pop() would have to wait, but no_block was requested
|
not_ready // push()/pop() would have to wait, but no_block was requested
|
||||||
closed
|
closed
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
module net
|
module net
|
||||||
|
|
||||||
enum SocketOption {
|
pub enum SocketOption {
|
||||||
// TODO: SO_ACCEPT_CONN is not here becuase windows doesnt support it
|
// TODO: SO_ACCEPT_CONN is not here becuase windows doesnt support it
|
||||||
// and there is no easy way to define it
|
// and there is no easy way to define it
|
||||||
|
|
||||||
|
|
|
@ -1,42 +1,42 @@
|
||||||
import os
|
module os
|
||||||
|
|
||||||
const (
|
const (
|
||||||
// tfolder will contain all the temporary files/subfolders made by
|
// tfolder will contain all the temporary files/subfolders made by
|
||||||
// the different tests. It would be removed in testsuite_end(), so
|
// the different tests. It would be removed in testsuite_end(), so
|
||||||
// individual os tests do not need to clean up after themselves.
|
// 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() {
|
fn testsuite_begin() {
|
||||||
eprintln('testsuite_begin, tfolder = $tfolder')
|
eprintln('testsuite_begin, tfolder = $os.tfolder')
|
||||||
os.rmdir_all(tfolder) or {}
|
rmdir_all(os.tfolder) or {}
|
||||||
assert !os.is_dir(tfolder)
|
assert !is_dir(os.tfolder)
|
||||||
os.mkdir_all(tfolder) or { panic(err) }
|
mkdir_all(os.tfolder) or { panic(err) }
|
||||||
os.chdir(tfolder)
|
chdir(os.tfolder)
|
||||||
assert os.is_dir(tfolder)
|
assert is_dir(os.tfolder)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn testsuite_end() {
|
fn testsuite_end() {
|
||||||
os.chdir(os.wd_at_startup)
|
chdir(wd_at_startup)
|
||||||
os.rmdir_all(tfolder) or { panic(err) }
|
rmdir_all(os.tfolder) or { panic(err) }
|
||||||
assert !os.is_dir(tfolder)
|
assert !is_dir(os.tfolder)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_inode_file_type() {
|
fn test_inode_file_type() {
|
||||||
filename := './test1.txt'
|
filename := './test1.txt'
|
||||||
mut file := os.open_file(filename, 'w', 0o600) or { return }
|
mut file := open_file(filename, 'w', 0o600) or { return }
|
||||||
file.close()
|
file.close()
|
||||||
mode := os.inode(filename)
|
mode := inode(filename)
|
||||||
os.rm(filename) or { panic(err) }
|
rm(filename) or { panic(err) }
|
||||||
assert mode.typ == .regular
|
assert mode.typ == .regular
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_inode_file_owner_permission() {
|
fn test_inode_file_owner_permission() {
|
||||||
filename := './test2.txt'
|
filename := './test2.txt'
|
||||||
mut file := os.open_file(filename, 'w', 0o600) or { return }
|
mut file := open_file(filename, 'w', 0o600) or { return }
|
||||||
file.close()
|
file.close()
|
||||||
mode := os.inode(filename)
|
mode := inode(filename)
|
||||||
os.rm(filename) or {}
|
rm(filename) or {}
|
||||||
assert mode.owner.read
|
assert mode.owner.read
|
||||||
assert mode.owner.write
|
assert mode.owner.write
|
||||||
assert !mode.owner.execute
|
assert !mode.owner.execute
|
||||||
|
|
|
@ -6,9 +6,9 @@
|
||||||
* in order to test it independently from the support in the core language
|
* 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)
|
mut sum := i64(0)
|
||||||
for _ in 0 .. 300 {
|
for _ in 0 .. 300 {
|
||||||
mut a := i64(0)
|
mut a := i64(0)
|
||||||
|
@ -18,20 +18,20 @@ fn do_rec_i64(mut ch sync.Channel) {
|
||||||
assert sum == 300 * (300 - 1) / 2
|
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 {
|
for i in 0 .. 300 {
|
||||||
ch.push(&i)
|
ch.push(&i)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn do_send_byte(mut ch sync.Channel) {
|
fn do_send_byte(mut ch Channel) {
|
||||||
for i in 0 .. 300 {
|
for i in 0 .. 300 {
|
||||||
ii := byte(i)
|
ii := byte(i)
|
||||||
ch.push(&ii)
|
ch.push(&ii)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn do_send_i64(mut ch sync.Channel) {
|
fn do_send_i64(mut ch Channel) {
|
||||||
for i in 0 .. 300 {
|
for i in 0 .. 300 {
|
||||||
ii := i64(i)
|
ii := i64(i)
|
||||||
ch.push(&ii)
|
ch.push(&ii)
|
||||||
|
@ -39,16 +39,16 @@ fn do_send_i64(mut ch sync.Channel) {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_select() {
|
fn test_select() {
|
||||||
mut chi := sync.new_channel<int>(0)
|
mut chi := new_channel<int>(0)
|
||||||
mut chl := sync.new_channel<i64>(1)
|
mut chl := new_channel<i64>(1)
|
||||||
mut chb := sync.new_channel<byte>(10)
|
mut chb := new_channel<byte>(10)
|
||||||
mut recch := sync.new_channel<i64>(0)
|
mut recch := new_channel<i64>(0)
|
||||||
go do_rec_i64(mut recch)
|
go do_rec_i64(mut recch)
|
||||||
go do_send_int(mut chi)
|
go do_send_int(mut chi)
|
||||||
go do_send_byte(mut chb)
|
go do_send_byte(mut chb)
|
||||||
go do_send_i64(mut chl)
|
go do_send_i64(mut chl)
|
||||||
mut channels := [chi, recch, chl, chb]
|
mut channels := [chi, recch, chl, chb]
|
||||||
directions := [sync.Direction.pop, .push, .pop, .pop]
|
directions := [Direction.pop, .push, .pop, .pop]
|
||||||
mut sum := i64(0)
|
mut sum := i64(0)
|
||||||
mut rl := i64(0)
|
mut rl := i64(0)
|
||||||
mut ri := int(0)
|
mut ri := int(0)
|
||||||
|
@ -56,7 +56,7 @@ fn test_select() {
|
||||||
mut sl := i64(0)
|
mut sl := i64(0)
|
||||||
mut objs := [voidptr(&ri), &sl, &rl, &rb]
|
mut objs := [voidptr(&ri), &sl, &rl, &rb]
|
||||||
for _ in 0 .. 1200 {
|
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 {
|
match idx {
|
||||||
0 {
|
0 {
|
||||||
sum += ri
|
sum += ri
|
||||||
|
|
|
@ -1,7 +1,8 @@
|
||||||
import sync
|
module sync
|
||||||
|
|
||||||
import time
|
import time
|
||||||
|
|
||||||
fn do_rec_i64(mut ch sync.Channel) {
|
fn do_rec_i64(mut ch Channel) {
|
||||||
mut sum := i64(0)
|
mut sum := i64(0)
|
||||||
for i in 0 .. 300 {
|
for i in 0 .. 300 {
|
||||||
if i == 200 {
|
if i == 200 {
|
||||||
|
@ -15,14 +16,14 @@ fn do_rec_i64(mut ch sync.Channel) {
|
||||||
assert sum == 200 * (200 - 1) / 2
|
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 {
|
for i in 0 .. 300 {
|
||||||
ch.push(&i)
|
ch.push(&i)
|
||||||
}
|
}
|
||||||
ch.close()
|
ch.close()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn do_send_byte(mut ch sync.Channel) {
|
fn do_send_byte(mut ch Channel) {
|
||||||
for i in 0 .. 300 {
|
for i in 0 .. 300 {
|
||||||
ii := byte(i)
|
ii := byte(i)
|
||||||
ch.push(&ii)
|
ch.push(&ii)
|
||||||
|
@ -30,7 +31,7 @@ fn do_send_byte(mut ch sync.Channel) {
|
||||||
ch.close()
|
ch.close()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn do_send_i64(mut ch sync.Channel) {
|
fn do_send_i64(mut ch Channel) {
|
||||||
for i in 0 .. 300 {
|
for i in 0 .. 300 {
|
||||||
ii := i64(i)
|
ii := i64(i)
|
||||||
ch.push(&ii)
|
ch.push(&ii)
|
||||||
|
@ -39,16 +40,16 @@ fn do_send_i64(mut ch sync.Channel) {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn test_select() {
|
fn test_select() {
|
||||||
mut chi := sync.new_channel<int>(0)
|
mut chi := new_channel<int>(0)
|
||||||
mut chl := sync.new_channel<i64>(1)
|
mut chl := new_channel<i64>(1)
|
||||||
mut chb := sync.new_channel<byte>(10)
|
mut chb := new_channel<byte>(10)
|
||||||
mut recch := sync.new_channel<i64>(0)
|
mut recch := new_channel<i64>(0)
|
||||||
go do_rec_i64(mut recch)
|
go do_rec_i64(mut recch)
|
||||||
go do_send_int(mut chi)
|
go do_send_int(mut chi)
|
||||||
go do_send_byte(mut chb)
|
go do_send_byte(mut chb)
|
||||||
go do_send_i64(mut chl)
|
go do_send_i64(mut chl)
|
||||||
mut channels := [chi, recch, chl, chb]
|
mut channels := [chi, recch, chl, chb]
|
||||||
directions := [sync.Direction.pop, .push, .pop, .pop]
|
directions := [Direction.pop, .push, .pop, .pop]
|
||||||
mut sum := i64(0)
|
mut sum := i64(0)
|
||||||
mut rl := i64(0)
|
mut rl := i64(0)
|
||||||
mut ri := int(0)
|
mut ri := int(0)
|
||||||
|
@ -56,7 +57,7 @@ fn test_select() {
|
||||||
mut sl := i64(0)
|
mut sl := i64(0)
|
||||||
mut objs := [voidptr(&ri), &sl, &rl, &rb]
|
mut objs := [voidptr(&ri), &sl, &rl, &rb]
|
||||||
for j in 0 .. 1101 {
|
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 {
|
match idx {
|
||||||
0 {
|
0 {
|
||||||
sum += ri
|
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)
|
c.error('not an enum', node.pos)
|
||||||
return ast.void_type
|
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.info as ast.Enum
|
||||||
info := typ_sym.enum_info()
|
info := typ_sym.enum_info()
|
||||||
// rintln('checker: x = $info.x enum val $c.expected_type $typ_sym.name')
|
// 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.
|
// State represents the state of the websocket connection.
|
||||||
enum State {
|
pub enum State {
|
||||||
connecting = 0
|
connecting = 0
|
||||||
open
|
open
|
||||||
closing
|
closing
|
||||||
|
|
Loading…
Reference in New Issue