| 02:25 | <bakkot> | shu: https://github.com/tc39/ecma262/pull/2566 |
| 14:21 | <shu> | will look today |
| 19:41 | <bakkot> | shu: re: https://github.com/tc39/ecma262/pull/2548, it looks like very nearly every !-prefixed call gets the user-code effect suppressed (possibly actually all of them?). maybe worth building that heuristic into ecmarkup? |
| 20:57 | <shu> | bakkot: almost all, yes. worth thinking about building it in. it puts the burden of vigilance on us (the PR reviewers) to remember to check if a ! shouldn't be suppressed. otherwise it puts the burden on authors |
| 20:57 | <shu> | putting it on us is probably the right choice |
| 21:40 | <shu> | bakkot: Michael Ficarra oh, for the "default" stuff, the point is that "default" is used only as a [[LocalName]] and not as an [[ExportName]] in ExportEntry Records, and therefore is not user visible? |
| 21:46 | <shu> | so if a module exports a value named "*default*", that could be imported, since the magical [[ExportName]] name is "default", which has always been user exposed? |
| 21:59 | <bakkot> | yeah exactly |
| 22:01 | <bakkot> | (It also gets into the [[BindingName]] of ResolvedBinding Records, but that's basically the same as the [[LocalName]] of ExportEntry Records) |
| 22:03 | <shu> | right |
| 22:03 | <shu> | whereas "*" and "*namespace*" leak into [[BindingName]], which is the problem |
| 22:04 | <bakkot> | into [[ImportName]], rather |
| 22:06 | <shu> | ah right, that's the usual case |
| 22:06 | <shu> | the [[BindingName]] problem is for accessing via a namespace object |
| 22:08 | <bakkot> | ah, yes, right |
| 22:10 | <bakkot> | actually I thinking further I'm not 100% sure "*namespace*" is actually a problem, hm |
| 22:11 | <bakkot> | "*" definitely is though |
| 22:11 | <shu> | why isn't "namespace" a problem? |
| 22:12 | <bakkot> | because the lookup that's happening in step 10 of 10.4.6.8 (module NS [[Get]]) is of the post-resolution name |
| 22:12 | <bakkot> | which is strictly internal, same as "*default*" |
| 22:13 | <bakkot> | [[BindingName]] tells you where to find the binding of interest within the module; it's not the externally-facing name |
| 22:14 | <bakkot> | exactly the same same as [[LocalName]] of ExportEntry Records |
| 22:14 | <shu> | oh, and export * has no [[LocalName]] |
| 22:15 | <shu> | so if i did an import "*namespace*" it would not resolve to the actual NS object, since that has special handling |
| 22:16 | <shu> | okay, but also because of the special handling everywhere for NS objects, it's certainly also correct and clearer if we just globally replaced it with ~namespace~ |
| 22:16 | <bakkot> | export * from 'mod' has no [[LocalName]], right (none of the export from forms do) |
| 22:16 | <bakkot> | (there is no export *;) |
| 22:16 | <shu> | yes, i meant with the from tail |
| 22:16 | <bakkot> | yeah, right |
| 22:30 | <bakkot> |
right, though not because of specially handling |
| 22:31 | <shu> | ah, yes, right |
| 22:32 | <shu> | anyways lgtm. further classification of the various meanings of "*" is a nice added bonus |
| 22:32 | <bakkot> | if you did export { f as "*namespace*" }, then that would resolve to a ResolvedBinding Record whose [[BindingName]] is f, so again no problems there |