Closed
Bug 123002
Opened 23 years ago
Closed 23 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•23 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•23 years ago
|
Status: UNCONFIRMED → NEW
Ever confirmed: true
OS: Linux → All
Hardware: PC → All
Comment 2•23 years ago
|
||
Comment 3•23 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•23 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•23 years ago
|
||
Testcase added to JS testsuite: mozilla/js/tests/js1_5/Exceptions/regress-123002.js
Comment 6•23 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•23 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•23 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•23 years ago
|
||
Thanks for the reminder! /be
Status: NEW → RESOLVED
Closed: 23 years ago
Resolution: --- → FIXED
You need to log in
before you can comment on or make changes to this bug.
Description
•