Closed
Bug 621119
Opened 14 years ago
Closed 13 years ago
Decompilation creates an invalid string literal
Categories
(Core :: JavaScript Engine, defect)
Core
JavaScript Engine
Tracking
()
RESOLVED
FIXED
People
(Reporter: jruderman, Unassigned)
Details
(Keywords: testcase)
function f() { "use strict"; return "\u00007" }
print(f);
print(eval(uneval(f)));
typein:4: SyntaxError: octal literals and octal escape sequences are deprecated:
typein:4: function f() {'use strict';return "\07";}
typein:4: ..................................^
The first bad revision is:
changeset: 43f456d9b632
user: Jim Blandy
date: Thu Nov 19 09:49:00 2009 -0800
summary: Bug 514559: Forbid octal literals or escape sequences in strict mode. r=mrbkap
Comment 1•14 years ago
|
||
(In reply to comment #0)
> function f() { "use strict"; return "\u00007" }
> The first bad revision is:
> changeset: 43f456d9b632
> summary: Bug 514559: Forbid octal literals or escape sequences in strict
> mode. r=mrbkap
This is the revision that introduced the check that caught the bug, not the revision that introduced the bug. The printer's generated string "\07", is not a valid literal in strict mode code (the rule for "\0" says that it can't be followed by a decimal digit).
Comment 2•14 years ago
|
||
It should generate "\x00" in that case, I guess.
Comment 3•14 years ago
|
||
Tricky. While "\0" is allowed in strict mode, we have to be careful about what follows being maximum-munched.
Or we could lose the '\0' -> '0' pair in js_EscapeMap.
/be
Comment 4•13 years ago
|
||
js> function f() { "use strict"; return "\u00007" }
js> print(f);
function f() {
"use strict";
return "\x007";
}
js> print(eval(uneval(f)));
undefined
OS: Mac OS X → All
Hardware: x86 → All
Comment 5•13 years ago
|
||
Comment 4 demonstrates correct behavior. Recall that eval returns the result of evaluating a Program, not an Expression, and a function statement doesn't affect completion value, so |undefined| gets returned.
This got fixed by bug 430927.
Status: NEW → RESOLVED
Closed: 13 years ago
Resolution: --- → FIXED
Updated•13 years ago
|
Flags: in-testsuite?
Reporter | ||
Comment 6•13 years ago
|
||
Complete demo of the correct behavior (modulo bug 706305) :
js> function f() { "use strict"; return "\u00007" }
js> print(f);
function f() {
"use strict";
return "\x007";
}
js> print(eval( ("(" + uneval(f) + ")" )))
function f() {
"use strict";
return "\x007";
}
You need to log in
before you can comment on or make changes to this bug.
Description
•