Refactor Mode and partial parser/codegen for eval/exec

This commit is contained in:
Jeong YunWon 2022-08-22 06:09:18 +09:00
parent 9c229ebb99
commit 3690272256
5 changed files with 7 additions and 2 deletions

View file

@ -18,7 +18,7 @@ use rustpython_ast as ast;
use rustpython_bytecode::{self as bytecode, CodeObject, ConstantData, Instruction};
use std::borrow::Cow;
pub use crate::mode::Mode;
pub use rustpython_bytecode::Mode;
type CompileResult<T> = Result<T, CompileError>;

View file

@ -11,7 +11,6 @@ type IndexSet<T> = indexmap::IndexSet<T, ahash::RandomState>;
pub mod compile;
pub mod error;
pub mod ir;
pub mod mode;
pub mod symboltable;
pub use compile::{CompileOpts, Mode};

View file

@ -1,32 +0,0 @@
#[derive(Clone, Copy)]
pub enum Mode {
Exec,
Eval,
Single,
BlockExpr,
}
impl std::str::FromStr for Mode {
type Err = ModeParseError;
// To support `builtins.compile()` `mode` argument
fn from_str(s: &str) -> Result<Self, ModeParseError> {
match s {
"exec" => Ok(Mode::Exec),
"eval" => Ok(Mode::Eval),
"single" => Ok(Mode::Single),
_ => Err(ModeParseError { _priv: () }),
}
}
}
#[derive(Debug)]
pub struct ModeParseError {
_priv: (),
}
impl std::fmt::Display for ModeParseError {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
write!(f, r#"mode should be "exec", "eval", or "single""#)
}
}