diff options
| author | PgBiel <9021226+PgBiel@users.noreply.github.com> | 2023-12-18 08:30:03 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-12-18 12:30:03 +0100 |
| commit | eb9dd539aa394a9909989f8bacd1a0c6e54e4c2a (patch) | |
| tree | 96ec9470cc34135aca260c96de7be5d4aa0fbf98 /crates | |
| parent | 22ba6825db3b82e0b0f83ef6052f17289893e385 (diff) | |
Fix unnamed sinks not capturing named args (#2984)
Diffstat (limited to 'crates')
| -rw-r--r-- | crates/typst/src/eval/call.rs | 13 |
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. |
