diff --git a/cmd/v/v.v b/cmd/v/v.v index 9f80568fc2..3bb826efb7 100644 --- a/cmd/v/v.v +++ b/cmd/v/v.v @@ -143,6 +143,9 @@ fn parse_args(args []string) (&pref.Preferences, string) { '-shared' { res.is_shared = true } + '--enable-globals' { + res.enable_globals = true + } '-autofree' { res.autofree = true } diff --git a/vlib/v/checker/checker_test.v b/vlib/v/checker/checker_test.v index 5309c39da3..626a2b2eb5 100644 --- a/vlib/v/checker/checker_test.v +++ b/vlib/v/checker/checker_test.v @@ -1,10 +1,6 @@ import os import term -fn clean_line_endings(s string) string { - return s.trim_space().replace(' \n', '\n').replace(' \r\n', '\n').replace('\r\n', '\n').trim('\n') -} - fn test_all() { mut total_errors := 0 vexe := os.getenv('VEXE') @@ -21,35 +17,45 @@ fn test_all() { } tests.sort() for test in tests { - path := os.join_path(dir, test).replace('\\', '/') - program := path.replace('.vv', '.v') - print(program + ' ') - os.cp(path, program) or { - panic(err) - } - // -prod so that warn are errors - res := os.exec('$vexe -prod $program') or { - panic(err) - } - mut expected := os.read_file(program.replace('.v', '') + '.out') or { - panic(err) - } - expected = clean_line_endings(expected) - found := clean_line_endings(res.output) - if expected != found { - println(term.red('FAIL')) - println('============') - println('expected:') - println(expected) - println('============') - println('found:') - println(found) - println('============\n') - total_errors++ - } else { - println(term.green('OK')) - os.rm( program ) - } + // -prod so that warns are errors + total_errors += check_path(vexe, dir, test, '-prod', '.out') } + total_errors += check_path(vexe, dir, 'globals_error.vv', '--enable-globals run', '.run.out') assert total_errors == 0 } + +fn check_path(vexe, dir, test, voptions, result_extension string) int { + path := os.join_path(dir, test).replace('\\', '/') + program := path.replace('.vv', '.v') + print(program + ' ') + os.cp(path, program) or { + panic(err) + } + res := os.exec('$vexe $voptions $program') or { + panic(err) + } + mut expected := os.read_file(program.replace('.v', '') + result_extension) or { + panic(err) + } + expected = clean_line_endings(expected) + found := clean_line_endings(res.output) + if expected != found { + println(term.red('FAIL')) + println('============') + println('expected:') + println(expected) + println('============') + println('found:') + println(found) + println('============\n') + return 1 + } else { + println(term.green('OK')) + os.rm(program) + } + return 0 +} + +fn clean_line_endings(s string) string { + return s.trim_space().replace(' \n', '\n').replace(' \r\n', '\n').replace('\r\n', '\n').trim('\n') +} diff --git a/vlib/v/checker/tests/globals_error.out b/vlib/v/checker/tests/globals_error.out new file mode 100644 index 0000000000..4903c540a0 --- /dev/null +++ b/vlib/v/checker/tests/globals_error.out @@ -0,0 +1,6 @@ +vlib/v/checker/tests/globals_error.v:2:1: error: use `v --enable-globals ...` to enable globals + 1 | + 2 | __global rfcnt int + | ~~~~~~~~ + 3 | + 4 | fn abc(){ diff --git a/vlib/v/checker/tests/globals_error.run.out b/vlib/v/checker/tests/globals_error.run.out new file mode 100644 index 0000000000..525f325b33 --- /dev/null +++ b/vlib/v/checker/tests/globals_error.run.out @@ -0,0 +1 @@ +rfcnt: 2 diff --git a/vlib/v/checker/tests/globals_error.vv b/vlib/v/checker/tests/globals_error.vv new file mode 100644 index 0000000000..1b35df827f --- /dev/null +++ b/vlib/v/checker/tests/globals_error.vv @@ -0,0 +1,12 @@ + +__global rfcnt int + +fn abc(){ + rfcnt = 2 +} + +fn main(){ + rfcnt = 1 + abc() + println('rfcnt: $rfcnt') +} diff --git a/vlib/v/pref/default.v b/vlib/v/pref/default.v index 9c775ffefb..f02892ec93 100644 --- a/vlib/v/pref/default.v +++ b/vlib/v/pref/default.v @@ -70,7 +70,6 @@ pub fn (mut p Preferences) fill_with_defaults() { } } } - p.enable_globals = false } fn default_c_compiler() string {