Skip to content

Commit 07e339a

Browse files
committed
Create vm::compiler to handle CompileError variations
1 parent d876673 commit 07e339a

10 files changed

Lines changed: 41 additions & 34 deletions

File tree

src/shell.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ mod helper;
33
use rustpython_parser::error::{LexicalErrorType, ParseErrorType};
44
use rustpython_vm::{
55
builtins::PyBaseExceptionRef,
6-
compile::{self, CompileError, CompileErrorBody, CompileErrorType},
6+
compiler::{self, CompileError, CompileErrorBody, CompileErrorType},
77
readline::{Readline, ReadlineResult},
88
scope::Scope,
99
AsObject, PyResult, VirtualMachine,
@@ -16,7 +16,7 @@ enum ShellExecResult {
1616
}
1717

1818
fn shell_exec(vm: &VirtualMachine, source: &str, scope: Scope) -> ShellExecResult {
19-
match vm.compile(source, compile::Mode::Single, "<stdin>".to_owned()) {
19+
match vm.compile(source, compiler::Mode::Single, "<stdin>".to_owned()) {
2020
Ok(code) => match vm.run_code_obj(code, scope) {
2121
Ok(_val) => ShellExecResult::Ok,
2222
Err(err) => ShellExecResult::PyErr(err),

stdlib/src/dis.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ mod decl {
55
use crate::vm::{
66
builtins::{PyCode, PyDictRef, PyStrRef},
77
bytecode::CodeFlags,
8-
compile, PyObjectRef, PyRef, PyResult, TryFromObject, VirtualMachine,
8+
compiler, PyObjectRef, PyRef, PyResult, TryFromObject, VirtualMachine,
99
};
1010

1111
#[pyfunction]
@@ -15,7 +15,7 @@ mod decl {
1515
PyRef::try_from_object(vm, co)?
1616
} else if let Ok(co_str) = PyStrRef::try_from_object(vm, obj.clone()) {
1717
// String:
18-
vm.compile(co_str.as_str(), compile::Mode::Exec, "<dis>".to_owned())
18+
vm.compile(co_str.as_str(), compiler::Mode::Exec, "<dis>".to_owned())
1919
.map_err(|err| vm.new_syntax_error(&err))?
2020
} else {
2121
PyRef::try_from_object(vm, obj)?

vm/src/compiler.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
#[cfg(feature = "rustpython-codegen")]
2+
pub use rustpython_codegen::CompileOpts;
3+
#[cfg(feature = "rustpython-compiler")]
4+
pub use rustpython_compiler::*;
5+
pub use rustpython_compiler_core::Mode;
6+
7+
#[cfg(not(feature = "rustpython-compiler"))]
8+
mod error {
9+
#[cfg(all(feature = "rustpython-parser", feature = "rustpython-codegen"))]
10+
panic!("Use --features=compiler to enable both parser and codegen");
11+
#[cfg(feature = "rustpython-parser")]
12+
pub type CompileError = rustpython_compiler_core::CompileError<rustpython_parser::ParseError>;
13+
#[cfg(feature = "rustpython-codegen")]
14+
pub type CompileError =
15+
rustpython_compiler_core::CompileError<rustpython_codegen::CodegenError>;
16+
}

vm/src/eval.rs

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
1-
use crate::compile;
2-
use crate::scope::Scope;
3-
use crate::PyResult;
4-
use crate::VirtualMachine;
1+
use crate::{compiler, scope::Scope, PyResult, VirtualMachine};
52

63
pub fn eval(vm: &VirtualMachine, source: &str, scope: Scope, source_path: &str) -> PyResult {
7-
match vm.compile(source, compile::Mode::Eval, source_path.to_owned()) {
4+
match vm.compile(source, compiler::Mode::Eval, source_path.to_owned()) {
85
Ok(bytecode) => {
96
debug!("Code object: {:?}", bytecode);
107
vm.run_code_obj(bytecode, scope)

vm/src/import.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ pub fn import_file(
111111
let code = vm
112112
.compile_with_opts(
113113
&content,
114-
crate::compile::Mode::Exec,
114+
crate::compiler::Mode::Exec,
115115
file_path,
116116
vm.compile_opts(),
117117
)

vm/src/lib.rs

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -87,13 +87,7 @@ pub use self::vm::{Context, Interpreter, Settings, VirtualMachine};
8787
pub use rustpython_common as common;
8888
pub use rustpython_compiler_core as bytecode;
8989

90-
pub mod compile {
91-
#[cfg(feature = "rustpython-codegen")]
92-
pub use rustpython_codegen::CompileOpts;
93-
#[cfg(feature = "rustpython-compiler")]
94-
pub use rustpython_compiler::*;
95-
pub use rustpython_compiler_core::Mode;
96-
}
90+
pub mod compiler;
9791

9892
#[doc(hidden)]
9993
pub mod __exports {

vm/src/stdlib/builtins.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ use crate::{class::PyClassImpl, PyObjectRef, VirtualMachine};
99
#[pymodule]
1010
mod builtins {
1111
#[cfg(feature = "rustpython-compiler")]
12-
use crate::compile;
1312
use crate::{
1413
builtins::{
1514
asyncgenerator::PyAsyncGen,
@@ -21,6 +20,7 @@ mod builtins {
2120
PyByteArray, PyBytes, PyDictRef, PyStr, PyStrRef, PyTuple, PyTupleRef, PyType,
2221
},
2322
common::{hash::PyHash, str::to_ascii},
23+
compiler,
2424
format::call_object_format,
2525
function::Either,
2626
function::{
@@ -144,7 +144,7 @@ mod builtins {
144144
#[cfg(feature = "rustpython-codegen")]
145145
{
146146
let mode = mode_str
147-
.parse::<compile::Mode>()
147+
.parse::<compiler::Mode>()
148148
.map_err(|err| vm.new_value_error(err.to_string()))?;
149149
return ast::compile(vm, args.source, args.filename.as_str(), mode);
150150
}
@@ -161,7 +161,7 @@ mod builtins {
161161
use rustpython_parser::parser;
162162

163163
let source = Either::<PyStrRef, PyBytesRef>::try_from_object(vm, args.source)?;
164-
// TODO: compile::compile should probably get bytes
164+
// TODO: compiler::compile should probably get bytes
165165
let source = match &source {
166166
Either::A(string) => string.as_str(),
167167
Either::B(bytes) => std::str::from_utf8(bytes)
@@ -178,7 +178,7 @@ mod builtins {
178178
#[cfg(feature = "rustpython-compiler")]
179179
{
180180
let mode = mode_str
181-
.parse::<compile::Mode>()
181+
.parse::<compiler::Mode>()
182182
.map_err(|err| vm.new_value_error(err.to_string()))?;
183183
let code = vm
184184
.compile(source, mode, args.filename.as_str().to_owned())
@@ -279,7 +279,7 @@ mod builtins {
279279
}
280280
Either::B(code) => Ok(Either::B(code)),
281281
}?;
282-
run_code(vm, code, scope, crate::compile::Mode::Eval, "eval")
282+
run_code(vm, code, scope, crate::compiler::Mode::Eval, "eval")
283283
}
284284

285285
/// Implements `exec`
@@ -290,14 +290,14 @@ mod builtins {
290290
scope: ScopeArgs,
291291
vm: &VirtualMachine,
292292
) -> PyResult {
293-
run_code(vm, source, scope, crate::compile::Mode::Exec, "exec")
293+
run_code(vm, source, scope, crate::compiler::Mode::Exec, "exec")
294294
}
295295

296296
fn run_code(
297297
vm: &VirtualMachine,
298298
source: Either<PyStrRef, PyRef<crate::builtins::PyCode>>,
299299
scope: ScopeArgs,
300-
#[allow(unused_variables)] mode: crate::compile::Mode,
300+
#[allow(unused_variables)] mode: crate::compiler::Mode,
301301
func: &str,
302302
) -> PyResult {
303303
let scope = scope.make_scope(vm)?;

vm/src/stdlib/symtable.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ pub(crate) use symtable::make_module;
33
#[pymodule]
44
mod symtable {
55
use crate::{
6-
builtins::PyStrRef, compile, PyObjectRef, PyPayload, PyRef, PyResult, VirtualMachine,
6+
builtins::PyStrRef, compiler, PyObjectRef, PyPayload, PyRef, PyResult, VirtualMachine,
77
};
88
use rustpython_codegen::symboltable::{Symbol, SymbolScope, SymbolTable, SymbolTableType};
99
use std::fmt;
@@ -19,10 +19,10 @@ mod symtable {
1919
) -> PyResult<PySymbolTableRef> {
2020
let mode = mode
2121
.as_str()
22-
.parse::<compile::Mode>()
22+
.parse::<compiler::Mode>()
2323
.map_err(|err| vm.new_value_error(err.to_string()))?;
2424

25-
let symtable = compile::compile_symtable(source.as_str(), mode, filename.as_str())
25+
let symtable = compiler::compile_symtable(source.as_str(), mode, filename.as_str())
2626
.map_err(|err| vm.new_syntax_error(&err))?;
2727

2828
let py_symbol_table = to_py_symbol_table(symtable);

vm/src/vm/compile.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::{
22
builtins::{PyCode, PyDictRef},
3-
compile::{self, CompileError, CompileOpts},
3+
compiler::{self, CompileError, CompileOpts},
44
convert::TryFromObject,
55
scope::Scope,
66
AsObject, PyObjectRef, PyRef, PyResult, VirtualMachine,
@@ -18,7 +18,7 @@ impl VirtualMachine {
1818
pub fn compile(
1919
&self,
2020
source: &str,
21-
mode: compile::Mode,
21+
mode: compiler::Mode,
2222
source_path: String,
2323
) -> Result<PyRef<PyCode>, CompileError> {
2424
self.compile_with_opts(source, mode, source_path, self.compile_opts())
@@ -27,11 +27,11 @@ impl VirtualMachine {
2727
pub fn compile_with_opts(
2828
&self,
2929
source: &str,
30-
mode: compile::Mode,
30+
mode: compiler::Mode,
3131
source_path: String,
3232
opts: CompileOpts,
3333
) -> Result<PyRef<PyCode>, CompileError> {
34-
compile::compile(source, mode, source_path, opts).map(|code| self.ctx.new_code(code))
34+
compiler::compile(source, mode, source_path, opts).map(|code| self.ctx.new_code(code))
3535
}
3636

3737
pub fn run_script(&self, scope: Scope, path: &str) -> PyResult<()> {
@@ -68,7 +68,7 @@ impl VirtualMachine {
6868

6969
pub fn run_code_string(&self, scope: Scope, source: &str, source_path: String) -> PyResult {
7070
let code_obj = self
71-
.compile(source, compile::Mode::Exec, source_path.clone())
71+
.compile(source, compiler::Mode::Exec, source_path.clone())
7272
.map_err(|err| self.new_syntax_error(&err))?;
7373
// trace!("Code object: {:?}", code_obj.borrow());
7474
scope.globals.set_item(
@@ -81,7 +81,7 @@ impl VirtualMachine {
8181

8282
pub fn run_block_expr(&self, scope: Scope, source: &str) -> PyResult {
8383
let code_obj = self
84-
.compile(source, compile::Mode::BlockExpr, "<embedded>".to_owned())
84+
.compile(source, compiler::Mode::BlockExpr, "<embedded>".to_owned())
8585
.map_err(|err| self.new_syntax_error(&err))?;
8686
// trace!("Code object: {:?}", code_obj.borrow());
8787
self.run_code_obj(code_obj, scope)

vm/src/vm/vm_new.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#[cfg(feature = "rustpython-compiler")]
2-
use crate::compile::{CompileError, CompileErrorType};
2+
use crate::compiler::{CompileError, CompileErrorType};
33
use crate::{
44
builtins::{
55
pystr::IntoPyStrRef,

0 commit comments

Comments
 (0)