Function.prototype.toString relocates parentheses, changing syntax tree

RESOLVED DUPLICATE of bug 559438

Status

()

Core
JavaScript Engine
RESOLVED DUPLICATE of bug 559438
7 years ago
7 years ago

People

(Reporter: Matthew Flaschen, Unassigned)

Tracking

Firefox Tracking Flags

(Not tracked)

Details

(Reporter)

Description

7 years ago
User-Agent:       Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; CMNTDF; .NET4.0C; InfoPath.3; AskTbARS/5.8.0.12304)
Build Identifier: 3.6.13

This simple example demonstrates that Function.prototype.toString returns a string with a different syntax tree from the original:

function f() { var a = '', b = '1', c = '2'; return a + '(' + (+b + +c) + ')'; }; 
f.toString(); 

The parentheses are relocated.  This caused a real problem in a Greasemonkey script, as explained at http://stackoverflow.com/questions/4469044/problem-with-type-coercion-and-string-concatenation-in-javascript-in-greasemonkey

Reproducible: Always

Comment 1

7 years ago
So what apparently happened here is that bug was fixed on m-c back in Sept 2009, then merged to the 1.9.2 release branch.  This had a bug that caused us to drop those parens altogether.  Then there was a bogo-fix for that in bug 530537 which apparently made us put the parens in the wrong place (though maybe only on branch?  I don't see that behavior with trunk builds that I tested.

Finally, things were fixed correctly in bug 559438.

Marking duplicate of bug 559438, which is where the patch that would need backporting to 1.9.2 lives.
Status: UNCONFIRMED → RESOLVED
Last Resolved: 7 years ago
Resolution: --- → DUPLICATE
Duplicate of bug: 559438
You need to log in before you can comment on or make changes to this bug.