diff options
| author | Martin Haug <mhaug@live.de> | 2021-10-31 11:46:12 +0100 |
|---|---|---|
| committer | Martin Haug <mhaug@live.de> | 2021-11-05 13:44:49 +0100 |
| commit | 84d35efee38d137a77e368c50421ac24327371c6 (patch) | |
| tree | c2fa9f669743d35cbb79892770427dd843202894 /src/eval | |
| parent | 4875633acf4701705b9b3b014eb7d94268b897c2 (diff) | |
Less owning, more iterating
Diffstat (limited to 'src/eval')
| -rw-r--r-- | src/eval/capture.rs | 16 | ||||
| -rw-r--r-- | src/eval/mod.rs | 14 | ||||
| -rw-r--r-- | src/eval/walk.rs | 4 |
3 files changed, 16 insertions, 18 deletions
diff --git a/src/eval/capture.rs b/src/eval/capture.rs index baf59747..b71e1ac1 100644 --- a/src/eval/capture.rs +++ b/src/eval/capture.rs @@ -1,7 +1,7 @@ use std::rc::Rc; use super::{Scope, Scopes, Value}; -use crate::syntax::{ClosureParam, Expr, Imports, RedTicket}; +use crate::syntax::{ClosureParam, Expr, Imports, RedRef}; /// A visitor that captures variable slots. pub struct CapturesVisitor<'a> { @@ -20,12 +20,12 @@ impl<'a> CapturesVisitor<'a> { } } - pub fn visit(&mut self, node: RedTicket) { + pub fn visit(&mut self, node: RedRef) { let expr: Option<Expr> = node.cast(); match expr.as_ref() { Some(Expr::Let(expr)) => { - self.visit(expr.init_ticket()); + self.visit(expr.init_ref()); let ident = expr.binding(); self.internal.def_mut(ident.as_str(), Value::None); } @@ -40,7 +40,7 @@ impl<'a> CapturesVisitor<'a> { } } } - self.visit(closure.body_ticket()); + self.visit(closure.body_ref()); } Some(Expr::For(forloop)) => { let pattern = forloop.pattern(); @@ -49,7 +49,7 @@ impl<'a> CapturesVisitor<'a> { if let Some(key) = pattern.key() { self.internal.def_mut(key.as_str(), Value::None); } - self.visit(forloop.body_ticket()); + self.visit(forloop.body_ref()); } Some(Expr::Import(import)) => { if let Imports::Idents(idents) = import.imports() { @@ -73,7 +73,7 @@ impl<'a> CapturesVisitor<'a> { Some(Expr::Block(_)) => { self.internal.enter(); - for child in node.own().children() { + for child in node.children() { self.visit(child); } self.internal.exit(); @@ -81,14 +81,14 @@ impl<'a> CapturesVisitor<'a> { Some(Expr::Template(_)) => { self.internal.enter(); - for child in node.own().children() { + for child in node.children() { self.visit(child); } self.internal.exit(); } _ => { - for child in node.own().children() { + for child in node.children() { self.visit(child); } } diff --git a/src/eval/mod.rs b/src/eval/mod.rs index 296e3380..8d31c177 100644 --- a/src/eval/mod.rs +++ b/src/eval/mod.rs @@ -230,7 +230,7 @@ impl Eval for ArrayExpr { type Output = Array; fn eval(&self, ctx: &mut EvalContext) -> TypResult<Self::Output> { - self.items().iter().map(|expr| expr.eval(ctx)).collect() + self.items().map(|expr| expr.eval(ctx)).collect() } } @@ -239,7 +239,6 @@ impl Eval for DictExpr { fn eval(&self, ctx: &mut EvalContext) -> TypResult<Self::Output> { self.items() - .iter() .map(|x| Ok(((&x.name().string).into(), x.expr().eval(ctx)?))) .collect() } @@ -268,7 +267,7 @@ impl Eval for BlockExpr { ctx.scopes.enter(); let mut output = Value::None; - for expr in &self.exprs() { + for expr in self.exprs() { let value = expr.eval(ctx)?; output = ops::join(output, value).at(expr.span())?; } @@ -387,9 +386,9 @@ impl Eval for CallArgs { type Output = Args; fn eval(&self, ctx: &mut EvalContext) -> TypResult<Self::Output> { - let mut items = Vec::with_capacity(self.items().len()); + let mut items = Vec::new(); - for arg in &self.items() { + for arg in self.items() { let span = arg.span(); match arg { CallArg::Pos(expr) => { @@ -454,11 +453,10 @@ impl Eval for ClosureExpr { }; let mut sink = None; - let params_src = self.params(); - let mut params = Vec::with_capacity(params_src.len()); + let mut params = Vec::new(); // Collect parameters and an optional sink parameter. - for param in ¶ms_src { + for param in self.params() { match param { ClosureParam::Pos(name) => { params.push((name.string.clone(), None)); diff --git a/src/eval/walk.rs b/src/eval/walk.rs index e4d7f61a..b28f4fde 100644 --- a/src/eval/walk.rs +++ b/src/eval/walk.rs @@ -69,7 +69,7 @@ impl Walk for RawNode { impl Walk for HeadingNode { fn walk(&self, ctx: &mut EvalContext) -> TypResult<()> { - let level = self.level().0; + let level = self.level(); let body = self.body().eval(ctx)?; ctx.template.parbreak(); @@ -99,7 +99,7 @@ impl Walk for ListNode { impl Walk for EnumNode { fn walk(&self, ctx: &mut EvalContext) -> TypResult<()> { let body = self.body().eval(ctx)?; - let label = format_str!("{}.", self.number().0.unwrap_or(1)); + let label = format_str!("{}.", self.number().unwrap_or(1)); walk_item(ctx, label, body); Ok(()) } |
