15:47
<nicolo-ribaudo>

Editorial question: if I were to write Return ? _foo_.[[Slot]], does it set _foo_.[[Slot]] to _foo_.[[Slot]].[[Value]] in case of a normal completion?

We use that notation in https://tc39.es/ecma262/#sec-innermoduleevaluation step 2.b. In that case it's guaranteed to always contain a throw completion, but seeing the syntax made me wonder how it would work.

15:51
<ljharb>
hm, it would for a variable, but I’m not sure the macro actually works in that case - if it does I’d say yes, it mutates the slot
15:52
<nicolo-ribaudo>
Maybe we should replace Return ? _foo_.[[Value]] with Return Completion(_foo_.[[Value]]) to avoid ambiguity in case somebody copy-pastes it in a case where a normal completion is possible
16:07
<Michael Ficarra>
I actually think we forgot to add a ? expansion for aliases (which we use in many places)
16:07
<Michael Ficarra>
ReturnIfAbrupt handles them fine, but no the ? shorthand
16:09
<Michael Ficarra>
assuming we made the ? shorthand work, the ReturnIfAbrupt expansion should work this way
16:11
<Michael Ficarra>
this conversation reminds me, I really want to get https://github.com/tc39/ecma262/pull/1573 in
17:46
<bakkot>
I do not think of ? as modifying anything, although I agree the current wording is ambiguous
17:46
<bakkot>
I actually want to get rid of ReturnIfAbrupt and just define ? and ! explicitly
17:46
<bakkot>
which would make this more clear
17:46
<Michael Ficarra>
yes, I will update #1573 to do that
17:47
<Michael Ficarra>
... whenever I get time
17:48
<bakkot>
just added a comment to https://github.com/tc39/ecma262/pull/1573 which I think does away with the ambiguity
17:52
<Michael Ficarra>
I mean, it's just a single form (let)
17:52
<Michael Ficarra>
it's missing Perform ? ..., Return ? ..., F(? ...), etc
17:53
<Michael Ficarra>
also, what happened to tmp5? 😖
17:59
<bakkot>
hey it's still valid, no one said the synthetic aliases had to have any particular names
18:00
<bakkot>

and the idea is that the other cases are handled by the last sentence:

When ? or ! is used in a more complex expression, first apply the rewrite given in [previous section] to the complex expression, then apply this rule.

i.e., Return ? ... is rewritten to Let _tmp1_ be ? ...; Return _tmp1_.

18:00
<bakkot>
though I guess it doesn't quite manage to actually say that
18:01
<bakkot>
I think that sentence does correctly handle F(? ...) though
18:01
<bakkot>
I should just say "in another context" rather than "in a more complex expression"
19:54
<TabAtkins>
rip tmp5 :(
20:27
<Michael Ficarra>
interview with @canadahonk on Porffor: https://www.youtube.com/watch?v=OSYSXq7y0Ew