Okay, I tracked this down to an incorrect optimization in code generator for 
when you use >>=0 to coerce to an uint32 :-( 

There is a special case for exactly this usage, where the right-hand-side 
operand is a literal 0, so we avoid emitting a no-op “ICONST_0; IUSHR” bytecode 
sequence. It unfortunately wasn’t working correctly for when the left-hand-side 
operand of a compound-assignment-shift-right was either a property or element 
access expression (either “obj.foo” or “obj[x]”)

Decomposing the compound assignment into an explicit shift and assignment would 
work around the problem for now:

   this.length = this.length >>> 0;  // Coerce to uint32.

I filed <https://bugs.openjdk.java.net/browse/JDK-8170594 
<https://bugs.openjdk.java.net/browse/JDK-8170594>> and have a fix for it.

Attila.

> On 01 Dec 2016, at 07:44, Sundararajan Athijegannathan 
> <sundararajan.athijegannat...@oracle.com> wrote:
> 
> We do not aim to provide complete compatibility with other JS implementations 
> on the non-standard properties such as "stack". stack tries to mimic whatever 
> is done for Java code (no column number for eg.). But, as you've noted there 
> are enough information on Error objects via other properties like lineNumber, 
> columnNumber, fileName. It should be possible to write a simple utility 
> function to format stack string as desired for specific applications.
> 
> Thanks,
> -Sundar
> 
> On 01/12/16, 3:32 AM, Art Fiedler wrote:
>> When making an implementation of console.count([label])  part of the
>> Mozilla's developer docs
>>     https://developer.mozilla.org/en-US/docs/Web/API/Console/count
>> mentions when label is omitted, the function will count the number of times
>> count() was called
>> on that line... however, if the javascript code has been minified all lines
>> of code may be on the
>> same line... messing up all console.count() calls...
>> 
>> I was providing that implementation by using new Error().stack and parsing
>> the current file:line...
>> however I could fix the minify issue if new Error().stack output the column
>> also for instance...
>> other browser seem to be doing file:line:column in the stack trace.
>> Including nodejs see:
>>     https://nodejs.org/api/errors.html#errors_error_stack
>> 
>> Microsoft Edge's dev console outputs...
>>     new Error().stack:
>>     "Error
>>        at eval code (eval code:1:1)"
>> Firefox since FF30:
>> https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/stack
>> 
>> Currently nashorn error stacks only include the line number...
>>     public static void main(String[] args) throws Exception {
>>         NashornScriptEngineFactory factory = new
>> NashornScriptEngineFactory();
>>         ScriptEngine scriptEngine = factory.getScriptEngine();
>>         scriptEngine.put(ScriptEngine.FILENAME, "myfile.js");
>>         scriptEngine.eval("print('fileName: ' + new Error().fileName);");
>>         scriptEngine.eval("print('lineNumber: ' + new
>> Error().lineNumber);");
>>         scriptEngine.eval("print('columnNumber: ' + new
>> Error().columnNumber);");
>>         scriptEngine.eval("print('stack: ' + new Error().stack);");
>>     }
>>     /*
>>     fileName: myfile.js
>>     lineNumber: 1
>>     columnNumber: -1
>>     stack: Error
>>         at<program>  (myfile.js:1)
>>      */
>> 
>> Would be nice to add the column number to the stacks and error object in
>> nashorn.
>> 
>> Thanks,
>> Arthur Fiedler

Reply via email to