summaryrefslogtreecommitdiff
path: root/crates
diff options
context:
space:
mode:
authorPgBiel <9021226+PgBiel@users.noreply.github.com>2023-12-18 08:30:03 -0300
committerGitHub <noreply@github.com>2023-12-18 12:30:03 +0100
commiteb9dd539aa394a9909989f8bacd1a0c6e54e4c2a (patch)
tree96ec9470cc34135aca260c96de7be5d4aa0fbf98 /crates
parent22ba6825db3b82e0b0f83ef6052f17289893e385 (diff)
Fix unnamed sinks not capturing named args (#2984)
Diffstat (limited to 'crates')
-rw-r--r--crates/typst/src/eval/call.rs13
1 files changed, 8 insertions, 5 deletions
diff --git a/crates/typst/src/eval/call.rs b/crates/typst/src/eval/call.rs
index daa12cff..fd660e94 100644
--- a/crates/typst/src/eval/call.rs
+++ b/crates/typst/src/eval/call.rs
@@ -306,7 +306,7 @@ pub(crate) fn call_closure(
}
},
ast::Param::Sink(ident) => {
- sink = ident.name();
+ sink = Some(ident.name());
if let Some(sink_size) = sink_size {
sink_pos_values = Some(args.consume(sink_size)?);
}
@@ -321,12 +321,15 @@ pub(crate) fn call_closure(
}
}
- if let Some(sink) = sink {
+ if let Some(sink_name) = sink {
+ // Remaining args are captured regardless of whether the sink is named.
let mut remaining_args = args.take();
- if let Some(sink_pos_values) = sink_pos_values {
- remaining_args.items.extend(sink_pos_values);
+ if let Some(sink_name) = sink_name {
+ if let Some(sink_pos_values) = sink_pos_values {
+ remaining_args.items.extend(sink_pos_values);
+ }
+ vm.define(sink_name, remaining_args);
}
- vm.define(sink, remaining_args);
}
// Ensure all arguments have been used.