erg/compiler/erg_compiler/context/initialize/py_mods/random.rs
Shunsuke Shibayama 6c4e1dca35 Downgrade erg_type from crate to module
This is to allow `ConstSubr` to have a `Context`
2022-10-12 02:28:25 +09:00

47 lines
1.3 KiB
Rust

use erg_common::set;
use erg_common::vis::Visibility;
use crate::ty::constructors::{
kw, mono, mono_q, nd_proc, poly, proc, quant, static_instance, ty_tp,
};
use crate::ty::Type;
use Type::*;
use crate::context::Context;
use crate::varinfo::Mutability;
use Mutability::*;
use Visibility::*;
impl Context {
pub(crate) fn init_py_random_mod() -> Self {
let mut random = Context::builtin_module("random", 10);
random.register_builtin_impl(
"seed!",
proc(
vec![],
None,
vec![
kw("a", mono("Num")), // TODO: NoneType, int, float, str, bytes, bytearray
kw("version", Int),
],
NoneType,
),
Immutable,
Public,
);
random.register_builtin_impl(
"randint!",
nd_proc(vec![kw("a", Int), kw("b", Int)], None, Int),
Immutable,
Public,
);
let t = nd_proc(
vec![kw("seq", poly("Seq", vec![ty_tp(mono_q("T"))]))],
None,
mono_q("T"),
);
let t = quant(t, set! {static_instance("T", Type)});
random.register_builtin_impl("choice!", t, Immutable, Public);
random
}
}