From f2e60b24e18ec8c61e2199bc9ed165e1606ce688 Mon Sep 17 00:00:00 2001 From: Windel Bouwman Date: Tue, 26 Feb 2019 21:42:38 +0100 Subject: [PATCH] Add initial platform module. --- Cargo.lock | 35 +++++++++++++++++++++++++++++++++++ vm/Cargo.toml | 1 + vm/src/stdlib/mod.rs | 2 ++ vm/src/stdlib/platform.rs | 29 +++++++++++++++++++++++++++++ 4 files changed, 67 insertions(+) create mode 100644 vm/src/stdlib/platform.rs diff --git a/Cargo.lock b/Cargo.lock index 061dee67f..fd613d7f7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -701,6 +701,23 @@ name = "rustc-demangle" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "rustc_version" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "rustc_version_runtime" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", + "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + [[package]] name = "rustpython" version = "0.0.1" @@ -742,6 +759,7 @@ dependencies = [ "num-traits 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", "rand 0.5.5 (registry+https://github.com/rust-lang/crates.io-index)", "regex 1.0.3 (registry+https://github.com/rust-lang/crates.io-index)", + "rustc_version_runtime 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", "rustpython_parser 0.0.1", "serde 1.0.66 (registry+https://github.com/rust-lang/crates.io-index)", "serde_derive 1.0.66 (registry+https://github.com/rust-lang/crates.io-index)", @@ -790,6 +808,19 @@ name = "scoped_threadpool" version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" +[[package]] +name = "semver" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +dependencies = [ + "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", +] + +[[package]] +name = "semver-parser" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" + [[package]] name = "serde" version = "1.0.66" @@ -1277,9 +1308,13 @@ source = "registry+https://github.com/rust-lang/crates.io-index" "checksum regex-syntax 0.5.6 (registry+https://github.com/rust-lang/crates.io-index)" = "7d707a4fa2637f2dca2ef9fd02225ec7661fe01a53623c1e6515b6916511f7a7" "checksum regex-syntax 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "8f1ac0f60d675cc6cf13a20ec076568254472551051ad5dd050364d70671bf6b" "checksum rustc-demangle 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "bcfe5b13211b4d78e5c2cadfebd7769197d95c639c35a50057eb4c05de811395" +"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" +"checksum rustc_version_runtime 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "6de8ecd7fad7731f306f69b6e10ec5a3178c61e464dcc06979427aa4cc891145" "checksum rustyline 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6010155119d53aac4f5b987cb8f6ea913d0d64d9b237da36f8f96a90cb3f5385" "checksum ryu 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)" = "eb9e9b8cde282a9fe6a42dd4681319bfb63f121b8a8ee9439c6f4107e58a46f7" "checksum scoped_threadpool 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8" +"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" +"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" "checksum serde 1.0.66 (registry+https://github.com/rust-lang/crates.io-index)" = "e9a2d9a9ac5120e0f768801ca2b58ad6eec929dc9d1d616c162f208869c2ce95" "checksum serde_derive 1.0.66 (registry+https://github.com/rust-lang/crates.io-index)" = "0a90213fa7e0f5eac3f7afe2d5ff6b088af515052cc7303bd68c7e3b91a3fb79" "checksum serde_json 1.0.26 (registry+https://github.com/rust-lang/crates.io-index)" = "44dd2cfde475037451fa99b7e5df77aa3cfd1536575fa8e7a538ab36dcde49ae" diff --git a/vm/Cargo.toml b/vm/Cargo.toml index f0ab63aab..85e0bf936 100644 --- a/vm/Cargo.toml +++ b/vm/Cargo.toml @@ -18,6 +18,7 @@ serde_derive = "1.0.66" serde_json = "1.0.26" byteorder = "1.2.6" regex = "1" +rustc_version_runtime = "0.1.*" statrs = "0.10.0" caseless = "0.2.1" unicode-segmentation = "1.2.1" diff --git a/vm/src/stdlib/mod.rs b/vm/src/stdlib/mod.rs index 4ec43f9cd..2a2209375 100644 --- a/vm/src/stdlib/mod.rs +++ b/vm/src/stdlib/mod.rs @@ -3,6 +3,7 @@ mod dis; mod json; mod keyword; mod math; +mod platform; mod pystruct; mod random; mod re; @@ -33,6 +34,7 @@ pub fn get_module_inits() -> HashMap { modules.insert("json".to_string(), Box::new(json::mk_module)); modules.insert("keyword".to_string(), Box::new(keyword::mk_module)); modules.insert("math".to_string(), Box::new(math::mk_module)); + modules.insert("platform".to_string(), Box::new(platform::mk_module)); modules.insert("re".to_string(), Box::new(re::mk_module)); modules.insert("random".to_string(), Box::new(random::mk_module)); modules.insert("string".to_string(), Box::new(string::mk_module)); diff --git a/vm/src/stdlib/platform.rs b/vm/src/stdlib/platform.rs new file mode 100644 index 000000000..e1681a4dd --- /dev/null +++ b/vm/src/stdlib/platform.rs @@ -0,0 +1,29 @@ +extern crate rustc_version_runtime; + +use crate::pyobject::{PyContext, PyFuncArgs, PyObjectRef, PyResult}; +use crate::VirtualMachine; + +pub fn mk_module(ctx: &PyContext) -> PyObjectRef { + py_module!(ctx, "platform", { + "python_compiler" => ctx.new_rustfunc(platform_python_compiler), + "python_implementation" => ctx.new_rustfunc(platform_python_implementation), + "python_version" => ctx.new_rustfunc(platform_python_version), + }) +} + +fn platform_python_implementation(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult { + arg_check!(vm, args); + Ok(vm.new_str("RustPython".to_string())) +} + +fn platform_python_version(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult { + arg_check!(vm, args); + // TODO: fetch version from somewhere. + Ok(vm.new_str("4.0.0".to_string())) +} + +fn platform_python_compiler(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult { + arg_check!(vm, args); + let version = rustc_version_runtime::version_meta(); + Ok(vm.new_str(format!("rustc {}", version.semver))) +}