summaryrefslogtreecommitdiff
path: root/src/exec/mod.rs
diff options
context:
space:
mode:
authorLaurenz <laurmaedje@gmail.com>2021-07-10 20:01:18 +0200
committerLaurenz <laurmaedje@gmail.com>2021-07-10 23:10:17 +0200
commit6a4823461f491aef63451f097ddfe5602e0b2157 (patch)
treead11b0ad169d030942d950573c729d50f7b3291b /src/exec/mod.rs
parent36b3067c19c8743032a44f888ee48702b88d135b (diff)
Reference-count complex values
Rename some nodes types
Diffstat (limited to 'src/exec/mod.rs')
-rw-r--r--src/exec/mod.rs27
1 files changed, 14 insertions, 13 deletions
diff --git a/src/exec/mod.rs b/src/exec/mod.rs
index 2a145fbc..752bdba5 100644
--- a/src/exec/mod.rs
+++ b/src/exec/mod.rs
@@ -10,15 +10,15 @@ use std::fmt::Write;
use std::rc::Rc;
use crate::diag::Pass;
-use crate::eval::{ExprMap, TemplateFunc, TemplateNode, TemplateValue, Value};
+use crate::eco::EcoString;
+use crate::eval::{ExprMap, Template, TemplateFunc, TemplateNode, TemplateTree, Value};
use crate::geom::{Dir, Gen};
use crate::layout::{LayoutTree, StackChild, StackNode};
use crate::pretty::pretty;
-use crate::eco::EcoString;
use crate::syntax::*;
/// Execute a template to produce a layout tree.
-pub fn exec(template: &TemplateValue, state: State) -> Pass<LayoutTree> {
+pub fn exec(template: &Template, state: State) -> Pass<LayoutTree> {
let mut ctx = ExecContext::new(state);
template.exec(&mut ctx);
ctx.finish()
@@ -50,7 +50,7 @@ impl ExecWithMap for SyntaxTree {
}
}
-impl ExecWithMap for Node {
+impl ExecWithMap for SyntaxNode {
fn exec_with_map(&self, ctx: &mut ExecContext, map: &ExprMap) {
match self {
Self::Text(text) => ctx.push_text(text),
@@ -117,12 +117,7 @@ impl ExecWithMap for EnumItem {
}
}
-fn exec_item(
- ctx: &mut ExecContext,
- label: EcoString,
- body: &SyntaxTree,
- map: &ExprMap,
-) {
+fn exec_item(ctx: &mut ExecContext, label: EcoString, body: &SyntaxTree, map: &ExprMap) {
let label = ctx.exec_stack(|ctx| ctx.push_text(label));
let body = ctx.exec_tree_stack(body, map);
let stack = StackNode {
@@ -159,7 +154,7 @@ impl Exec for Value {
}
}
-impl Exec for TemplateValue {
+impl Exec for Template {
fn exec(&self, ctx: &mut ExecContext) {
for node in self.iter() {
node.exec(ctx);
@@ -170,13 +165,19 @@ impl Exec for TemplateValue {
impl Exec for TemplateNode {
fn exec(&self, ctx: &mut ExecContext) {
match self {
- Self::Tree { tree, map } => tree.exec_with_map(ctx, &map),
- Self::Str(v) => ctx.push_text(v),
+ Self::Tree(v) => v.exec(ctx),
Self::Func(v) => v.exec(ctx),
+ Self::Str(v) => ctx.push_text(v),
}
}
}
+impl Exec for TemplateTree {
+ fn exec(&self, ctx: &mut ExecContext) {
+ self.tree.exec_with_map(ctx, &self.map)
+ }
+}
+
impl Exec for TemplateFunc {
fn exec(&self, ctx: &mut ExecContext) {
let snapshot = ctx.state.clone();