1 | | Transcribed from IRC: basically, {{{##sys#canonicalize-body}}} reorders |
2 | | internal definitions so that multi-valued assignments always follow |
3 | | normal ones. The result is always a bunch of let bindings to introduce |
4 | | the vars followed by a bunch of {{{##core#set!}}} nodes to assign them, |
5 | | but the normal and multi-valued var/val pairs are accumulated in |
6 | | separate lists so the ordering gets lost. Then, the templating just |
7 | | blindly puts the multi-valued {{{##core#sets!}}} after the others. |
8 | | Currently, the "dimensions" of the lists are different, so to speak -- |
9 | | in the code, vars/vals gets a list of variables/expressions, whereas |
10 | | mvars/mvals gets a list of lists of variables/expressions -- and |
11 | | mvars/mvals has to be processed a bit more to produce a c-w-v. |
| 1 | Transcribed from IRC: basically, {{{##sys#canonicalize-body}}} reorders internal definitions so that multi-valued assignments always follow normal ones. The result is always a bunch of let bindings to introduce the vars followed by a bunch of {{{##core#set!}}} nodes to assign them, but the normal and multi-valued var/val pairs are accumulated in separate lists so the ordering gets lost. Then, the templating just blindly puts the multi-valued {{{##core#sets!}}} after the others. Currently, the "dimensions" of the lists are different, so to speak -- in the code, vars/vals gets a list of variables/expressions, whereas mvars/mvals gets a list of lists of variables/expressions -- and mvars/mvals has to be processed a bit more to produce a c-w-v. |