summaryrefslogtreecommitdiff
path: root/src/eval
diff options
context:
space:
mode:
authorMartin Haug <mhaug@live.de>2021-10-31 11:46:12 +0100
committerMartin Haug <mhaug@live.de>2021-11-05 13:44:49 +0100
commit84d35efee38d137a77e368c50421ac24327371c6 (patch)
treec2fa9f669743d35cbb79892770427dd843202894 /src/eval
parent4875633acf4701705b9b3b014eb7d94268b897c2 (diff)
Less owning, more iterating
Diffstat (limited to 'src/eval')
-rw-r--r--src/eval/capture.rs16
-rw-r--r--src/eval/mod.rs14
-rw-r--r--src/eval/walk.rs4
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 &params_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(())
}