Closed
Bug 879831
Opened 10 years ago
Closed 10 years ago
js/src #includes are still out of control
Categories
(Core :: JavaScript Engine, defect)
Core
JavaScript Engine
Tracking
()
RESOLVED
FIXED
mozilla24
People
(Reporter: jorendorff, Assigned: jorendorff)
References
Details
Attachments
(9 files)
15.24 KB,
patch
|
n.nethercote
:
review+
|
Details | Diff | Splinter Review |
1.57 KB,
patch
|
n.nethercote
:
review+
|
Details | Diff | Splinter Review |
1.75 KB,
patch
|
n.nethercote
:
review+
|
Details | Diff | Splinter Review |
3.69 KB,
patch
|
n.nethercote
:
review+
|
Details | Diff | Splinter Review |
27.51 KB,
patch
|
n.nethercote
:
review+
|
Details | Diff | Splinter Review |
4.49 KB,
patch
|
n.nethercote
:
review+
|
Details | Diff | Splinter Review |
26.15 KB,
patch
|
jorendorff
:
review+
|
Details | Diff | Splinter Review |
6.55 KB,
patch
|
n.nethercote
:
review+
|
Details | Diff | Splinter Review |
95.17 KB,
patch
|
Details | Diff | Splinter Review |
My stack from bug 872416 has evolved some, so I'm going to close that bug and ask for new reviews here. Fortunately the patches are still pretty trivial. I really have to move on to other stuff, so I'm going to finish this one stack of patches and leave the rest to njn.
Assignee | ||
Comment 1•10 years ago
|
||
Attachment #758737 -
Flags: review?(n.nethercote)
Assignee | ||
Comment 2•10 years ago
|
||
Assignee: general → jorendorff
Attachment #758739 -
Flags: review?(n.nethercote)
Assignee | ||
Comment 3•10 years ago
|
||
Attachment #758741 -
Flags: review?(n.nethercote)
Assignee | ||
Updated•10 years ago
|
Attachment #758737 -
Attachment description: v1 → Part 1 - Uninline JSScript::sourceObject, v1
Assignee | ||
Updated•10 years ago
|
Attachment #758739 -
Attachment description: v1 → part 2 - Move JSObject::asModule to jsobjinlines.h, v1
Assignee | ||
Updated•10 years ago
|
Attachment #758741 -
Attachment description: v1 → Part 3 - Make jsobjinlines.h not include jsscriptinlines.h, eliminating the #include cycle jsscriptinlines.h -> vm/Shape-inl.h -> jsobjinlines.h -> jsscriptinlines.h, v1
Assignee | ||
Comment 4•10 years ago
|
||
Attachment #758744 -
Flags: review?(n.nethercote)
Assignee | ||
Comment 5•10 years ago
|
||
Attachment #758746 -
Flags: review?(n.nethercote)
Assignee | ||
Comment 6•10 years ago
|
||
Generally speaking, if you're nervous about the direction this is going (adding more -inl headers) you're not alone. The reason for adding them, of course, is to remove dependencies from the non-inl headers, which aren't supposed to depend on -inl headers. But note that at least Probes-inl.h and Debugger-inl.h are never included by other headers, only by .cpp files. So they don't make the knot any worse.
Attachment #758748 -
Flags: review?(n.nethercote)
Assignee | ||
Comment 7•10 years ago
|
||
Basically just the patch in attachment 755733 [details] [diff] [review]. njn already reviewed it there and I've changed it a little but not significantly, so carrying over review.
Attachment #758751 -
Flags: review+
![]() |
||
Updated•10 years ago
|
Attachment #758737 -
Flags: review?(n.nethercote) → review+
![]() |
||
Comment 8•10 years ago
|
||
Comment on attachment 758739 [details] [diff] [review] part 2 - Move JSObject::asModule to jsobjinlines.h, v1 Review of attachment 758739 [details] [diff] [review]: ----------------------------------------------------------------- In general I'm finding that moving things out of -inl.h files (either to .h or .cpp files) is virtuous for untangling the dependencies. (And jsobjinlines.h is a real hotspot in the dependency graph that needs to be simplified.) But I also understand that sometimes you've just gotta follow things all the way down the rabbit hole in order to satisfy a broader goal, so I'll trust you on this one.
Attachment #758739 -
Flags: review?(n.nethercote) → review+
![]() |
||
Comment 9•10 years ago
|
||
Comment on attachment 758741 [details] [diff] [review] Part 3 - Make jsobjinlines.h not include jsscriptinlines.h, eliminating the #include cycle jsscriptinlines.h -> vm/Shape-inl.h -> jsobjinlines.h -> jsscriptinlines.h, v1 Review of attachment 758741 [details] [diff] [review]: ----------------------------------------------------------------- Excellent.
Attachment #758741 -
Flags: review?(n.nethercote) → review+
![]() |
||
Comment 10•10 years ago
|
||
Comment on attachment 758744 [details] [diff] [review] Part 4 - Make vm/String-inl.h not include gc/Barrier-inl.h, breaking an #include cycle. Make vm/Shape-inl.h not #include itself. v1 Review of attachment 758744 [details] [diff] [review]: ----------------------------------------------------------------- ::: js/src/jsobjinlines.h @@ -1290,5 @@ > inline bool > -js::ObjectImpl::isProxy() const > -{ > - return js::IsProxy(const_cast<JSObject*>(this->asObjectPtr())); > -} I've been working on some changes to reduce the number of files that #include jsobjinlines.h and I moved this function into vm/ObjectImpl-inl.h too. That's a good sign.
Attachment #758744 -
Flags: review?(n.nethercote) → review+
Assignee | ||
Comment 11•10 years ago
|
||
I think that's enough for one bug. This leaves a great many #include cycles in the codebase: js/src/jsobjinlines.h -> js/src/jsfuninlines.h -> js/src/vm/ScopeObject-inl.h -> js/src/jsinferinlines.h -> js/src/vm/Stack-inl.h -> js/src/ion/BaselineFrame-inl.h -> js/src/vm/ScopeObject-inl.h -> js/src/jsscriptinlines.h -> js/src/vm/Shape-inl.h -> js/src/jsobjinlines.h -> js/src/vm/ScopeObject-inl.h -> js/src/vm/ArgumentsObject-inl.h -> js/src/vm/ScopeObject-inl.h -> js/src/vm/ScopeObject-inl.h -> js/src/jsobjinlines.h -> js/src/jsscriptinlines.h -> js/src/vm/String-inl.h -> js/src/jsobjinlines.h -> js/src/jsinferinlines.h -> js/src/gc/Barrier-inl.h -> js/src/vm/String-inl.h -> js/src/vm/Shape-inl.h -> js/src/vm/String-inl.h js/src/ion/LIR.h -> js/src/ion/x86/LIR-x86.h -> js/src/ion/LIR.h -> js/src/ion/x64/LIR-x64.h -> js/src/ion/LIR.h -> js/src/ion/arm/LIR-arm.h -> js/src/ion/LIR.h Some obvious things we can do: - Move all class definitions from -inl headers to non-inl headers. - Move all forward declarations of classes and templates to jsprvtd.h. - Maybe bug 880041. By the way: making vm/String-inl.h not include jsobjinlines.h would be a nice little win. It would break three cycles, and it *ought* to be easy -- nothing in String-inl.h actually directly uses anything defined in jsobjinlines.h! But actually removing that #include alone introduces a ton of GCC warnings and I think a compiler/linker error or two, because #include.
![]() |
||
Comment 12•10 years ago
|
||
Comment on attachment 758746 [details] [diff] [review] Part 5 - Factor out js::Probes inlines that depend on other "inlines" headers into vm/Probes-inl.h, v1 Review of attachment 758746 [details] [diff] [review]: ----------------------------------------------------------------- ::: js/src/vm/Interpreter-inl.h @@ +16,2 @@ > #include "jsstr.h" > +#include "ion/Ion.h" There should be a blank line between the jsfoo.h headers and the foo/Bar.h headers. ::: js/src/vm/Probes.cpp @@ +3,5 @@ > * This Source Code Form is subject to the terms of the Mozilla Public > * License, v. 2.0. If a copy of the MPL was not distributed with this > * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ > > +#include "Probes-inl.h" I'd be inclined to #include "Probes.h" here, and then #include "Probes-inl.h" in the usual spot near the bottom. Also, can you make it "vm/Probes{.h,-inl.h}"? ::: js/src/vm/Stack.cpp @@ +15,5 @@ > #include "ion/IonFrames.h" > #include "ion/IonCompartment.h" > #endif > +#include "vm/Stack.h" > +#include "vm/ForkJoin.h" Good -- I agree that omitting the directory names is confusing, and I want to move away from it, preferably by modifying the build parameters such that you can't omit them. In the meantime, this is progress. ::: js/src/vm/Stack.h @@ -13,2 @@ > #include "ion/IonFrameIterator.h" > -#endif We seem to be very inconsistent about guarding Ion #includes. Do you think we should not bother? Perhaps this change should be saved for a follow-up that applies a new rule consistently.
Attachment #758746 -
Flags: review?(n.nethercote) → review+
![]() |
||
Updated•10 years ago
|
Attachment #758748 -
Flags: review?(n.nethercote) → review+
![]() |
||
Comment 13•10 years ago
|
||
> By the way: making vm/String-inl.h not include jsobjinlines.h would be a > nice little win. It would break three cycles, and it *ought* to be easy My in-progress patch that I mentioned in bug 880041 does this. Your script tells me I've split the first clump into two: js/src/gc/Barrier-inl.h -> js/src/vm/String-inl.h -> js/src/gc/Barrier-inl.h js/src/jsobjinlines.h -> js/src/jsscriptinlines.h -> js/src/vm/Shape-inl.h -> js/src/vm/Shape-inl.h -> js/src/vm/ScopeObject-inl.h -> js/src/jsinferinlines.h -> js/src/vm/Stack-inl.h -> js/src/ion/BaselineFrame-inl.h -> js/src/vm/ScopeObject-inl.h -> js/src/jsscriptinlines.h -> js/src/vm/ArgumentsObject-inl.h -> js/src/vm/ScopeObject-inl.h -> js/src/vm/ScopeObject-inl.h -> js/src/jsscriptinlines.h -> js/src/jsobjinlines.h -> js/src/jsinferinlines.h -> js/src/jsfuninlines.h -> js/src/vm/ScopeObject-inl.h -> js/src/vm/Shape-inl.h
![]() |
||
Comment 14•10 years ago
|
||
BTW, I see your try run only included debug builds. Please include opt builds as well! I've frequently had opt-only breakage when working on #includes.
Assignee | ||
Comment 15•10 years ago
|
||
There was actually an opt-only failure, because a debug-only try run doesn't try to build with --disable-ion. Fixed, trying again: https://tbpl.mozilla.org/?tree=Try&rev=e7347b77dcb7
Assignee | ||
Comment 16•10 years ago
|
||
...by adding !defined(JS_ION) guard to all ion headers that are included from outside ion... except for ion/AsmJS.h and maybe one or two others where if you do that, something breaks.
Attachment #759494 -
Flags: review?(n.nethercote)
![]() |
||
Updated•10 years ago
|
Attachment #759494 -
Flags: review?(n.nethercote) → review+
Assignee | ||
Comment 17•10 years ago
|
||
Assignee | ||
Comment 18•10 years ago
|
||
Trying again. https://tbpl.mozilla.org/?tree=Try&rev=b68567b42846
Comment 19•10 years ago
|
||
https://hg.mozilla.org/mozilla-central/rev/3dba555bd153 https://hg.mozilla.org/mozilla-central/rev/e6ca293b6980 https://hg.mozilla.org/mozilla-central/rev/09f13d1498ee https://hg.mozilla.org/mozilla-central/rev/2f5b1bd1ca45 https://hg.mozilla.org/mozilla-central/rev/2f0134cd42e2 https://hg.mozilla.org/mozilla-central/rev/8637d0b818fe https://hg.mozilla.org/mozilla-central/rev/9d940604f3be https://hg.mozilla.org/mozilla-central/rev/b252464d739e https://hg.mozilla.org/mozilla-central/rev/8d444ac557a7
Status: NEW → RESOLVED
Closed: 10 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla24
You need to log in
before you can comment on or make changes to this bug.
Description
•