parser: use the `[has_globals]` module attribute, remove the parser `global_enabled_mods whitelist` (part 2)

pull/12482/head
Delyan Angelov 2021-11-16 11:44:36 +02:00
parent f0f5f97e9f
commit 045579fd8a
No known key found for this signature in database
GPG Key ID: 66886C0F12D595ED
4 changed files with 7 additions and 13 deletions

View File

@ -1,6 +1,7 @@
// Copyright (c) 2019-2021 Alexander Medvednikov. All rights reserved.
// Use of this source code is governed by an MIT license
// that can be found in the LICENSE file.
[has_globals]
module rand
import rand.config
@ -35,9 +36,7 @@ mut:
free()
}
__global (
default_rng &PRNG
)
__global 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.
[manualfree]

View File

@ -45,8 +45,8 @@ pub fn (mut rng SplitMix64RNG) u32() u32 {
pub fn (mut rng SplitMix64RNG) u64() u64 {
rng.state += (0x9e3779b97f4a7c15)
mut z := rng.state
z = (z ^ ((z >> u64(30)))) * (0xbf58476d1ce4e5b9)
z = (z ^ ((z >> u64(27)))) * (0x94d049bb133111eb)
z = (z ^ (z >> u64(30))) * 0xbf58476d1ce4e5b9
z = (z ^ (z >> u64(27))) * 0x94d049bb133111eb
return z ^ (z >> (31))
}

View File

@ -1,3 +1,4 @@
[has_globals]
module sapp
import sokol.gfx
@ -5,9 +6,7 @@ import sokol.gfx
pub const used_import = gfx.used_import
// Android needs a global reference to `g_desc`
__global (
g_desc C.sapp_desc
)
__global g_desc C.sapp_desc
pub fn create_desc() C.sg_desc {
metal_desc := C.sg_metal_context_desc{

View File

@ -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`
fn (mut p Parser) global_decl() ast.GlobalDecl {
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.mod !in parser.global_enabled_mods {
&& !p.pref.is_livemain && !p.pref.building_v && !p.builtin_mod {
p.error('use `v -enable-globals ...` to enable globals')
return ast.GlobalDecl{}
}