Automatic Global Module

When a constant is declared at global scope, it is added to a special module called global.

Functions can access those constants via the special global module.

Naturally, the automatic global module is not available under no_function nor no_module.

const CONSTANT = 42;        // this constant is automatically added to 'global'

{
    const INNER = 0;        // this constant is not at global level
}                           // <- it goes away here

fn foo(x) {
    x *= global::CONSTANT;  // ok! 'CONSTANT' exists in 'global'

    x * global::INNER       // <- error: constant 'INNER' not found in 'global'
}

Override global

It is possible to override the automatic global module by importing another module under the name global.

import "foo" as global;     // import a module as 'global'

const CONSTANT = 42;        // this constant is NOT added to 'global'

fn foo(x) {
    global::CONSTANT        // <- error: constant 'CONSTANT' not found in 'global'
}