Closed Bug 750580 Opened 13 years ago Closed 13 years ago

Remove cyclic dependency between Parser and BytecodeEmitter modules

Categories

(Core :: JavaScript Engine, defect)

defect
Not set
normal

Tracking

()

RESOLVED FIXED
mozilla15

People

(Reporter: n.nethercote, Assigned: n.nethercote)

References

Details

Attachments

(1 file, 1 obsolete file)

Attached patch patch (obsolete) — Splinter Review
Currently, Parser.cpp includes BytecodeEmitter.h and BytecodeEmitter.cpp includes Parser.h. If you think of them as modules (e.g. Foo.h, Foo-inl.h and Foo.cpp make up the Foo module), the dependency is this: Parser <--> BytecodeEmitter BytecodeEmitter definitely needs to depend on Parser, but Parser shouldn't need to depend on BytecodeEmitter. By introducing a TreeContext module we can end up with this structure: TreeContext <-- Parser <-- BytecodeEmitter This patch does this. Specifically: - It moves the TCF_* constants and TreeContext struct out of the BytecodeEmitter module into a new TreeContext module. - It moves a bunch of other stuff (StmtType, StmtInfo, etc) that was in the BytecodeEmitter module but is needed by the Parser module into the Parser module. - It moves SrcNoteLineScanner from jsopcodeinlines.h to BytecodeEmitter-inl.h, because the BytecodeEmitter module holds all the SrcNote stuff. - It removes lots of now-unnecessary |#include "BytecodeEmitter.h"| lines. Some of them are replaced with |#include "TreeContext.h|. (Note that TreeContext.h is a *much* smaller file than the old BytecodeEmitter.h.) Most notably, Parser.cpp no longer includes BytecodeEmitter.h. Apologies for the hard-to-read patch, it mostly just moves code around.
Attachment #619799 - Flags: review?(jorendorff)
Note: the new TreeContext-inl.h file doesn't show up in the Splinter review because it was created with a |hg copy| of BytecodeEmitter-inl.h. You can see it in the raw diff.
Depends on: 750282
Blocks: 750606
Attached patch patch v2Splinter Review
Updated for the removal of DefineGlobal and BindTopLevelVar in bug 751818. This patch applies on top of the patch in bug 750282.
Attachment #619799 - Attachment is obsolete: true
Attachment #619799 - Flags: review?(jorendorff)
Attachment #620979 - Flags: review?(jorendorff)
Comment on attachment 620979 [details] [diff] [review] patch v2 Review of attachment 620979 [details] [diff] [review]: ----------------------------------------------------------------- ::: js/src/frontend/TreeContext.h @@ +14,5 @@ > + * for the specific language governing rights and limitations under the > + * License. > + * > + * The Original Code is Mozilla Communicator client code, released > + * March 31, 1998. Heh. MPL2, please.
Comment on attachment 620979 [details] [diff] [review] patch v2 Review of attachment 620979 [details] [diff] [review]: ----------------------------------------------------------------- Great. Just nits. ::: js/src/frontend/BytecodeEmitter-inl.h @@ +45,4 @@ > > namespace js { > > +class SrcNoteLineScanner Why move this? It operates on a finished JSScript, like the stuff in jsopcode.h/cpp, and it doesn't require access to the parser or any internals of the bytecode emitter. I think this code belongs in jsopcodeinlines.h. ::: js/src/frontend/Parser.cpp @@ +7099,5 @@ > } > + > +bool > +frontend::SetStaticLevel(TreeContext *tc, unsigned staticLevel) > +{ I'd like to see a file TreeContext.cpp for this stuff, instead of moving them to Parser.cpp, especially sense all these things basically should be TreeContext methods anyway. Any reason not to do that?
Attachment #620979 - Flags: review?(jorendorff) → review+
> Heh. MPL2, please. I considered this, but every single other file in the JS engine is still listed as MPL 1.1, so I did likewise. Updating them all should be a separate bug.
Status: ASSIGNED → RESOLVED
Closed: 13 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla15
(In reply to Nicholas Nethercote [:njn] from comment #6) > I considered this, but every single other file in the JS engine is still > listed as MPL 1.1, so I did likewise. Updating them all should be a > separate bug. Maybe this is a case of deliberate rule violations, or the rules being overly dogmatic, or something, but the license policy says you must use MPL2 for new files: http://www.mozilla.org/MPL/license-policy.html I was using the tri-license myself on other code for a different reason, fully expecting the eventual world-changing patch would fix things up at that point, until I found out about this.
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: