summaryrefslogtreecommitdiff
path: root/src/exec
diff options
context:
space:
mode:
Diffstat (limited to 'src/exec')
-rw-r--r--src/exec/context.rs10
-rw-r--r--src/exec/mod.rs19
2 files changed, 7 insertions, 22 deletions
diff --git a/src/exec/context.rs b/src/exec/context.rs
index 93ffaf96..016b092a 100644
--- a/src/exec/context.rs
+++ b/src/exec/context.rs
@@ -2,7 +2,6 @@ use std::mem;
use super::{Exec, FontFamily, State};
use crate::diag::{Diag, DiagSet, Pass};
-use crate::env::Env;
use crate::eval::TemplateValue;
use crate::geom::{Align, Dir, Gen, GenAxis, Length, Linear, Sides, Size};
use crate::layout::{
@@ -11,9 +10,7 @@ use crate::layout::{
use crate::syntax::Span;
/// The context for execution.
-pub struct ExecContext<'a> {
- /// The environment from which resources are gathered.
- pub env: &'a mut Env,
+pub struct ExecContext {
/// The active execution state.
pub state: State,
/// Execution diagnostics.
@@ -27,11 +24,10 @@ pub struct ExecContext<'a> {
stack: StackBuilder,
}
-impl<'a> ExecContext<'a> {
+impl ExecContext {
/// Create a new execution context with a base state.
- pub fn new(env: &'a mut Env, state: State) -> Self {
+ pub fn new(state: State) -> Self {
Self {
- env,
diags: DiagSet::new(),
tree: Tree { runs: vec![] },
page: Some(PageBuilder::new(&state, true)),
diff --git a/src/exec/mod.rs b/src/exec/mod.rs
index b6765d1e..643d5b44 100644
--- a/src/exec/mod.rs
+++ b/src/exec/mod.rs
@@ -9,29 +9,18 @@ pub use state::*;
use std::rc::Rc;
use crate::diag::Pass;
-use crate::env::Env;
use crate::eval::{NodeMap, TemplateFunc, TemplateNode, TemplateValue, Value};
use crate::layout;
use crate::pretty::pretty;
use crate::syntax::*;
-/// Execute a syntax tree to produce a layout tree.
-///
-/// The `map` shall be a node map computed for this tree with
-/// [`eval`](crate::eval::eval). Note that `tree` must be the _exact_ same tree
-/// as used for evaluation (no cloned version), because the node map depends on
-/// the pointers being stable.
+/// Execute a template to produce a layout tree.
///
/// The `state` is the base state that may be updated over the course of
/// execution.
-pub fn exec(
- env: &mut Env,
- tree: &Tree,
- map: &NodeMap,
- state: State,
-) -> Pass<layout::Tree> {
- let mut ctx = ExecContext::new(env, state);
- tree.exec_with_map(&mut ctx, &map);
+pub fn exec(template: &TemplateValue, state: State) -> Pass<layout::Tree> {
+ let mut ctx = ExecContext::new(state);
+ template.exec(&mut ctx);
ctx.finish()
}