parser: use the `[has_globals]` module attribute, remove the parser `global_enabled_mods whitelist` (part 2)
parent
f0f5f97e9f
commit
045579fd8a
|
@ -1,6 +1,7 @@
|
||||||
// Copyright (c) 2019-2021 Alexander Medvednikov. All rights reserved.
|
// Copyright (c) 2019-2021 Alexander Medvednikov. All rights reserved.
|
||||||
// Use of this source code is governed by an MIT license
|
// Use of this source code is governed by an MIT license
|
||||||
// that can be found in the LICENSE file.
|
// that can be found in the LICENSE file.
|
||||||
|
[has_globals]
|
||||||
module rand
|
module rand
|
||||||
|
|
||||||
import rand.config
|
import rand.config
|
||||||
|
@ -35,9 +36,7 @@ mut:
|
||||||
free()
|
free()
|
||||||
}
|
}
|
||||||
|
|
||||||
__global (
|
__global default_rng &PRNG
|
||||||
default_rng &PRNG
|
|
||||||
)
|
|
||||||
|
|
||||||
// new_default returns a new instance of the default RNG. If the seed is not provided, the current time will be used to seed the instance.
|
// new_default returns a new instance of the default RNG. If the seed is not provided, the current time will be used to seed the instance.
|
||||||
[manualfree]
|
[manualfree]
|
||||||
|
|
|
@ -45,8 +45,8 @@ pub fn (mut rng SplitMix64RNG) u32() u32 {
|
||||||
pub fn (mut rng SplitMix64RNG) u64() u64 {
|
pub fn (mut rng SplitMix64RNG) u64() u64 {
|
||||||
rng.state += (0x9e3779b97f4a7c15)
|
rng.state += (0x9e3779b97f4a7c15)
|
||||||
mut z := rng.state
|
mut z := rng.state
|
||||||
z = (z ^ ((z >> u64(30)))) * (0xbf58476d1ce4e5b9)
|
z = (z ^ (z >> u64(30))) * 0xbf58476d1ce4e5b9
|
||||||
z = (z ^ ((z >> u64(27)))) * (0x94d049bb133111eb)
|
z = (z ^ (z >> u64(27))) * 0x94d049bb133111eb
|
||||||
return z ^ (z >> (31))
|
return z ^ (z >> (31))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
[has_globals]
|
||||||
module sapp
|
module sapp
|
||||||
|
|
||||||
import sokol.gfx
|
import sokol.gfx
|
||||||
|
@ -5,9 +6,7 @@ import sokol.gfx
|
||||||
pub const used_import = gfx.used_import
|
pub const used_import = gfx.used_import
|
||||||
|
|
||||||
// Android needs a global reference to `g_desc`
|
// Android needs a global reference to `g_desc`
|
||||||
__global (
|
__global g_desc C.sapp_desc
|
||||||
g_desc C.sapp_desc
|
|
||||||
)
|
|
||||||
|
|
||||||
pub fn create_desc() C.sg_desc {
|
pub fn create_desc() C.sg_desc {
|
||||||
metal_desc := C.sg_metal_context_desc{
|
metal_desc := C.sg_metal_context_desc{
|
||||||
|
|
|
@ -3074,14 +3074,10 @@ fn (mut p Parser) return_stmt() ast.Return {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: remove this whitelist of modules which allow globals by default
|
|
||||||
const global_enabled_mods = ['rand', 'sokol.sapp']
|
|
||||||
|
|
||||||
// left hand side of `=` or `:=` in `a,b,c := 1,2,3`
|
// left hand side of `=` or `:=` in `a,b,c := 1,2,3`
|
||||||
fn (mut p Parser) global_decl() ast.GlobalDecl {
|
fn (mut p Parser) global_decl() ast.GlobalDecl {
|
||||||
if !p.has_globals && !p.pref.enable_globals && !p.pref.is_fmt && !p.pref.translated
|
if !p.has_globals && !p.pref.enable_globals && !p.pref.is_fmt && !p.pref.translated
|
||||||
&& !p.pref.is_livemain && !p.pref.building_v && !p.builtin_mod
|
&& !p.pref.is_livemain && !p.pref.building_v && !p.builtin_mod {
|
||||||
&& p.mod !in parser.global_enabled_mods {
|
|
||||||
p.error('use `v -enable-globals ...` to enable globals')
|
p.error('use `v -enable-globals ...` to enable globals')
|
||||||
return ast.GlobalDecl{}
|
return ast.GlobalDecl{}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue