1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
use erg_common::vis::Visibility;

use erg_type::constructors::{array, array_mut, func0, func1, mono, proc1};
use erg_type::typaram::TyParam;
use erg_type::Type;
use Type::*;

use crate::context::Context;
use crate::varinfo::Mutability;
use Mutability::*;
use Visibility::*;

impl Context {
    pub(crate) fn init_py_sys_mod() -> Self {
        let mut sys = Context::module("sys".into(), 15);
        sys.register_builtin_impl("argv", array(Str, TyParam::erased(Nat)), Immutable, Public);
        sys.register_builtin_impl("byteorder", Str, Immutable, Public);
        sys.register_builtin_impl(
            "builtin_module_names",
            array(Str, TyParam::erased(Nat)),
            Immutable,
            Public,
        );
        sys.register_builtin_impl("copyright", Str, Immutable, Public);
        sys.register_builtin_impl("executable", Str, Immutable, Public);
        sys.register_builtin_impl("exit", func1(Int, Never), Immutable, Public);
        sys.register_builtin_impl("getdefaultencoding", func0(Str), Immutable, Public);
        sys.register_builtin_impl(
            "path",
            array_mut(Str, TyParam::erased(Nat)),
            Immutable,
            Public,
        );
        sys.register_builtin_impl("platform", Str, Immutable, Public);
        sys.register_builtin_impl("prefix", Str, Immutable, Public);
        sys.register_builtin_impl("ps1", mono("Str!"), Immutable, Public);
        sys.register_builtin_impl("ps2", mono("Str!"), Immutable, Public);
        sys.register_builtin_impl(
            "setrecursionlimit!",
            proc1(Int, NoneType),
            Immutable,
            Public,
        );
        sys.register_builtin_impl("stderr", mono("TextIOWrapper!"), Immutable, Public);
        sys.register_builtin_impl("stdin", mono("TextIOWrapper!"), Immutable, Public);
        sys.register_builtin_impl("stdout", mono("TextIOWrapper!"), Immutable, Public);
        sys.register_builtin_impl("version", Str, Immutable, Public);
        sys
    }
}