Eliminate optimize module with no_optimize.

This commit is contained in:
Stephen Chung
2021-10-21 19:17:34 +08:00
parent 315a891ba6
commit 65ef402440
6 changed files with 63 additions and 28 deletions

View File

@@ -9,7 +9,6 @@ use crate::dynamic::AccessMode;
use crate::engine::{Precedence, KEYWORD_THIS, OP_CONTAINS};
use crate::fn_hash::get_hasher;
use crate::module::NamespaceRef;
use crate::optimize::{optimize_into_ast, OptimizationLevel};
use crate::token::{
is_keyword_function, is_valid_function_name, is_valid_identifier, Token, TokenStream,
TokenizerControl,
@@ -3219,8 +3218,9 @@ impl Engine {
input: &mut TokenStream,
state: &mut ParseState,
scope: &Scope,
optimization_level: OptimizationLevel,
#[cfg(not(feature = "no_optimize"))] optimization_level: crate::OptimizationLevel,
) -> Result<AST, ParseError> {
let _scope = scope;
let mut functions = Default::default();
let settings = ParseSettings {
@@ -3249,16 +3249,17 @@ impl Engine {
let mut statements = StaticVec::new();
statements.push(Stmt::Expr(expr));
Ok(
// Optimize AST
optimize_into_ast(
self,
scope,
statements,
Default::default(),
optimization_level,
),
)
#[cfg(not(feature = "no_optimize"))]
return Ok(crate::optimize::optimize_into_ast(
self,
_scope,
statements,
Default::default(),
optimization_level,
));
#[cfg(feature = "no_optimize")]
return Ok(AST::new(statements, crate::Module::new()));
}
/// Parse the global level statements.
@@ -3328,13 +3329,29 @@ impl Engine {
input: &mut TokenStream,
state: &mut ParseState,
scope: &Scope,
optimization_level: OptimizationLevel,
#[cfg(not(feature = "no_optimize"))] optimization_level: crate::OptimizationLevel,
) -> Result<AST, ParseError> {
let _scope = scope;
let (statements, lib) = self.parse_global_level(input, state)?;
Ok(
// Optimize AST
optimize_into_ast(self, scope, statements, lib, optimization_level),
)
#[cfg(not(feature = "no_optimize"))]
return Ok(crate::optimize::optimize_into_ast(
self,
_scope,
statements,
lib,
optimization_level,
));
#[cfg(feature = "no_optimize")]
{
let mut m = crate::Module::new();
lib.into_iter().for_each(|fn_def| {
m.set_script_fn(fn_def);
});
return Ok(AST::new(statements, m));
}
}
}