As MarkM said it break on recursion, but we’re also only killing 
function.arguments, not (alas) function.caller so you can still build “pseudo” 
stack traces.

Note that neither .arguments nor .caller work in strict mode functions (they’re 
specified to throw), and all engines build real stack traces on exceptions 
nowadays, so presumably you could have 
function getStackTrace() {
    try {
        throw new Error
    } catch (e) {
        return e.stackTrace; // or whatever it is
    } 
}

—Oliver

> On Sep 28, 2014, at 9:23 AM, Alex Kocharin <[email protected]> wrote:
> 
>  
> Yes, it's a powerful meta-programming tool. I don't use it much, but it's sad 
> to see things like that going away from javascript.
>  
> For example, it could allow to build stack traces without any support from 
> the engine. How do you like this one?:
>  
> ```js
> function type(n) { return typeof n }
>  
> function show_trace() {
>   var me = arguments.callee
>  
>   for (var i=0; i<10; i++) {
>     console.log((me.name || '<anonymous>')
>       + ' (' + [].slice.call(me.arguments).map(type) + ')')
>     me = me.caller
>   }
> }
>  
> function foo() {
>   show_trace()
> }
>  
> function bar() {
>   foo(1, 2, 3)
> }
>  
> bar('some string')
> ```
>  
> ```
> $ node test.js 
> show_trace ()
> foo (number,number,number)
> bar (string)
> <anonymous> (object,function,object,string,string)
> <anonymous> (string,string)
> <anonymous> (object,string)
> <anonymous> (string)
> <anonymous> (string,object,boolean)
> <anonymous> ()
> startup ()
> ```
>  
>  
> 28.09.2014, 13:59, "Axel Rauschmayer" <[email protected]>:
>> Out of historical curiosity: was `Function.arguments` ever useful for 
>> anything? Why not simply use `arguments`?
>> 
>> On Sep 28, 2014, at 6:51 , John Lenz <[email protected] 
>> <mailto:[email protected]>> wrote:
>> 
>>> I took a look at Google's internal code index for reference to 
>>> Function.prototype.arguments and turned up many references to it 
>>> (PhpMyAdmin, some Intel benchmark, some internal code, etc).  This is only 
>>> code used internally at Google (or was at one time) and not by any means an 
>>> index of the entire web, but it does use the Closure Compiler and type 
>>> information to accurately find references.  These are not just simply 
>>> references to an "arguments" property but are references to the "arguments" 
>>> property off of objects know to be functions.    These references roughly 
>>> (from my quick perusal), were about 50% were V8 or similar unit tests, 25% 
>>> references that could be trivially replaced with a reference to the active 
>>> function's "arguments" variable, and 25% were doing something tricky  
>>> (Function.caller.arguments, someevent.handler.arguments).    
>>>  
>>> I'm sure you didn't expect that there would be zero breakage, but I wanted 
>>> to give you a heads up that there might be more than you expect. 
>>>  
>>>   
>>> 
>>> On Sat, Sep 27, 2014 at 11:38 AM, Oliver Hunt <[email protected] 
>>> <mailto:[email protected]>> wrote:
>>> Hi all, as a heads up we’re going to be doing an experiment in our tree to 
>>> see if we can kill off the function.arguments property entirely.
>>>  
>>> We’re super hopeful we can make it go away safely, and we’ll post a follow 
>>> up when we have some actual information about what happens.
>>>  
>>> If you’re interested in following directly you can track the bug: 
>>> http://webkit.org/b/137167 <http://webkit.org/b/137167>
>>>  
>>> —Oliver
>> 
>> -- 
>> Dr. Axel Rauschmayer
>> [email protected] <mailto:[email protected]>
>> rauschma.de
>> 
>> 
>> ,
>> _______________________________________________
>> es-discuss mailing list
>> [email protected] <mailto:[email protected]>
>> https://mail.mozilla.org/listinfo/es-discuss 
>> <https://mail.mozilla.org/listinfo/es-discuss>_______________________________________________
> es-discuss mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/es-discuss

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

Reply via email to