New batch of error reports

André Bargull andrebargull at googlemail.com
Tue Jul 2 23:59:44 PDT 2013


On 7/3/2013 8:37 AM, A. Sundararajan wrote:
> * Yes - function-declaration-as-statement is allowed in nashorn for 
> compatibility with other impls.
>
> nashorn jjs tool has these 2 options:
>
> --function-statement-error (Report an error when function declaration 
> is used as a statement.)
>         param: [true|false]   default: false
>
> --function-statement-warning (Warn when function declaration is used 
> as a statement.)
>         param: [true|false]   default: false
>
> * On unnamed function declaration: again this seems to be allowed by 
> rhino as well. Also, using script engine API, it is possible to eval 
> an anon-func-declaraion and call the resulting the script function 
> object:
>
> Example:
>
>     var m = new javax.script.ScriptEngineManager();
>     var e = m.getEngineByName("nashorn");
>     var func = e.eval("function() { print('Anon function') }");
>     func();
>

Ah ok, that means `eval("function(){}")` is also possible in Nashorn 
(I've just checked it), whereas SpiderMonkey/JSC/V8 etc. report a 
SyntaxError in this case. Concerning Rhino and unnamed function 
declarations, I remember having done something like this one [1] once. :-)


[1] https://github.com/mozilla/rhino/pull/39/files#L72R810

> * On for..each: I'll file a sub-task to report error in this case. 
> Thanks for checking with SpiderMonkey.
>
> Thanks
> -Sundar
>
> On Wednesday 03 July 2013 11:53 AM, André Bargull wrote:
>>
>> On 6/28/2013 7:49 PM, A. Sundararajan wrote:
>>> Hi,
>>>
>>> I've filed one big umbrella issue for all the issues that you sent 
>>> today. (JDK-8019398).
>>>
>>> Two observations:
>>>
>>> * with({}) function() {}
>>>
>>> seems to be accepted by rhino as well.  Need to check with what 
>>> spec. says though.
>>
>> It's an error per spec, because
>> (1) FunctionDeclaration productions can only appear at top-level 
>> (that means in SourceElement)
>> (2) FunctionDeclarations must be named
>>
>> and it cannot be parsed as an ExpressionStatement due to the 
>> lookahead restriction in ExpressionStatement.
>>
>> For compatibility reasons number (1) needs to be dropped, that means 
>> the FunctionDeclaration production moves to the Statement production 
>> (with more or less custom semantics, es-discuss has several threads 
>> about this issue). But (2) still holds. And an unnamed function 
>> declaration is somewhat useless because it's never callable, isn't it?
>>
>>
>>>
>>> * for each with initializer - for each(var v=0;false;);
>>>
>>> is also permitted by rhino as well - "each" is treated as a noise 
>>> word in that case. Given that we included for..each for 
>>> compatibility with rhino, we might as well leave that noise word (or 
>>> is it a bug with rhino as well?)
>>>
>>
>> I'd call this a Rhino bug, too. By checking the commit history, I've 
>> found out that this bug was already present when E4X support w.r.t. 
>> for-each was initially added. SpiderMonkey reports an error for that 
>> code.
>>
>>
>> - André
>>
>>
>>> -Sundar
>>>
>>>
>>> On Friday 28 June 2013 03:04 PM, André Bargull wrote:
>>>> [....]
>>>
>>
>
>



More information about the nashorn-dev mailing list