Add an ast optimizer

This commit is contained in:
Noah 2021-04-04 18:03:19 -05:00
parent 9941eef853
commit a9330765fa

View file

@ -1,6 +1,7 @@
use rustpython_bytecode::CodeObject; use rustpython_bytecode::CodeObject;
use rustpython_compiler_core::{compile, symboltable}; use rustpython_compiler_core::{compile, symboltable};
use rustpython_parser::{ast::Location, parser}; use rustpython_parser::ast::{fold::Fold, ConstantOptimizer, Location};
use rustpython_parser::parser;
use std::fmt; use std::fmt;
pub use compile::{CompileOpts, Mode}; pub use compile::{CompileOpts, Mode};
@ -80,10 +81,15 @@ pub fn compile(
compile::Mode::Eval => parser::Mode::Expression, compile::Mode::Eval => parser::Mode::Expression,
compile::Mode::Single => parser::Mode::Interactive, compile::Mode::Single => parser::Mode::Interactive,
}; };
let ast = match parser::parse(source, mode) { let mut ast = match parser::parse(source, mode) {
Ok(x) => x, Ok(x) => x,
Err(e) => return Err(CompileError::from_parse(e, source, source_path)), Err(e) => return Err(CompileError::from_parse(e, source, source_path)),
}; };
if opts.optimize > 0 {
ast = ConstantOptimizer::new()
.fold_mod(ast)
.unwrap_or_else(|e| match e {});
}
compile::compile_top(&ast, source_path, opts).map_err(|e| CompileError::from_compile(e, source)) compile::compile_top(&ast, source_path, opts).map_err(|e| CompileError::from_compile(e, source))
} }