mirror of
https://github.com/typst/typst
synced 2025-05-20 12:05:27 +08:00
Remove an unnecessary clone in loop evaluation (#3297)
This commit is contained in:
parent
a434cbb64e
commit
a603729336
@ -1967,7 +1967,7 @@ impl<'a> ForLoop<'a> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// The expression to iterate over.
|
/// The expression to iterate over.
|
||||||
pub fn iter(self) -> Expr<'a> {
|
pub fn iterable(self) -> Expr<'a> {
|
||||||
self.0
|
self.0
|
||||||
.children()
|
.children()
|
||||||
.skip_while(|&c| c.kind() != SyntaxKind::In)
|
.skip_while(|&c| c.kind() != SyntaxKind::In)
|
||||||
|
@ -467,7 +467,7 @@ impl<'a> CapturesVisitor<'a> {
|
|||||||
// active after the iterable is evaluated but before the body is
|
// active after the iterable is evaluated but before the body is
|
||||||
// evaluated.
|
// evaluated.
|
||||||
Some(ast::Expr::For(expr)) => {
|
Some(ast::Expr::For(expr)) => {
|
||||||
self.visit(expr.iter().to_untyped());
|
self.visit(expr.iterable().to_untyped());
|
||||||
self.internal.enter();
|
self.internal.enter();
|
||||||
|
|
||||||
let pattern = expr.pattern();
|
let pattern = expr.pattern();
|
||||||
|
@ -134,10 +134,11 @@ impl Eval for ast::ForLoop<'_> {
|
|||||||
}};
|
}};
|
||||||
}
|
}
|
||||||
|
|
||||||
let iter = self.iter().eval(vm)?;
|
let iterable = self.iterable().eval(vm)?;
|
||||||
|
let iterable_type = iterable.ty();
|
||||||
let pattern = self.pattern();
|
let pattern = self.pattern();
|
||||||
|
|
||||||
match (&pattern, iter.clone()) {
|
match (&pattern, iterable) {
|
||||||
(ast::Pattern::Normal(_), Value::Str(string)) => {
|
(ast::Pattern::Normal(_), Value::Str(string)) => {
|
||||||
// Iterate over graphemes of string.
|
// Iterate over graphemes of string.
|
||||||
iter!(for pattern in string.as_str().graphemes(true));
|
iter!(for pattern in string.as_str().graphemes(true));
|
||||||
@ -151,10 +152,10 @@ impl Eval for ast::ForLoop<'_> {
|
|||||||
iter!(for pattern in array);
|
iter!(for pattern in array);
|
||||||
}
|
}
|
||||||
(ast::Pattern::Normal(_), _) => {
|
(ast::Pattern::Normal(_), _) => {
|
||||||
bail!(self.iter().span(), "cannot loop over {}", iter.ty());
|
bail!(self.iterable().span(), "cannot loop over {}", iterable_type);
|
||||||
}
|
}
|
||||||
(_, _) => {
|
(_, _) => {
|
||||||
bail!(pattern.span(), "cannot destructure values of {}", iter.ty())
|
bail!(pattern.span(), "cannot destructure values of {}", iterable_type)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user