mirror of
https://github.com/erg-lang/erg.git
synced 2025-09-28 12:14:43 +00:00
build: update pyo3 to v0.21
This commit is contained in:
parent
d62bce689b
commit
2f6717ba4f
12 changed files with 61 additions and 41 deletions
20
Cargo.lock
generated
20
Cargo.lock
generated
|
@ -379,9 +379,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pyo3"
|
name = "pyo3"
|
||||||
version = "0.20.3"
|
version = "0.21.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "53bdbb96d49157e65d45cc287af5f32ffadd5f4761438b527b055fb0d4bb8233"
|
checksum = "a5e00b96a521718e08e03b1a622f01c8a8deb50719335de3f60b3b3950f069d8"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"indoc",
|
"indoc",
|
||||||
|
@ -397,9 +397,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pyo3-build-config"
|
name = "pyo3-build-config"
|
||||||
version = "0.20.3"
|
version = "0.21.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "deaa5745de3f5231ce10517a1f5dd97d53e5a2fd77aa6b5842292085831d48d7"
|
checksum = "7883df5835fafdad87c0d888b266c8ec0f4c9ca48a5bed6bbb592e8dedee1b50"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"target-lexicon",
|
"target-lexicon",
|
||||||
|
@ -407,9 +407,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pyo3-ffi"
|
name = "pyo3-ffi"
|
||||||
version = "0.20.3"
|
version = "0.21.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "62b42531d03e08d4ef1f6e85a2ed422eb678b8cd62b762e53891c05faf0d4afa"
|
checksum = "01be5843dc60b916ab4dad1dca6d20b9b4e6ddc8e15f50c47fe6d85f1fb97403"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
"pyo3-build-config",
|
"pyo3-build-config",
|
||||||
|
@ -417,9 +417,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pyo3-macros"
|
name = "pyo3-macros"
|
||||||
version = "0.20.3"
|
version = "0.21.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7305c720fa01b8055ec95e484a6eca7a83c841267f0dd5280f0c8b8551d2c158"
|
checksum = "77b34069fc0682e11b31dbd10321cbf94808394c56fd996796ce45217dfac53c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"pyo3-macros-backend",
|
"pyo3-macros-backend",
|
||||||
|
@ -429,9 +429,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "pyo3-macros-backend"
|
name = "pyo3-macros-backend"
|
||||||
version = "0.20.3"
|
version = "0.21.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7c7e9b68bb9c3149c5b0cade5d07f953d6d125eb4337723c4ccdb665f1f96185"
|
checksum = "08260721f32db5e1a5beae69a55553f56b99bd0e1c3e6e0a5e8851a9d0f5a85c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"heck",
|
"heck",
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
|
|
|
@ -78,7 +78,7 @@ erg_compiler = { version = "0.6.39-nightly.1", path = "./crates/erg_compiler" }
|
||||||
erg_linter = { version = "0.6.39-nightly.1", path = "./crates/erg_linter" }
|
erg_linter = { version = "0.6.39-nightly.1", path = "./crates/erg_linter" }
|
||||||
els = { version = "0.1.51-nightly.1", path = "./crates/els" }
|
els = { version = "0.1.51-nightly.1", path = "./crates/els" }
|
||||||
erg_proc_macros = { version = "0.6.39-nightly.1", path = "./crates/erg_proc_macros" }
|
erg_proc_macros = { version = "0.6.39-nightly.1", path = "./crates/erg_proc_macros" }
|
||||||
pyo3 = { version = "0.20", features = ["extension-module"] }
|
pyo3 = { version = "0.21", features = ["extension-module"] }
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
erg_common = { workspace = true }
|
erg_common = { workspace = true }
|
||||||
|
|
|
@ -284,7 +284,7 @@ impl fmt::Display for Location {
|
||||||
|
|
||||||
#[cfg(feature = "pylib")]
|
#[cfg(feature = "pylib")]
|
||||||
impl FromPyObject<'_> for Location {
|
impl FromPyObject<'_> for Location {
|
||||||
fn extract(ob: &'_ PyAny) -> PyResult<Self> {
|
fn extract_bound(ob: &Bound<'_, PyAny>) -> PyResult<Self> {
|
||||||
if let Ok(s) = ob.extract::<String>() {
|
if let Ok(s) = ob.extract::<String>() {
|
||||||
Ok(s.parse::<Location>().unwrap())
|
Ok(s.parse::<Location>().unwrap())
|
||||||
} else if let Ok(s) = ob.extract::<u32>() {
|
} else if let Ok(s) = ob.extract::<u32>() {
|
||||||
|
|
|
@ -7,6 +7,8 @@ use std::iter::FromIterator;
|
||||||
use crate::fxhash::FxHashSet;
|
use crate::fxhash::FxHashSet;
|
||||||
use crate::{debug_fmt_iter, fmt_iter};
|
use crate::{debug_fmt_iter, fmt_iter};
|
||||||
|
|
||||||
|
#[cfg(feature = "pylib")]
|
||||||
|
use pyo3::prelude::PyAnyMethods;
|
||||||
#[cfg(feature = "pylib")]
|
#[cfg(feature = "pylib")]
|
||||||
use pyo3::{FromPyObject, IntoPy, PyAny, PyObject, Python};
|
use pyo3::{FromPyObject, IntoPy, PyAny, PyObject, Python};
|
||||||
|
|
||||||
|
@ -37,7 +39,7 @@ impl<'source, T> FromPyObject<'source> for Set<T>
|
||||||
where
|
where
|
||||||
T: Hash + Eq + FromPyObject<'source>,
|
T: Hash + Eq + FromPyObject<'source>,
|
||||||
{
|
{
|
||||||
fn extract(ob: &'source PyAny) -> pyo3::PyResult<Self> {
|
fn extract_bound(ob: &pyo3::Bound<'source, PyAny>) -> pyo3::PyResult<Self> {
|
||||||
Ok(Set {
|
Ok(Set {
|
||||||
elems: ob.extract::<FxHashSet<T>>()?,
|
elems: ob.extract::<FxHashSet<T>>()?,
|
||||||
})
|
})
|
||||||
|
|
|
@ -254,7 +254,11 @@ impl StdinReader {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn reread_lines(&self, ln_begin: usize, ln_end: usize) -> Vec<String> {
|
pub fn reread_lines(&self, ln_begin: usize, ln_end: usize) -> Vec<String> {
|
||||||
self.buf[ln_begin - 1..=ln_end - 1].to_vec()
|
if let Some(lines) = self.buf.get(ln_begin - 1..=ln_end - 1) {
|
||||||
|
lines.to_vec()
|
||||||
|
} else {
|
||||||
|
self.buf.clone()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn last_line(&mut self) -> Option<&mut String> {
|
pub fn last_line(&mut self) -> Option<&mut String> {
|
||||||
|
|
|
@ -3,6 +3,8 @@ use std::fmt;
|
||||||
use std::hash::{Hash, Hasher};
|
use std::hash::{Hash, Hasher};
|
||||||
use std::ops::{Add, Deref};
|
use std::ops::{Add, Deref};
|
||||||
|
|
||||||
|
#[cfg(feature = "pylib")]
|
||||||
|
use pyo3::prelude::PyAnyMethods;
|
||||||
#[cfg(feature = "pylib")]
|
#[cfg(feature = "pylib")]
|
||||||
use pyo3::{FromPyObject, IntoPy, PyAny, PyObject, Python};
|
use pyo3::{FromPyObject, IntoPy, PyAny, PyObject, Python};
|
||||||
|
|
||||||
|
@ -19,7 +21,7 @@ pub enum Str {
|
||||||
|
|
||||||
#[cfg(feature = "pylib")]
|
#[cfg(feature = "pylib")]
|
||||||
impl FromPyObject<'_> for Str {
|
impl FromPyObject<'_> for Str {
|
||||||
fn extract(ob: &PyAny) -> pyo3::PyResult<Self> {
|
fn extract_bound(ob: &pyo3::Bound<'_, PyAny>) -> pyo3::PyResult<Self> {
|
||||||
let s = ob.extract::<String>()?;
|
let s = ob.extract::<String>()?;
|
||||||
Ok(Str::Rc(s.into()))
|
Ok(Str::Rc(s.into()))
|
||||||
}
|
}
|
||||||
|
|
|
@ -74,6 +74,10 @@ impl<ASTBuilder: ASTBuildable> Runnable for GenericHIRBuilder<ASTBuilder> {
|
||||||
// don't initialize the ownership checker
|
// don't initialize the ownership checker
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn set_input(&mut self, input: erg_common::io::Input) {
|
||||||
|
self.lowerer.set_input(input);
|
||||||
|
}
|
||||||
|
|
||||||
fn exec(&mut self) -> Result<ExitStatus, Self::Errs> {
|
fn exec(&mut self) -> Result<ExitStatus, Self::Errs> {
|
||||||
let mut builder = ASTBuilder::new(self.cfg().copy());
|
let mut builder = ASTBuilder::new(self.cfg().copy());
|
||||||
let artifact = builder
|
let artifact = builder
|
||||||
|
|
|
@ -168,6 +168,7 @@ impl Runnable for Compiler {
|
||||||
fn set_input(&mut self, input: erg_common::io::Input) {
|
fn set_input(&mut self, input: erg_common::io::Input) {
|
||||||
self.cfg.input = input;
|
self.cfg.input = input;
|
||||||
self.builder.set_input(self.cfg.input.clone());
|
self.builder.set_input(self.cfg.input.clone());
|
||||||
|
self.builder.main_builder.set_input(self.cfg.input.clone());
|
||||||
self.code_generator.set_input(self.cfg.input.clone());
|
self.code_generator.set_input(self.cfg.input.clone());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -91,9 +91,11 @@ impl _Compiler {
|
||||||
.map(|art| art.object)
|
.map(|art| art.object)
|
||||||
.map_err(|iart| iart.errors)?;
|
.map_err(|iart| iart.errors)?;
|
||||||
let bytes = code.into_bytes(py.version().parse().unwrap());
|
let bytes = code.into_bytes(py.version().parse().unwrap());
|
||||||
let dict = [("bytes", PyBytes::new(py, &bytes))].into_py_dict(py);
|
let dict = [("bytes", PyBytes::new_bound(py, &bytes))].into_py_dict_bound(py);
|
||||||
py.run("import marshal", None, None).unwrap();
|
py.run_bound("import marshal", None, None).unwrap();
|
||||||
let code = py.eval("marshal.loads(bytes)", None, Some(dict)).unwrap();
|
let code = py
|
||||||
|
.eval_bound("marshal.loads(bytes)", None, Some(&dict))
|
||||||
|
.unwrap();
|
||||||
Ok(code.into())
|
Ok(code.into())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -129,10 +131,10 @@ impl _Compiler {
|
||||||
.map(|art| art.object)
|
.map(|art| art.object)
|
||||||
.map_err(|iart| iart.errors)?;
|
.map_err(|iart| iart.errors)?;
|
||||||
let bytes = code.into_bytes(py.version().parse().unwrap());
|
let bytes = code.into_bytes(py.version().parse().unwrap());
|
||||||
let dict = [("bytes", PyBytes::new(py, &bytes))].into_py_dict(py);
|
let dict = [("bytes", PyBytes::new_bound(py, &bytes))].into_py_dict_bound(py);
|
||||||
py.run("import marshal", None, None).unwrap();
|
py.run_bound("import marshal", None, None).unwrap();
|
||||||
Ok(py
|
Ok(py
|
||||||
.eval("marshal.loads(bytes)", None, Some(dict))
|
.eval_bound("marshal.loads(bytes)", None, Some(&dict))
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.into())
|
.into())
|
||||||
}
|
}
|
||||||
|
@ -248,9 +250,9 @@ fn _exec_with_dependencies(
|
||||||
path: Option<String>,
|
path: Option<String>,
|
||||||
) -> Result<PyObject, error::CompileErrors> {
|
) -> Result<PyObject, error::CompileErrors> {
|
||||||
let code = _compile_with_dependencies(py, code, "exec", pkgs, path)?;
|
let code = _compile_with_dependencies(py, code, "exec", pkgs, path)?;
|
||||||
let module = pyo3::types::PyModule::new(py, "<erg>").unwrap();
|
let module = pyo3::types::PyModule::new_bound(py, "<erg>").unwrap();
|
||||||
let dic = [("code", code), ("dict", PyObject::from(module.dict()))].into_py_dict(py);
|
let dic = [("code", code), ("dict", PyObject::from(module.dict()))].into_py_dict_bound(py);
|
||||||
py.run("exec(code, dict)", None, Some(dic)).unwrap();
|
py.run_bound("exec(code, dict)", None, Some(&dic)).unwrap();
|
||||||
Ok(module.into())
|
Ok(module.into())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -310,9 +312,9 @@ fn _exec_ast_with_dependencies(
|
||||||
path: Option<String>,
|
path: Option<String>,
|
||||||
) -> Result<PyObject, error::CompileErrors> {
|
) -> Result<PyObject, error::CompileErrors> {
|
||||||
let code = _compile_ast_with_dependencies(py, ast, "exec", pkgs, path)?;
|
let code = _compile_ast_with_dependencies(py, ast, "exec", pkgs, path)?;
|
||||||
let module = pyo3::types::PyModule::new(py, "<erg>").unwrap();
|
let module = pyo3::types::PyModule::new_bound(py, "<erg>").unwrap();
|
||||||
let dic = [("code", code), ("dict", PyObject::from(module.dict()))].into_py_dict(py);
|
let dic = [("code", code), ("dict", PyObject::from(module.dict()))].into_py_dict_bound(py);
|
||||||
py.run("exec(code, dict)", None, Some(dic)).unwrap();
|
py.run_bound("exec(code, dict)", None, Some(&dic)).unwrap();
|
||||||
Ok(module.into())
|
Ok(module.into())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -346,7 +348,7 @@ fn _import(py: Python<'_>, name: String) -> Result<PyObject, error::CompileError
|
||||||
|
|
||||||
#[cfg(feature = "pylib")]
|
#[cfg(feature = "pylib")]
|
||||||
#[pymodule]
|
#[pymodule]
|
||||||
fn erg_compiler(py: Python<'_>, m: &PyModule) -> PyResult<()> {
|
fn erg_compiler(py: Python<'_>, m: &Bound<PyModule>) -> PyResult<()> {
|
||||||
m.add_class::<Package>()?;
|
m.add_class::<Package>()?;
|
||||||
m.add_class::<_Compiler>()?;
|
m.add_class::<_Compiler>()?;
|
||||||
m.add_function(wrap_pyfunction!(_compile, m)?)?;
|
m.add_function(wrap_pyfunction!(_compile, m)?)?;
|
||||||
|
@ -364,11 +366,11 @@ fn erg_compiler(py: Python<'_>, m: &PyModule) -> PyResult<()> {
|
||||||
m.add_function(wrap_pyfunction!(_import, m)?)?;
|
m.add_function(wrap_pyfunction!(_import, m)?)?;
|
||||||
|
|
||||||
use crate::erg_parser::erg_parser;
|
use crate::erg_parser::erg_parser;
|
||||||
let parser = PyModule::new(py, "erg_parser")?;
|
let parser = PyModule::new_bound(py, "erg_parser")?;
|
||||||
erg_parser(py, parser)?;
|
erg_parser(py, &parser)?;
|
||||||
m.add_submodule(parser)?;
|
m.add_submodule(&parser)?;
|
||||||
|
|
||||||
py.run(
|
py.run_bound(
|
||||||
"\
|
"\
|
||||||
import sys
|
import sys
|
||||||
sys.modules['erg_compiler.erg_parser'] = erg_parser
|
sys.modules['erg_compiler.erg_parser'] = erg_parser
|
||||||
|
@ -376,7 +378,7 @@ sys.modules['erg_compiler.erg_parser.ast'] = erg_parser.ast
|
||||||
sys.modules['erg_compiler.erg_parser.expr'] = erg_parser.expr
|
sys.modules['erg_compiler.erg_parser.expr'] = erg_parser.expr
|
||||||
",
|
",
|
||||||
None,
|
None,
|
||||||
Some(m.dict()),
|
Some(&m.dict()),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
|
@ -107,6 +107,11 @@ impl<ASTBuilder: ASTBuildable> Runnable for GenericASTLowerer<ASTBuilder> {
|
||||||
&mut self.cfg
|
&mut self.cfg
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn set_input(&mut self, input: erg_common::io::Input) {
|
||||||
|
self.module.context.cfg.input = input.clone();
|
||||||
|
self.cfg.input = input;
|
||||||
|
}
|
||||||
|
|
||||||
#[inline]
|
#[inline]
|
||||||
fn finish(&mut self) {}
|
fn finish(&mut self) {}
|
||||||
|
|
||||||
|
|
|
@ -3572,7 +3572,7 @@ pub enum TypeSpec {
|
||||||
#[cfg(feature = "pylib")]
|
#[cfg(feature = "pylib")]
|
||||||
impl IntoPy<PyObject> for TypeSpec {
|
impl IntoPy<PyObject> for TypeSpec {
|
||||||
fn into_py(self, py: Python<'_>) -> PyObject {
|
fn into_py(self, py: Python<'_>) -> PyObject {
|
||||||
pyo3::types::PyNone::get(py).into()
|
pyo3::types::PyNone::get_bound(py).to_object(py)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -36,9 +36,9 @@ fn _parse(code: String) -> Result<ast::Module, error::ParseErrors> {
|
||||||
|
|
||||||
#[cfg(feature = "pylib")]
|
#[cfg(feature = "pylib")]
|
||||||
#[cfg_attr(feature = "pylib_parser", pymodule)]
|
#[cfg_attr(feature = "pylib_parser", pymodule)]
|
||||||
pub fn erg_parser(py: Python<'_>, m: &PyModule) -> PyResult<()> {
|
pub fn erg_parser(py: Python<'_>, m: &Bound<PyModule>) -> PyResult<()> {
|
||||||
m.add_function(wrap_pyfunction!(_parse, m)?)?;
|
m.add_function(wrap_pyfunction!(_parse, m)?)?;
|
||||||
let expr = PyModule::new(py, "expr")?;
|
let expr = PyModule::new_bound(py, "expr")?;
|
||||||
expr.add_class::<ast::Literal>()?;
|
expr.add_class::<ast::Literal>()?;
|
||||||
expr.add_class::<ast::NormalList>()?;
|
expr.add_class::<ast::NormalList>()?;
|
||||||
expr.add_class::<ast::NormalTuple>()?;
|
expr.add_class::<ast::NormalTuple>()?;
|
||||||
|
@ -59,9 +59,9 @@ pub fn erg_parser(py: Python<'_>, m: &PyModule) -> PyResult<()> {
|
||||||
expr.add_class::<ast::Compound>()?;
|
expr.add_class::<ast::Compound>()?;
|
||||||
expr.add_class::<ast::InlineModule>()?;
|
expr.add_class::<ast::InlineModule>()?;
|
||||||
expr.add_class::<ast::Dummy>()?;
|
expr.add_class::<ast::Dummy>()?;
|
||||||
m.add_submodule(expr)?;
|
m.add_submodule(&expr)?;
|
||||||
|
|
||||||
let ast = PyModule::new(py, "ast")?;
|
let ast = PyModule::new_bound(py, "ast")?;
|
||||||
ast.add_class::<token::Token>()?;
|
ast.add_class::<token::Token>()?;
|
||||||
ast.add_class::<token::TokenKind>()?;
|
ast.add_class::<token::TokenKind>()?;
|
||||||
ast.add_class::<ast::Literal>()?;
|
ast.add_class::<ast::Literal>()?;
|
||||||
|
@ -96,16 +96,16 @@ pub fn erg_parser(py: Python<'_>, m: &PyModule) -> PyResult<()> {
|
||||||
ast.add_class::<ast::Dummy>()?;
|
ast.add_class::<ast::Dummy>()?;
|
||||||
ast.add_class::<ast::Module>()?;
|
ast.add_class::<ast::Module>()?;
|
||||||
ast.add_class::<ast::AST>()?;
|
ast.add_class::<ast::AST>()?;
|
||||||
m.add_submodule(ast)?;
|
m.add_submodule(&ast)?;
|
||||||
|
|
||||||
py.run(
|
py.run_bound(
|
||||||
"\
|
"\
|
||||||
import sys
|
import sys
|
||||||
sys.modules['erg_parser.ast'] = ast
|
sys.modules['erg_parser.ast'] = ast
|
||||||
sys.modules['erg_parser.expr'] = expr
|
sys.modules['erg_parser.expr'] = expr
|
||||||
",
|
",
|
||||||
None,
|
None,
|
||||||
Some(m.dict()),
|
Some(&m.dict()),
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue