Skip to content

Commit a933076

Browse files
committed
Add an ast optimizer
1 parent 9941eef commit a933076

1 file changed

Lines changed: 8 additions & 2 deletions

File tree

‎porcelain/src/lib.rs‎

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use rustpython_bytecode::CodeObject;
22
use rustpython_compiler_core::{compile, symboltable};
3-
use rustpython_parser::{ast::Location, parser};
3+
use rustpython_parser::ast::{fold::Fold, ConstantOptimizer, Location};
4+
use rustpython_parser::parser;
45
use std::fmt;
56

67
pub use compile::{CompileOpts, Mode};
@@ -80,10 +81,15 @@ pub fn compile(
8081
compile::Mode::Eval => parser::Mode::Expression,
8182
compile::Mode::Single => parser::Mode::Interactive,
8283
};
83-
let ast = match parser::parse(source, mode) {
84+
let mut ast = match parser::parse(source, mode) {
8485
Ok(x) => x,
8586
Err(e) => return Err(CompileError::from_parse(e, source, source_path)),
8687
};
88+
if opts.optimize > 0 {
89+
ast = ConstantOptimizer::new()
90+
.fold_mod(ast)
91+
.unwrap_or_else(|e| match e {});
92+
}
8793
compile::compile_top(&ast, source_path, opts).map_err(|e| CompileError::from_compile(e, source))
8894
}
8995

0 commit comments

Comments
 (0)