Closed
Bug 123002
Opened 24 years ago
Closed 24 years ago
Error.length should be 3 not 1
Categories
(Core :: JavaScript Engine, defect)
Core
JavaScript Engine
Tracking
()
VERIFIED
FIXED
People
(Reporter: georg, Assigned: khanson)
References
Details
Attachments
(1 file)
2.97 KB,
text/plain
|
Details |
a=new Error(1,2,3);
alert(a.name);
alert(a.message);
alert(a.fileName);
alert(a.lineNumber);
alert(Error.length);
The length property of function objects should reflect the typical number of
arguments expected. In ECMA 262-3 only one argument is supported. In JavaScript
1.5 three arguments are expected. The length property of the Error function
should be 3 in JavaScript 1.5 because three arguments are the typical usage in
JavaScript 1.5.
Comment 1•24 years ago
|
||
Confirming for consideration. This seems reasonable to me, but I
will attach the relevant sections from ECMA-262 Edition 3 Final
and cc Waldemar to be sure this is correct.
This all arises from bug 50447 filed against SpiderMonkey,
"JS Exceptions should have filename/linenumber properties",
As a result of that fix, the Error constructor in SpiderMonkey
has a FormalParameterList is of length three now:
USED TO BE
ECMA-262 15.11.1.1
Error (message)
AFTER BUG 50447
SpiderMonkey ECMA extension
Error (message, fileName, lineNumber)
Sample from current SpiderMonkey shell:
js> var err = Error('aaa', 'bbb', 999);
js> err.message;
aaa
js> err.fileName;
bbb
js> err.lineNumber;
999
The only thing that makes me hesitate is this language in ECMA-262:
15.11.3 Properties of the Error Constructor
The value of the internal [[Prototype]] property of the Error constructor
is the Function prototype object (15.3.4).
Besides the internal properties and the length property (whose value is 1),
the Error constructor has the following...
etc.
I ASSUME the parenthetical definition of Error.length = 1 here is due
to ECMA assuming that the FormalParameterList of the Error constructor
would have length 1. So if an implementation adds more elements to the
FormalParameterList, Error.length should increase accordingly...
Assignee: rogerl → khanson
Updated•24 years ago
|
Status: UNCONFIRMED → NEW
Ever confirmed: true
OS: Linux → All
Hardware: PC → All
Comment 2•24 years ago
|
||
Comment 3•24 years ago
|
||
Thanks for cc'ing me as well.
Hm. The way I read it, the ECMA-262 specification has an error in stating
explicitly the "(whose value is 1)" portion. Unless ECMAScript is deliberately
restricting what JavaScript may be. As I understand ECMAScript, the intention
is to set minimum requirements for the language, not to lock out extensions to
the language.
But I'll defer to waldemar for that clarification. :) I don't work on the
standards.
Comment 4•24 years ago
|
||
It's a gray area -- the standard does not address every possible extension one
could do. If we're doing this extension, I think that changing the length
property to 3 would be in the spirit of the standard.
Comment 5•24 years ago
|
||
Testcase added to JS testsuite:
mozilla/js/tests/js1_5/Exceptions/regress-123002.js
Comment 6•24 years ago
|
||
Easily done -- in fact I'm piggy-backing the one-line fix to jsexn.c in the next
patch for bug 123177.
/be
Depends on: 123177
Comment 7•24 years ago
|
||
Oh sorry -- I should have commented here about the testcase counting enumerable
Error instance properties not being the right way to compute Error.length's best
value, instead of at http://bugzilla.mozilla.org/show_bug.cgi?id=123177#c22.
/be
Comment 8•24 years ago
|
||
The testcase has now been repaired:
mozilla/js/tests/js1_5/Exceptions/regress-123002.js
It is now passing on WinNT, Linux, and Mac9.1. I believe we can mark
this bug FIXED now; the patch for bug 123177 has done the trick.
I will let Brendan decide, in case there is anything else left to do
on this -
Comment 9•24 years ago
|
||
Thanks for the reminder!
/be
Status: NEW → RESOLVED
Closed: 24 years ago
Resolution: --- → FIXED
You need to log in
before you can comment on or make changes to this bug.
Description
•