mod optimize;
mod missing;
mod operator;
mod path_segments;
mod walker;
use datavalue::OwnedDataValue;
use crate::node::{CompileCtx, Logic};
use crate::{Engine, Result};
impl Logic {
pub(crate) fn compile_with(logic: &OwnedDataValue, engine: &Engine) -> Result<Self> {
let ctx = if engine.constant_folding_enabled() {
CompileCtx::new()
} else {
CompileCtx::no_fold()
};
Self::compile_inner(logic, engine, ctx)
}
#[cfg(feature = "trace")]
pub(crate) fn compile_for_trace(logic: &OwnedDataValue, engine: &Engine) -> Result<Self> {
Self::compile_inner(logic, engine, CompileCtx::no_fold())
}
#[inline]
fn compile_inner(logic: &OwnedDataValue, engine: &Engine, mut ctx: CompileCtx) -> Result<Self> {
let root = walker::compile_node(
logic,
Some(engine),
engine.is_templating_enabled(),
&mut ctx,
)?;
Ok(Self::new(root))
}
}