Closed
Bug 1217001
Opened 9 years ago
Closed 9 years ago
Refactor BytecodeEmitter::emitVariables
Categories
(Core :: JavaScript Engine, defect)
Core
JavaScript Engine
Tracking
()
RESOLVED
FIXED
mozilla44
Tracking | Status | |
---|---|---|
firefox44 | --- | fixed |
People
(Reporter: jorendorff, Assigned: jorendorff)
References
Details
Attachments
(14 files)
4.14 KB,
patch
|
shu
:
review+
|
Details | Diff | Splinter Review |
9.25 KB,
patch
|
shu
:
review+
|
Details | Diff | Splinter Review |
6.46 KB,
patch
|
Details | Diff | Splinter Review | |
2.08 KB,
patch
|
shu
:
review+
|
Details | Diff | Splinter Review |
2.31 KB,
patch
|
shu
:
review+
|
Details | Diff | Splinter Review |
6.07 KB,
patch
|
Details | Diff | Splinter Review | |
4.11 KB,
patch
|
shu
:
review+
|
Details | Diff | Splinter Review |
2.79 KB,
patch
|
shu
:
review+
|
Details | Diff | Splinter Review |
5.88 KB,
patch
|
shu
:
review+
|
Details | Diff | Splinter Review |
4.41 KB,
patch
|
shu
:
review+
|
Details | Diff | Splinter Review |
11.20 KB,
patch
|
shu
:
review+
|
Details | Diff | Splinter Review |
4.35 KB,
patch
|
shu
:
review+
|
Details | Diff | Splinter Review |
9.68 KB,
patch
|
Details | Diff | Splinter Review | |
5.02 KB,
patch
|
shu
:
review+
|
Details | Diff | Splinter Review |
No description provided.
Assignee | ||
Comment 1•9 years ago
|
||
Attachment #8676877 -
Flags: review?(shu)
Assignee | ||
Updated•9 years ago
|
Assignee: nobody → jorendorff
Status: NEW → ASSIGNED
Assignee | ||
Comment 2•9 years ago
|
||
Attachment #8676885 -
Flags: review?(shu)
Assignee | ||
Comment 3•9 years ago
|
||
Assignee | ||
Comment 4•9 years ago
|
||
Attachment #8676888 -
Flags: review?(shu)
Assignee | ||
Comment 5•9 years ago
|
||
Attachment #8676893 -
Flags: review?(shu)
Assignee | ||
Comment 6•9 years ago
|
||
Assignee | ||
Comment 7•9 years ago
|
||
Attachment #8676897 -
Flags: review?(shu)
Assignee | ||
Comment 8•9 years ago
|
||
Attachment #8676898 -
Flags: review?(shu)
Assignee | ||
Comment 9•9 years ago
|
||
In particular, before this patch, emitNormalFor expected `emitTree(|var x = 3;|)` to leave the value `3` on the operand stack. This is totally weird and must die.
Attachment #8676946 -
Flags: review?(shu)
Assignee | ||
Comment 10•9 years ago
|
||
Attachment #8676980 -
Flags: review?(shu)
Assignee | ||
Comment 11•9 years ago
|
||
Attachment #8676989 -
Flags: review?(shu)
Assignee | ||
Comment 12•9 years ago
|
||
Attachment #8676990 -
Flags: review?(shu)
Assignee | ||
Comment 13•9 years ago
|
||
Assignee | ||
Comment 14•9 years ago
|
||
Attachment #8676999 -
Flags: review?(shu)
Comment 15•9 years ago
|
||
Comment on attachment 8676877 [details] [diff] [review]
Refactor BytecodeEmitter::variables. Part 1: preliminaries
Review of attachment 8676877 [details] [diff] [review]:
-----------------------------------------------------------------
::: js/src/frontend/BytecodeEmitter.cpp
@@ +4258,5 @@
> return false;
> if (!emitInitializeDestructuringDecls(pn->getOp(), pn2))
> return false;
> }
> + continue;
Note to self: this change is okay because in this case, we know pn->pn_count == 1 and so pn2->pn_next == nullptr.
Attachment #8676877 -
Flags: review?(shu) → review+
Comment 16•9 years ago
|
||
Comment on attachment 8676885 [details] [diff] [review]
Part 2: Rename two local variables and improve some old comments
Review of attachment 8676885 [details] [diff] [review]:
-----------------------------------------------------------------
::: js/src/frontend/BytecodeEmitter.cpp
@@ +4231,5 @@
> + if (!binding->isKind(PNK_NAME)) {
> + if (binding->isKind(PNK_ARRAY) || binding->isKind(PNK_OBJECT)) {
> + // Destructuring BindingPattern in a `for` loop head:
> + // for (let [x, y] of pts) ...;
> + // a = [x*y for (let [x, y] of pts)];
Add a note saying comprehension syntax is legacy.
Attachment #8676885 -
Flags: review?(shu) → review+
Updated•9 years ago
|
Attachment #8676888 -
Flags: review?(shu) → review+
Updated•9 years ago
|
Attachment #8676893 -
Flags: review?(shu) → review+
Updated•9 years ago
|
Attachment #8676897 -
Flags: review?(shu) → review+
Updated•9 years ago
|
Attachment #8676898 -
Flags: review?(shu) → review+
Comment 17•9 years ago
|
||
Comment on attachment 8676946 [details] [diff] [review]
Part 7: Change BytecodeEmitter::emitNormalFor() to decouple it from weird expectations about BytecodeEmitter::emitVariables()
Review of attachment 8676946 [details] [diff] [review]:
-----------------------------------------------------------------
::: js/src/frontend/BytecodeEmitter.cpp
@@ +5609,5 @@
> */
> unsigned noteIndex;
> if (!newSrcNote(SRC_FOR, ¬eIndex))
> return false;
> + if (!emit1(JSOP_NOP))
Why do we emit this NOP?
@@ +5702,5 @@
> if (!setSrcNoteOffset(noteIndex, 2, offset() - tmp))
> return false;
>
> /* If no loop condition, just emit a loop-closing jump. */
> + JSOp op = forHead->pn_kid2 ? JSOP_IFNE : JSOP_GOTO;
Is the emitJump below the only use of this? Maybe just inline the expression?
Attachment #8676946 -
Flags: review?(shu) → review+
Comment 18•9 years ago
|
||
Comment on attachment 8676980 [details] [diff] [review]
Part 8: Eliminate all uses of PNX_POPVAR
Review of attachment 8676980 [details] [diff] [review]:
-----------------------------------------------------------------
Very nice.
Attachment #8676980 -
Flags: review?(shu) → review+
Comment 19•9 years ago
|
||
Comment on attachment 8676989 [details] [diff] [review]
Part 9: Remove PNX_POPVAR
Review of attachment 8676989 [details] [diff] [review]:
-----------------------------------------------------------------
::: js/src/frontend/Parser.cpp
@@ -5015,5 @@
> if (!kid)
> return null();
> - kid->pn_xflags = PNX_POPVAR;
> -
> - kid = MatchOrInsertSemicolonAfterExpression(tokenStream) ? kid : nullptr;
lol is this for real
Attachment #8676989 -
Flags: review?(shu) → review+
Updated•9 years ago
|
Attachment #8676990 -
Flags: review?(shu) → review+
Assignee | ||
Comment 20•9 years ago
|
||
(In reply to Shu-yu Guo [:shu] from comment #16)
> Add a note saying comprehension syntax is legacy.
Done.
> Why do we emit this NOP?
Good question. I'll revisit it; this patch was just taking the shortest path.
Updated•9 years ago
|
Attachment #8676999 -
Flags: review?(shu) → review+
Assignee | ||
Comment 21•9 years ago
|
||
(In reply to Shu-yu Guo [:shu] from comment #17)
> ::: js/src/frontend/BytecodeEmitter.cpp
> > unsigned noteIndex;
> > if (!newSrcNote(SRC_FOR, ¬eIndex))
> > return false;
> > + if (!emit1(JSOP_NOP))
>
> Why do we emit this NOP?
OK. It's to hang the SRC_FOR source note on. Ion requires this source note. I think we can eliminate the NOP, but the code here and in IonBuilder::forLoop is slightly simplified by the JSOP_NOP instruction, because the size of the instruction is always 1.
If you like I can file a follow-up bug and do this. Otherwise I'm going to leave it.
> > + JSOp op = forHead->pn_kid2 ? JSOP_IFNE : JSOP_GOTO;
>
> Is the emitJump below the only use of this? Maybe just inline the expression?
Yep. Done.
Comment 22•9 years ago
|
||
(In reply to Jason Orendorff [:jorendorff] from comment #21)
> (In reply to Shu-yu Guo [:shu] from comment #17)
> > ::: js/src/frontend/BytecodeEmitter.cpp
> > > unsigned noteIndex;
> > > if (!newSrcNote(SRC_FOR, ¬eIndex))
> > > return false;
> > > + if (!emit1(JSOP_NOP))
> >
> > Why do we emit this NOP?
>
> OK. It's to hang the SRC_FOR source note on. Ion requires this source note.
> I think we can eliminate the NOP, but the code here and in
> IonBuilder::forLoop is slightly simplified by the JSOP_NOP instruction,
> because the size of the instruction is always 1.
>
> If you like I can file a follow-up bug and do this. Otherwise I'm going to
> leave it.
>
Ah okay, no need to file a bug. I'm fine with leaving this in.
Assignee | ||
Comment 23•9 years ago
|
||
https://hg.mozilla.org/integration/mozilla-inbound/rev/c4ff10c36ebe8aa2b7d8ddbea1943dffa8ec4798
Bug 1217001 - Refactor BytecodeEmitter::variables. Part 1: preliminaries. r=shu.
https://hg.mozilla.org/integration/mozilla-inbound/rev/6a07f584d3bccc2a774fd28d9c2789ba20fcf4cc
Bug 1217001 - Part 2: Rename two local variables and improve some old comments. r=shu.
https://hg.mozilla.org/integration/mozilla-inbound/rev/0d67895e08fb92e9057532220021aeee1b9516fd
Bug 1217001 - Part 3: Remove one goto statement. r=shu.
https://hg.mozilla.org/integration/mozilla-inbound/rev/310949c85ae5c26261769444557189190063d8cb
Bug 1217001 - Part 4: Improve the comments on VarEmitOption. r=shu.
https://hg.mozilla.org/integration/mozilla-inbound/rev/264a443f5b066271214455b212d1327ab8770eec
Bug 1217001 - Part 5: Further revise control structure in BytecodeEmitter::emitVariables(). r=shu.
https://hg.mozilla.org/integration/mozilla-inbound/rev/6b9964e08cec60cc94fdfc5f8fb625e6fb7a791c
Bug 1217001 - Part 6: Eliminate some `continue` statements. r=shu.
https://hg.mozilla.org/integration/mozilla-inbound/rev/b5e96d501788e41f3d7d305dd3cff384e8dd3ae7
Bug 1217001 - Part 7: Change BytecodeEmitter::emitNormalFor() to decouple it from weird expectations about BytecodeEmitter::emitVariables(). r=shu.
https://hg.mozilla.org/integration/mozilla-inbound/rev/1e0dcdea04ffe410ee31a565b80de1e1ab4c9093
Bug 1217001 - Part 8: Eliminate all uses of PNX_POPVAR. r=shu.
https://hg.mozilla.org/integration/mozilla-inbound/rev/f7d59de65bcd8300135a7abbd1aef8fb4a526592
Bug 1217001 - Part 9: Remove PNX_POPVAR. r=shu.
https://hg.mozilla.org/integration/mozilla-inbound/rev/8bb80a132a0c33b0abb63b9026888e615ae712ae
Bug 1217001 - Part 10: Delete redundant boolean argument. r=shu.
https://hg.mozilla.org/integration/mozilla-inbound/rev/119bb65c0ae504029651c622134906a787cbdc8b
Bug 1217001 - Part 11: Get rid of the last goto in BytecodeEmitter::emitVariables(). r=shu.
Comment 24•9 years ago
|
||
https://hg.mozilla.org/mozilla-central/rev/c4ff10c36ebe
https://hg.mozilla.org/mozilla-central/rev/6a07f584d3bc
https://hg.mozilla.org/mozilla-central/rev/0d67895e08fb
https://hg.mozilla.org/mozilla-central/rev/310949c85ae5
https://hg.mozilla.org/mozilla-central/rev/264a443f5b06
https://hg.mozilla.org/mozilla-central/rev/6b9964e08cec
https://hg.mozilla.org/mozilla-central/rev/b5e96d501788
https://hg.mozilla.org/mozilla-central/rev/1e0dcdea04ff
https://hg.mozilla.org/mozilla-central/rev/f7d59de65bcd
https://hg.mozilla.org/mozilla-central/rev/8bb80a132a0c
https://hg.mozilla.org/mozilla-central/rev/119bb65c0ae5
Status: ASSIGNED → RESOLVED
Closed: 9 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla44
You need to log in
before you can comment on or make changes to this bug.
Description
•