> Le 8 déc. 2019 à 20:49, Jack Works <[email protected]> a écrit :
> 
> I thought the "caller" has been removed from the spec, so there isn't much to 
> do with the "caller" since it is not standard. It's implementation's own 
> extension.
> But maybe we can also extend The forbidden extensions section.

The `caller` property of functions (not to be confused with the `caller` 
property of the `arguments` object, which is indeed dead) has never been in the 
spec, except some restrictions in the [Forbidden Extensions] section introduced 
at the same time as strict-mode functions. And the problem is, precisely, that 
it is underspecified.

Now, it is indeed almost trivial to resolve spec-wise *the particular* issue 
you noted, by amending the [Forbidden Extensions] section: Just find the bullet 
that begins with “If an implementation extends any function object with an own 
property named "caller"...”, and replace therein all occurrences of “strict 
function” with “strict function or built-in function” (or maybe with “anything 
but a non-strict function”). That, however, is not the most 
implementation-friendly way, because that leaves up to them to guess what to do 
instead (return null, throw an error, etc.), that will not break the web for 
their users. 

Moreover, the `caller` property has most probably some other gotchas; one of 
them I recall to have noted some time ago, is that, in at least one 
implementation, it is publicised as a non-writable, non-configurable own data 
property, but it may change its value.

I think that it is better, at this point, to specify Function#caller and 
Function#arguments, as proposed in [gh-issue 562].

[Forbidden Extensions]: https://tc39.es/ecma262/#sec-forbidden-extensions 
<https://tc39.es/ecma262/#sec-forbidden-extensions>
[gh-issue 562]: https://github.com/tc39/ecma262/issues/562 
<https://github.com/tc39/ecma262/issues/562>

—Claude


> 
> On Mon, Dec 9, 2019, 1:12 AM Claude Pache <[email protected] 
> <mailto:[email protected]>> wrote:
> 
> 
>> Le 8 déc. 2019 à 14:43, Jack Works <[email protected] 
>> <mailto:[email protected]>> a écrit :
>> 
>> 
>> In the current spec, strictness of the built-in functions are 
>> implementation-dependent behaviors. This proposal is going to fix this 
>> problem.
>> https://github.com/Jack-Works/proposal-strict-built-in-functions 
>> <https://github.com/Jack-Works/proposal-strict-built-in-functions>
>> 
> 
> Hi,
> 
> See https://github.com/tc39/ecma262/issues/562#issuecomment-218531285 
> <https://github.com/tc39/ecma262/issues/562#issuecomment-218531285> for 
> another  testcase. 
> 
> The real problem is that the semantics of `f.caller` is left to 
> implementations. There are in fact some restrictions in the spec, see 
> https://tc39.es/ecma262/#sec-forbidden-extensions 
> <https://tc39.es/ecma262/#sec-forbidden-extensions>, but they are 
> insufficient.
> 
> Note that it doesn’t really make sense to mandate that builtin functions be 
> “strict”: The notion of strictness is defined only for so-called ECMAScript 
> functions, which are functions whose implementation is written in ECMAScript 
> code. That excludes builtin functions (unless the implementation choose to  
> implement them in ECMAScript), but also bound functions, proxies, and 
> probably some other cases. 
> 
> —Claude

_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to