Closed Bug 110286 Opened 24 years ago Closed 24 years ago

Multiline comments containing "/*" should not be syntax errors

Categories

(Core :: JavaScript Engine, defect)

defect
Not set
normal

Tracking

()

VERIFIED FIXED
mozilla0.9.7

People

(Reporter: scole, Assigned: khanson)

References

Details

Attachments

(4 files, 1 obsolete file)

According to section 7.4 of the ECMA specification, the sequence of characters /* /* */ should be parsed as a comment. The current Spidermonkey implenetation produces a "nested comment" syntax error. I'm opening this bug because I lack the power to reopen bug 109917. See also the old (September 2001) discussion in netscape.public.mozilla.jseng, available at http://groups.google.com/groups?hl=en&threadm=3BB91DD4.8080405%40atg.com&prev=/groups%3Fnum%3D25%26hl%3Den%26group%3Dnetscape.public.mozilla.jseng%26start%3D75%26group%3Dnetscape.public.mozilla.jseng (Norris Boyd fixed Rhino, but nobody ever got around to fixing Spidermonkey.)
Bugzilla is refusing to let me attach my patch! Grumble... The fix is quite simple, just change the severity of the syntax error from "error" to "warning". Here it is: Index: src/jsscan.c =================================================================== RCS file: /export/home/cvs/external/mozilla/js/src/jsscan.c,v retrieving revision 1.8 diff -u -r1.8 jsscan.c --- src/jsscan.c 2001/10/15 15:18:23 1.8 +++ src/jsscan.c 2001/11/15 17:15:03 @@ -1096,7 +1096,7 @@ if (c == '/' && MatchChar(ts, '*')) { if (MatchChar(ts, '/')) goto retry; - js_ReportCompileErrorNumber(cx, ts, NULL, JSREPORT_ERROR, + js_ReportCompileErrorNumber(cx, ts, NULL, JSREPORT_WARNING, JSMSG_NESTED_COMMENT); } }
No dupes found. Marking NEW.
Status: UNCONFIRMED → NEW
Ever confirmed: true
Keywords: patch
Attached patch Patch from scole@planetweb.com (obsolete) — Splinter Review
Pulled patch from scole@planetweb.com out of message and into file.
Looks like I can make attachments again, huzzah... Guy Hutchinson's attempt at pulling my patch from the comments didn't work quite right (an extra newline got inserted, making the patch bogus). This one comes straight from the source. The should obsolete the prior patch, if only I had such authority.
Slightly rewrote testcase from original bug (alerts are annoying). Confirmed modified testcase passes on IE5 and NS4.7 and fails on Mozilla 0.9.5.
Comment on attachment 57945 [details] [diff] [review] Patch from scole@planetweb.com -> Obsolete, on behalf of Steven
Attachment #57945 - Attachment is obsolete: true
Testcase added to JS testsuite: mozilla/js/tests/js1_5/Regress/regress-110286.js Passing in the Rhino standalone shell; failing in SpiderMonkey. Thanks, Steven, for your work on this! cc'ing reviewers for consideration of Steven's patch -
Assignee: rogerl → khanson
OS: Windows 98 → All
Steven, thanks again. Kenton, would you r= attachment 57951 [details] [diff] [review], then I'll sr=? /be
Target Milestone: --- → mozilla0.9.7
Reviewers, please note: while this patch fixes the problem, and lets scripts run successfully, I'm not personally familiar enough with the error reporting mechanism to know if anything ought to change in js.msg, where this "nested comment" error is defined. I also think that we ought to change the message from "nested comment" to something like ""/*" found inside multi-line comment. (Possibly nested?)", but I'm hesitant to do anything that requires new localization. Do you actual mozilla guys have any opinions about this?
The patch is ok as-is -- the js.msg parameters are suitable for a warning. But in light of the ECMA standard, should we just eliminate the warning altogether? /be
I'm not sure how *I* feel about the warning... Looking through the Spidermonkey code, it appears that warnings are really only emitted for acceptable violations of the standard, not for legitimate code which might indicate programmer error. In light of this, the warning should go away. I'll attach a patch that does this (smaller, more understandable code than the embedded '/*' detector); but I'm still not sure which patch should be the final winner. (It also removes the JSMSG_NESTED_COMMENT identifier, and renumbers some of the error codes; I'm not sure if this part is wise.)
This patch removes the "nested comment" warning altogether, removes the JSMSG_NESTED_COMMENT identifer from the source code completely, and renumbers the errors above NESTED_COMMENT to avoid an error-number "hole". I don't know if this is better than attachment 57951 [details] [diff] [review]; I'll defer to other Spidermonkey brains about that...
A question: removing this would mean no warning for /* /* */, but we still WOULD get a warning for /* /* */ */, wouldn't we? That is, a truly nested comment, forbidden by ECMA ...
The input stream "/* /* */ */" results in a syntax error. The "/* /* */" is still a comment (it looks like whitespace), and then there's a bare "*/" sitting there --- not valid JS. In a nutshell, "/* /* */ */" is morally equivalent to " */", which you'll never get to compile. (So no "nested comment" dectector is required.)
r=khanson
Comment on attachment 58426 [details] [diff] [review] Complete removal of Nested Comment error. khanson, please use the patch manager (click on the Edit link to the right of the attacment link) to record your r=. I think we can do without this error or warning. I also believe no one has localized js.msg in Mozilla yet. Others will have to track the renumbering, which could be avoided by replacing the JSMSG_NESTED_COMMENT MSG_DEF macro call with a JSMSG_UNUSED0 entry. Stephen, what do you say? Fix that to minimize pain on non-Mozilla embedders who have localized js.msg, and sr=brendan@mozilla.org. /be
Attachment #58426 - Flags: superreview+
Changes made re: Brendan's comment #16. [Attachemnt 57951 and attachment 58426 [details] [diff] [review] should be marked obsolete.] Kenton or Brendon, you'll have to check this in after review; I lack the authority to do that. -Steven
I made a few tweaks (brace "multiline" loop -- multiline includes a loop whose condition takes more than one source line, even if its body is one-line and/or empty; strip trailing whitespace) and checked in r=khanson, sr=brendan. Thanks again, /be
Status: NEW → RESOLVED
Closed: 24 years ago
Resolution: --- → FIXED
Verified Fixed. The testcase above passes on WinNT, Linux, Mac 9.1 in both the debug and optimized JS shells.
Status: RESOLVED → VERIFIED
*** Bug 114554 has been marked as a duplicate of this bug. ***
Flags: testcase+
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Creator:
Created:
Updated:
Size: