On 2/19/20 9:15 AM, Joseph Wright wrote:
> On 19/02/2020 00:50, Phelype Oleinik wrote:
>> Hi Kelly,
>>
>>> - Are all boxes and coffins made so that their content is wrapped in
>>> a TeX group?
>>>    More specifically, is it safe for code to assume that all
>>> box/coffin content is
>>>    implicity grouped?
>>
>> Yes, because the underlying TeX box makes a group:
>>      \count0=1 \hbox{\count0=2 }\the\count0 \bye
>> so you can assume the grouping.
> 
> All boxes are also explicitly documented as colour-safe, so have an
> additional group level.
> 
>>> - Many functions in expl3 are of the form `a := func(b, c)` (e.g.
>>> `\str_concat:NNN`,
>>>    `\seq_set_map:NNn`) or `a := func(b)` (e.g. `\int_set:Nn`,
>>> `\tl_set:Nn`).
>>>    Sometimes, one will want to write code like `a := func(a, b)` or
>>> `a := func(a)`,
>>>    that is, directly assign a new value to a variable based on its
>>> current value.
>>>    Is it ever safe to write such code in expl3?
>>
>> Yes, because first `func(a, b)` is evaluated, and only then
>> the assignment is performed. Something like:
>>      \def\x{b} \edef\x{a\x c}
>> makes `\x=macro:->abc`.
>>
>> Though this last one may depend a bit on the macro
>> implementation (if the function needs intermediate steps
>> to do its job, for example), but I'd expect to able to rely
>> on that behaviour.
> 
> This is safe for all expl3 functions.
> 
> Joseph

We should definitely document both things.
Bruno