Closed
Bug 422501
Opened 17 years ago
Closed 9 years ago
"redeclaration of var arguments" caught at runtime rather than compile-time
Categories
(Core :: JavaScript Engine, defect)
Core
JavaScript Engine
Tracking
()
RESOLVED
WORKSFORME
People
(Reporter: jruderman, Unassigned)
Details
(Keywords: testcase)
Most "redeclaration" errors are caught when the function is compiled:
js> function f() { try { const a=1; const a=2; } catch(e) { print(e); } }
typein:15: TypeError: redeclaration of const a:
typein:15: function f() { try { const a=1; const a=2; } catch(e) { print(e); } }
typein:15: ......................................^
But for |arguments|, it is caught only when the function is called:
js> function f() { try { const arguments=null } catch(e) { print(e); } }
js> f()
typein:13: TypeError: redeclaration of var arguments
This confuses an extension to jsfunfuzz, which expects that if X compiles, then try{X}catch(e){} does not throw. It also seems inefficient.
Related to bug 355480?
(In reply to comment #0)
> This confuses an extension to jsfunfuzz, which expects that if X compiles, then
> try{X}catch(e){} does not throw.
Object = function () { throw 1 };
try { throw 2 } catch (e) {}
probably should throw 1 (but doesn't).
Comment 2•17 years ago
|
||
(In reply to comment #1)
> (In reply to comment #0)
> > This confuses an extension to jsfunfuzz, which expects that if X compiles, then
> > try{X}catch(e){} does not throw.
>
> Object = function () { throw 1 };
> try { throw 2 } catch (e) {}
>
> probably should throw 1 (but doesn't).
ECMA-262 Edition 3 is flawed in reflecting on Object and constructing an instance of it to make the scope object for the catch clause, and Edition 4 as proposed changes this part of the spec to use lexical scope (let, block scope). So you have to go back to MOZILLA_1_8_0_BRANCH, Firefox 1.5, to see the ES3 behavior:
js> Object = function () { throw 1 };
function () {
throw 1;
}
js> try { throw 2 } catch (e) { print(e) }
uncaught exception: 1
In Firefox 2 and 3, JS1.7 and 1.8, we changed to match ES4:
js> Object = function () { throw 1 };
function () {
throw 1;
}
js> try { throw 2 } catch (e) { print(e) }
2
See bug 336379.
But what does any of this have to do with comment 0?
/be
Updated•13 years ago
|
OS: Mac OS X → All
Hardware: x86 → All
Assignee | ||
Updated•10 years ago
|
Assignee: general → nobody
Comment 3•9 years ago
|
||
No longer reproducible - Resolving as WFM.
Status: NEW → RESOLVED
Closed: 9 years ago
Resolution: --- → WORKSFORME
You need to log in
before you can comment on or make changes to this bug.
Description
•