Refine packages plumbing.

This commit is contained in:
Stephen Chung
2020-04-21 23:01:10 +08:00
parent e394824bf3
commit 0a75479637
19 changed files with 1232 additions and 1406 deletions

View File

@@ -4,37 +4,16 @@ use super::math_basic::BasicMathPackage;
use super::pkg_core::CorePackage;
use super::string_more::MoreStringPackage;
use super::time_basic::BasicTimePackage;
use super::{create_new_package, Package, PackageLibrary, PackageLibraryStore};
use crate::stdlib::ops::Deref;
use crate::def_package;
pub struct StandardPackage(PackageLibrary);
impl Deref for StandardPackage {
type Target = PackageLibrary;
fn deref(&self) -> &PackageLibrary {
&self.0
}
}
impl Package for StandardPackage {
fn new() -> Self {
let mut pkg = create_new_package();
Self::init(&mut pkg);
Self(pkg.into())
}
fn init(lib: &mut PackageLibraryStore) {
CorePackage::init(lib);
BasicMathPackage::init(lib);
BasicArrayPackage::init(lib);
BasicMapPackage::init(lib);
BasicTimePackage::init(lib);
MoreStringPackage::init(lib);
}
fn get(&self) -> PackageLibrary {
self.0.clone()
}
}
def_package!(StandardPackage:"_Standard_ package containing all built-in features.", lib, {
CorePackage::init(lib);
BasicMathPackage::init(lib);
#[cfg(not(feature = "no_index"))]
BasicArrayPackage::init(lib);
#[cfg(not(feature = "no_object"))]
BasicMapPackage::init(lib);
BasicTimePackage::init(lib);
MoreStringPackage::init(lib);
});