Add datetime

This commit is contained in:
Shunsuke Shibayama 2022-10-21 10:58:21 +09:00
parent e31d109b32
commit f99c788b85
4 changed files with 49 additions and 9 deletions

View file

@ -6,7 +6,8 @@ use std::process::Command;
use crate::serialize::get_magic_num_from_bytes;
#[cfg(unix)]
pub const BUILTIN_PYTHON_MODS: [&str; 18] = [
pub const BUILTIN_PYTHON_MODS: [&str; 19] = [
"datetime",
"glob",
"http",
"importlib",
@ -27,7 +28,8 @@ pub const BUILTIN_PYTHON_MODS: [&str; 18] = [
"zipfile",
];
#[cfg(not(unix))]
pub const BUILTIN_PYTHON_MODS: [&str; 17] = [
pub const BUILTIN_PYTHON_MODS: [&str; 18] = [
"datetime",
"glob",
"http",
"importlib",

View file

@ -130,8 +130,13 @@ impl Context {
}
}
fn register_builtin_immutable_private_var(&mut self, name: &'static str, t: Type) {
self.register_builtin_impl(name, t, Immutable, Private);
fn register_builtin_immutable_private_var(
&mut self,
name: &'static str,
t: Type,
py_name: Option<&'static str>,
) {
self.register_builtin_py_impl(name, t, Immutable, Private, py_name);
}
fn register_builtin_const(&mut self, name: &str, vis: Visibility, obj: ValueObj) {
@ -359,10 +364,22 @@ impl Context {
fn init_builtin_consts(&mut self) {
// TODO: this is not a const, but a special property
self.register_builtin_immutable_private_var("__name__", Str);
self.register_builtin_immutable_private_var("license", mono("_sitebuiltins._Printer"));
self.register_builtin_immutable_private_var("credits", mono("_sitebuiltins._Printer"));
self.register_builtin_immutable_private_var("copyright", mono("_sitebuiltins._Printer"));
self.register_builtin_immutable_private_var("__name__", Str, Some("__name__"));
self.register_builtin_immutable_private_var(
"license",
mono("_sitebuiltins._Printer"),
Some("license"),
);
self.register_builtin_immutable_private_var(
"credits",
mono("_sitebuiltins._Printer"),
Some("credits"),
);
self.register_builtin_immutable_private_var(
"copyright",
mono("_sitebuiltins._Printer"),
Some("copyright"),
);
}
/// see std/prelude.er

View file

@ -165,7 +165,17 @@ impl Context {
};
// already defined as const
if sig.is_const() {
let vi = self.decls.remove(ident.inspect()).unwrap();
let vi = self.decls.remove(ident.inspect()).unwrap_or_else(|| {
VarInfo::new(
body_t.clone(),
Mutability::Const,
sig.vis(),
VarKind::Declared,
None,
self.impl_of(),
py_name,
)
});
self.locals.insert(ident.name.clone(), vi);
return Ok(());
}

View file

@ -0,0 +1,11 @@
.Date = 'date': ClassType
.Date.today!: () => .Date
.Date.min: .Date
.Date.max: .Date
.Time = 'time': ClassType
.DateTime = 'dateTime': ClassType
.DateTime.today!: () => .DateTime
.DateTime.now!: (tz := .TZInfo or NoneType) => .DateTime
.TimeDelta = 'timedelta': ClassType
.TZInfo = 'tzinfo': ClassType
.TimeZone = 'timezone': ClassType