Closed Bug 800909 Opened 10 years ago Closed 10 years ago

eval("'x' \n + 'y'") returns NaN instead of 'xy' due to automatic semicolon insertion

Categories

(Core :: JavaScript Engine, defect)

16 Branch
x86
Windows XP
defect
Not set
normal

Tracking

()

RESOLVED DUPLICATE of bug 791465

People

(Reporter: mozilla-spam, Unassigned)

Details

(Keywords: qawanted, regression)

User Agent: Mozilla/5.0 (Windows NT 5.1; rv:16.0) Gecko/20100101 Firefox/16.0
Build ID: 20121010144125

Steps to reproduce:

I develop and maintain MozRepl::RemoteObject, a Perl <-> Firefox bridge. The test suite broke after an upgrade from Firefox 15 to Firefox 16.0.1. The (self-contained) Javascript code to exhibit the breakage is below. It seems that string concatenation in an eval() behaves differently from before.


Actual results:

var s = ["\"\\u30C8\\u30EF\\u30FC\\u30AD",
           "\\u30F3\\u30B0 \\u30B5\\u30FC\"\n +",
           "\"\\u30D3\\u30B9 [mixi(\\u30DF\\u30AF\\",
           "u30B7\\u30A3)]\"\n"].join("");

alert(s); // Shows basically the following expression:
var expected= "\u30C8\u30EF\u30FC\u30AD\u30F3\u30B0 \u30B5\u30FC" +"\u30D3\u30B9 [mixi(\u30DF\u30AF\u30B7\u30A3)]";
alert(eval(s)); // is undefined
alert(eval(s) == expected); // that is what I expect


Expected results:

Ideally, the JS behaviour should not change between Firefox releases, or at least be mentioned in the change notes. I could not find such a change note.

On a more technical level, I expect the string-eval to be equivalent to the direct JS code. It seems that two different code paths are taken.
For some reason the eval comes back with NaN instead of a string concatenation?
Ah, the issue is the newline before the '+'.

This seems to be triggering automatic semicolon insertion.  Should it?
Status: UNCONFIRMED → NEW
Ever confirmed: true
Keywords: regression
Summary: difference in JS (+Unicode) behaviour between Firefox 15 and 16 - string concatenation now returns undef within an eval() → eval("'x' \n + 'y'") returns NaN instead of 'xy' due to automatic semicolon insertion
The patch in bug 791465 seems to fix this.
Depends on: 791465
(In reply to Boris Zbarsky (:bz) from comment #2)
> This seems to be triggering automatic semicolon insertion.  Should it?

The golden rule of ASI is that a semicolon is only ever inserted if there'd be a syntax error without it.  So, no, there shouldn't be a semicolon inserted here.
I think this is just a dup.
Status: NEW → RESOLVED
Closed: 10 years ago
No longer depends on: 791465
Resolution: --- → DUPLICATE
Duplicate of bug: 791465
You need to log in before you can comment on or make changes to this bug.