Closed
Bug 208030
Opened 22 years ago
Closed 22 years ago
JS errors report incorrect line numbers in the source code
Categories
(Core :: JavaScript Engine, defect, P1)
Core
JavaScript Engine
Tracking
()
VERIFIED
FIXED
mozilla1.5alpha
People
(Reporter: olivier.vit, Assigned: brendan)
References
Details
(Keywords: memory-footprint, perf)
Attachments
(4 files, 11 obsolete files)
4.28 KB,
text/plain
|
Details | |
147.00 KB,
patch
|
Details | Diff | Splinter Review | |
126.88 KB,
patch
|
Details | Diff | Splinter Review | |
1.36 KB,
text/plain
|
Details |
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.5a) Gecko/20030602
Build Identifier: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.5a) Gecko/20030602
The issue is that the source file usually contains comments, which is good, but
the Javascript parser probably ignores them (and that's it job, isn't it) and
then the line number known from the javascript parser is shifted and doesn't
match with the line number in the real source file
Reproducible: Always
Steps to Reproduce:
Example:
Error: redeclaration of const MOZ_HELP_URI
Source File: chrome://help/content/contextHelp.js
Line: 1
refers to
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
Actual Results:
while it refer to
const MOZ_HELP_URI = "chrome://help/content/help.xul";
which is line 21
Expected Results:
Error: redeclaration of const MOZ_HELP_URI
Source File: chrome://help/content/contextHelp.js
Line: 21
prevents http://bugzilla.mozilla.org/show_bug.cgi?id=79612 to be solved in many
cases
Comment 1•22 years ago
|
||
Reassigning, and cc'ing Brendan -
Assignee: rogerl → khanson
Status: UNCONFIRMED → NEW
Ever confirmed: true
Assignee | ||
Comment 2•22 years ago
|
||
What's the testcase? Please set it in URL.
/be
Assignee: khanson → brendan
![]() |
||
Comment 3•22 years ago
|
||
Just for reference, I just spent some time playing with fastloaded scripts and
error/warning line numbers seem to be reported correctly.... so yes, specific
steps to reproduce the problem would be much appreciated.
Comment 4•22 years ago
|
||
Dupe of bug 207748?
Assignee | ||
Updated•22 years ago
|
Whiteboard: DUPEME
Assignee | ||
Comment 5•22 years ago
|
||
Please assign back when you get a testcase that reproduces the symptom, *and*
that testcase's script (excerpted from html if in a script tag) reproduces the
problem in either xpcshell or the js shell (built by js/src/{Makefile.ref,js.mak}).
If you see the problem only in Mozilla, not in the xpc or js shell, then
reassign this bug to the appropriate HTML or XUL content sink component.
/be
Assignee: brendan → olivier.vit
Reporter | ||
Comment 6•22 years ago
|
||
Steps to reproduce:
- in messenger, double click a message to open it in a new window
- look at Javascript Console
- you get
Error: redeclaration of const MSG_FOLDER_FLAG_TRASH
Source File: chrome://messenger/content/commandglue.js
Line: 1
- click on link chrome://messenger/content/commandglue.js
- goes to
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
while the error is in line 28
/* keep in sync with nsMsgFolderFlags.h */
const MSG_FOLDER_FLAG_TRASH = 0x0100;
And please don't let me assigned to this bug, I'm not a developer
if you aren't willing to own bugs then you shouldn't file them in jsengine.
Assignee: olivier.vit → hyatt
Component: JavaScript Engine → XP Toolkit/Widgets: XUL
QA Contact: pschwartau → shrir
![]() |
||
Comment 8•22 years ago
|
||
Brendan, _does_ the fastload file store JS comments?
As for owning bugs that get filed on the JS engine, that's bullshit. I'm not
willing to own JS engine bugs, but that doesn't mean I shouldn't file them in
the (very rare) cases I run into them....
Comment 9•22 years ago
|
||
It doesn't store comments or any literal source-text (it's serialized bytecode
and atom maps, mainly), but it does store line number information that is
generated with comments taken into account.
![]() |
||
Comment 10•22 years ago
|
||
OK... well, the steps in comment 6 certainly reproduce the problem here... I
poked about a bit, and we're getting into js_PCToLineNumber from
js_ReportErrorNumberVA, which is called from JS_ReportErrorFlagsAndNumber, which
is called from the redeclaration check. Now in js_PCToLineNumber, we have:
(gdb) p script->lineno
$18 = 1
(gdb) p target
$19 = -147
before we enter the for loop. In the for loop, SN_DELTA(sn) is 0 the first time
through, so we hit the "offset > target" break statement and break out, then
return the "1" we got from script->lineno. (This exercise pretty much exhausts
my knowledge of the JS engine, but I still have the whole thing in a debugger,
so if there is something I should poke at that would help, please let me know.)
Assignee | ||
Comment 11•22 years ago
|
||
Whaddyaknow, a JS engine bug. Or something involving JS engine and embedding
code confusion. Thanks for the debugging details, bz.
/be
Assignee: hyatt → brendan
Priority: -- → P1
Target Milestone: --- → mozilla1.5alpha
Assignee | ||
Updated•22 years ago
|
Status: NEW → ASSIGNED
Component: XP Toolkit/Widgets: XUL → JavaScript Engine
OS: Windows 2000 → All
Hardware: PC → All
Assignee | ||
Comment 12•22 years ago
|
||
This is a JS engine bug. Declarations of functions and variables require prolog
bytecodes, which lack source notes telling the line number of the declaration.
At the time I designed all that, there was no way for such a declaration to
result in an error. But then strict warning support went in....
Not sure I want to bloat scripts with srcnotes for prolog bytecode line numbers.
More thought required.
Sorry for being dense about this and not accepting the bug earlier.
/be
![]() |
||
Updated•22 years ago
|
Whiteboard: DUPEME
Assignee | ||
Updated•22 years ago
|
QA Contact: shrir → pschwartau
Assignee | ||
Comment 13•22 years ago
|
||
More work needed:
- in js_SweepScopeProperties, we need to compress rt->declarations, renumbering
shortids for sprops flagged with SPROP_IS_DECLARED, and reallocing the vector
appropriately;
- getters and setters need their own declaration file/line records;
- there's a ZZZbe in jsparse.c attached to a preemptive atomization of function
objects created during compilation, to keep them rooted (we need a better
auto
root model);
- I'm going to pull some ancient, over-aggressively-used macros out of line in
order to avoid code size going up due to this patch.
/be
Assignee | ||
Comment 14•22 years ago
|
||
Joe, what went wrong with my comment #13 here? I was just typing away in the
bugzilla attachment.cgi comment textarea, letting the long lines that start with
- bullets wrap as I typed.
Cc'ing myk in case bugzilla was involved in this mangling.
Someone please file a spinoff bug on this editing problem, or cite a bug that's
already on file.
/be
Assignee | ||
Comment 15•22 years ago
|
||
Sorry, I obviously fibbed. I typed each - bulleted paragraph, line by line, but
hit Enter when I was near the right end of the textarea, and indented by two
spaces before typing the next line. So I must have come close to a magic limit.
I dimly recall a bugzilla issue here -- myk, can you kindly remind me? If so,
sorry to jfrancis for hauling him in here.
/be
![]() |
||
Comment 16•22 years ago
|
||
Most likely, you hit the point at which the right-hand scrollbar appeared
(because the content got long enough). This reduced the space available to
lines, causing some wrapping (eg the "auto" that wrapped). The blank lines do
seem to be an editor problem, though -- whitespace wrapping over or something?
Comment 17•22 years ago
|
||
The line wrapping problem is bug 198662.
Assignee | ||
Comment 18•22 years ago
|
||
Still to-do: fix jsscript.c to serialize and deserialize JSOP_DECL{CONST,VAR}
prolog opcodes correctly.
/be
Attachment #125877 -
Attachment is obsolete: true
Assignee | ||
Comment 19•22 years ago
|
||
Cathleen showed me how to run the cowtools page load test, and the next patch
saves about 150K cumulative allocation for one cycle of the test.
Still working on some de-macro-ization to save footprint elsewhere.
/be
Assignee | ||
Comment 20•22 years ago
|
||
Forgot to say that the savings due to script filename caching just for browser
startup (with slashdot.org as home page) are about 40k.
To fix the bug as reported, I'm going to have to rev the
XUL_FASTLOAD_FILE_VERSION (otherwise, the jsscript.c XDR code will happily
deserialize JSXDR_MAGIC_SCRIPT_3 encodings of scripts and functions).
/be
Assignee | ||
Comment 21•22 years ago
|
||
Still to do:
- scrounge for codesize savings.
- decide whether to emit JSOP_DECL* for non-strict option compilations, leaving
JSOP_DEF{CONST,VAR} for backward bytecode/XDR compatibility.
Phil, anyone: please help test this.
/be
Assignee | ||
Comment 22•22 years ago
|
||
rginda, can you comment on the CAUTIOUS_SCRIPTHOOK #undef'ing I perpetrated, in
order to avoid keeping jsd using the obsolete, engine-private JS_DISABLE_GC and
JS_ENABLE_GC macros? IIRC, we use a dummy stack frame to protect scripts in all
cases, nowadays.
/be
Comment 23•22 years ago
|
||
From what I rememeber, I was seeing occasional crashes performing a GC from the
script hook and wasn't sure what the problem was. I suspected that the js
engine's state at the point where the script hook was called was not stable
enough to perform a GC. I decided to just disable GC during the script hook,
rather then track down the actual cause.
It's lame, I know, but the crash happened very infrequently, and my knowledge of
the js engine is not enough to work this one out "on paper".
Are you planning on landing this on the trunk, or the 1.4 branch?
Assignee | ||
Comment 24•22 years ago
|
||
1.4 is done (knock wood), this patch is so alpha, and this bug was always
targeted at 1.5alpha.
The fixes that introduced js_CallNewScriptHook to jsscript.c and made sure it
was used for all cases (see bug 77636 and bug 110903) seem to be solid. I think
alpha is the right time to undef the CAUTIOUS_SCRIPTHOOK macro in jsd_xpc.cpp.
If I'm wrong, I'll say "it's alpha" and fix whatever bug bit; if I'm right, we
can remove the macro altogether for beta.
/be
Comment 25•22 years ago
|
||
regarding Brendan's blank lines:
I don't think the editor is involved. Layout controls wrapping. The serializer
controls what happens to output from editor. I suspect the problem lies there,
or possibly on the bugzilla side if it is processing the text somehow. The
editor doesn't even know about the wrapping.
Comment 26•22 years ago
|
||
I agree; I'm pretty sure this is a server-side Bugzilla problem, since Bugzilla
is the doing the wrapping in this case using Perl's Text::Wrap module.
Comment 27•22 years ago
|
||
brendan: sounds good to me.
Assignee | ||
Comment 28•22 years ago
|
||
This is getting good. Still some footprint savings to do.
/be
Attachment #125980 -
Attachment is obsolete: true
Attachment #126093 -
Attachment is obsolete: true
Assignee | ||
Comment 29•22 years ago
|
||
The last patch had a design flaw that was hard to see amid all the trees.
This one is working for me, across all the FastLoad/not-FastLoad, multiple mail
compose windows, multiple XUL master document, GC combinations I can provoke.
I sure could use help testing it.
bz, can you try this patch out if you have a chance? Phil, anyone else, feel
free too. Thanks.
/be
Attachment #126138 -
Attachment is obsolete: true
Comment 30•22 years ago
|
||
I just tried to build the JS shell on WinNT4.0 with the latest patch,
but got this error:
---
link.exe -out:"WINNT4.0_DBG.OBJ/js.exe" kernel32.lib user32.lib gdi32.lib
winspool.lib comdlg32.lib advapi32.lib shell32.lib
ole32.lib oleaut32.lib uuid.lib oldnames.lib /nologo /subsystem:console
/debug /pdb:none /machine:I386 /opt:ref /opt:noicf
WINNT4.0_DBG.OBJ/js.obj WINNT4.0_DBG.OBJ/js32.lib
fdlibm/WINNT4.0_DBG.OBJ/fdlibm.lib
js.obj : error LNK2001: unresolved external symbol _js_AtomToPrintableString
WINNT4.0_DBG.OBJ/js.exe : fatal error LNK1120: 1 unresolved externals
make[1]: *** [WINNT4.0_DBG.OBJ/js.exe] Error 96
make[1]: Leaving directory `//d/JS_EXP/mozilla/js/src'
make: *** [all] Error 2
---
Here is a grep in my js/src directory (with the patch applied):
[//d/JS_EXP/mozilla/js/src] grep _js_AtomToPrintableString *.h *.c
(NO MATCHES FOUND)
Without the leading underbar, I pick it up:
[//d/JS_EXP/mozilla/js/src] grep js_AtomToPrintableString *.h *.c
jsatom.h: js_AtomToPrintableString(JSContext *cx, JSAtom *atom);
js.c: bytes = js_AtomToPrintableString(cx, atom);
js.c: fprintf(fp, "\"%s\"\n", js_AtomToPrintableString(args->cx, atom));
js.c: js_AtomToPrintableString(cx, (JSAtom *)sprop->id));
jsatom.c: js_AtomToPrintableString(JSContext *cx, JSAtom *atom)
jsfun.c: const char *name = js_AtomToPrintableString(cx, atom);
jsinterp.c: name = js_AtomToPrintableString(cx, (JSAtom *)id);
jsinterp.c: const char *printable = js_AtomToPrintableString(cx, atom);
jsparse.c: name = js_AtomToPrintableString(cx, atom);
jsparse.c: const char *name = js_AtomToPrintableString(cx, argAtom);
jsparse.c: const char *name = js_AtomToPrintableString(cx, funAtom);
jsparse.c: const char *name = js_AtomToPrintableString(cx, atom);
jsparse.c: const char *name = js_AtomToPrintableString(cx, atom);
Assignee | ||
Comment 31•22 years ago
|
||
Comment on attachment 126211 [details] [diff] [review]
still bigger than it should be, but working AFAICT
Preparing a new patch, this one doesn't apply cleanly.
/be
Attachment #126211 -
Attachment is obsolete: true
Assignee | ||
Comment 32•22 years ago
|
||
but with the same great dynamic footprint savings due to script->filename
sharing via a GC'd hash table.
/be
Assignee | ||
Updated•22 years ago
|
Attachment #127097 -
Attachment description: better approach, less ambitious, negligable code size increase → better approach, less ambitious, negligible code size increase
Attachment #127097 -
Flags: review?(shaver)
Assignee | ||
Comment 33•22 years ago
|
||
Comment on attachment 127097 [details] [diff] [review]
better approach, less ambitious, negligible code size increase
Drat, forgot to merge a crucial bit in js_XDRScript from the more ambitious
patch.
Working patch coming up.
/be
Attachment #127097 -
Attachment is obsolete: true
Attachment #127097 -
Flags: review?(shaver)
Assignee | ||
Updated•22 years ago
|
Assignee | ||
Comment 34•22 years ago
|
||
js_XDRScript fixed. I'll attach a diff -w version next with commentary, and
ask for review of that attachment.
/be
Assignee | ||
Comment 35•22 years ago
|
||
Checkin comments coming in next attachment.
/be
Assignee | ||
Updated•22 years ago
|
Attachment #127103 -
Flags: review?(shaver)
Assignee | ||
Comment 36•22 years ago
|
||
Hope these make sense. I composed them by editing the diff -puw from top to
bottom, turning each change into a comment, consolidating to earliest comment
by
extending comments to cover all related changes among the modified files.
/be
Assignee | ||
Comment 37•22 years ago
|
||
The growth in libmozjs.so due to this patch is 250 bytes. It would have been
more without the jsobj.c and jsinterp.c macro reduction exercises. It's well
worth it for the dynamic footprint savings, I think.
/be
Assignee | ||
Updated•22 years ago
|
Attachment #127103 -
Flags: review?(shaver)
Assignee | ||
Comment 38•22 years ago
|
||
Two stupid bugs (reusing off wrongly, clobbering its live value, in the TOK_VAR
case in js_EmitTree; failing to free the XDR-deserialized script->filename
after saving it with js_SaveScriptFilename) fixed. Lots of testing with and
without a FastLoad file, running the various app-suite components. All good,
ready for 1.5a checkin. A diff -w version is next.
/be
Attachment #127101 -
Attachment is obsolete: true
Assignee | ||
Comment 39•22 years ago
|
||
Attachment #127103 -
Attachment is obsolete: true
Assignee | ||
Comment 40•22 years ago
|
||
Attachment #127104 -
Attachment is obsolete: true
Assignee | ||
Updated•22 years ago
|
Attachment #127129 -
Flags: review?(shaver)
Assignee | ||
Updated•22 years ago
|
Attachment #127129 -
Flags: review?(shaver)
Assignee | ||
Comment 41•22 years ago
|
||
No new bytecodes that waste immediate operand space on line numbers. This was
better than I thought it would be (see the CG_NOTE* macros that indirect
through cg->current to get note generation state for prolog or main; also see
the not too complicated js_FinishTakingSrcNotes). Footprint is best yet.
Phil, if you get a chance, could you try this with the testsuite and appsuite?
Thanks (I'm out of town).
/be
Assignee | ||
Updated•22 years ago
|
Attachment #127128 -
Attachment is obsolete: true
Assignee | ||
Comment 42•22 years ago
|
||
Comment 43•22 years ago
|
||
Patch works with lateest trunk build.
I did see a few assertions when loading cowtool pageload test in my debug build,
not sure if those are related. Waiting for opt build to finish, and getting
some Tp stats. :-)
Assignee | ||
Comment 44•22 years ago
|
||
Cathleen: What assertions? I see some too, but not from JS code.
/be
Assignee | ||
Updated•22 years ago
|
Attachment #127129 -
Attachment is obsolete: true
Assignee | ||
Updated•22 years ago
|
Attachment #127383 -
Flags: review?(shaver)
Assignee | ||
Comment 45•22 years ago
|
||
In the spirit of old brendan-style landings, I just landed a better patch that
extends the last one attached here, by fusing allocations and avoiding separate,
often tiny mallocs for the script->srcnotes vector. This allowed elimination of
that struct member. Here's a histogram of srcnote count (not including the
final SRC_NULL terminator):
SrcNote size histogram:
1 216 **********************
2 661 *******************************************************************
4 150 ***************
8 197 ********************
16 166 *****************
32 151 ****************
64 85 *********
128 32 ****
256 22 ***
512 9 *
Zero counts are lumped with singletons. Event handlers with simple attribute
values that call global functions taking simple arguments, all fitting on one
line, require no source notes.
See
http://bonsai.mozilla.org/cvsquery.cgi?module=MozillaTinderboxAll&branch=HEAD&cvsroot=/cvsroot&date=explicit&mindate=1059258900&maxdate=1059259020&who=brendan%25mozilla.org
for the diffs. Looks like Ts improved a bit; haven't seen any dynamic footprint
metrics, but code size improved slightly.
/be
Status: ASSIGNED → RESOLVED
Closed: 22 years ago
Resolution: --- → FIXED
Comment 46•22 years ago
|
||
I'm getting a crash on shutdown with this a CVS debug build from this morning,
but it only seems to happens if there is no XUL.mfasl at startup (or it's not
valid).
backing out rev 3.40 of jsscript.c fixes the crash.
![]() |
||
Comment 47•22 years ago
|
||
In fact, rev 1.40 of jsscript.c sent half the tinderboxes orange, where they
have been for 11 hours now.
See also bug 214178, which may well be the same crash on shutdown.
Assignee | ||
Comment 48•22 years ago
|
||
Sorry, I was sleeping the sleep of the unjust.
Patch for the underlying bug coming up in a few minutes.
/be
Status: RESOLVED → REOPENED
Resolution: FIXED → ---
Comment 49•22 years ago
|
||
the crash in bug 214210 is fairly new as well
Assignee | ||
Comment 50•22 years ago
|
||
*** Bug 214210 has been marked as a duplicate of this bug. ***
Assignee | ||
Comment 51•22 years ago
|
||
Ok, I see the bug. Sorry (and serves me right for my "little" followup checkin
-- shades of old-style brendan landings forsooth!). Patch soon, and I bet it
will fix 214210, which is still biting according to rkaa.
/be
Status: REOPENED → ASSIGNED
Assignee | ||
Comment 52•22 years ago
|
||
I shouldn't have reopened this bug, as it is closed. I'm going to put the patch
for the off-by-N problem that is still lurking in jsemit.c in the bug with the
best symptom of an impurity, and the best reproducibility: bug 214210.
/be
Status: ASSIGNED → RESOLVED
Closed: 22 years ago → 22 years ago
Resolution: --- → FIXED
Assignee | ||
Comment 54•22 years ago
|
||
The fixes here caused bug 214761.
/be
Updated•21 years ago
|
Attachment #127383 -
Flags: review?(shaver)
You need to log in
before you can comment on or make changes to this bug.
Description
•