Closed
Bug 725674
Opened 14 years ago
Closed 14 years ago
IonMonkey: Compile JSOP_LAMBDA and JSOP_DEFLOCALFUN
Categories
(Core :: JavaScript Engine, defect)
Core
JavaScript Engine
Tracking
()
RESOLVED
FIXED
People
(Reporter: jandem, Assigned: jandem)
References
Details
Attachments
(1 file)
|
38.69 KB,
patch
|
dvander
:
review+
|
Details | Diff | Splinter Review |
No description provided.
| Assignee | ||
Updated•14 years ago
|
Summary: IonMonkey: Compile JSOP_LAMBDA → IonMonkey: Compile JSOP_LAMBDA and JSOP_DEFLOCALFUN
| Assignee | ||
Comment 1•14 years ago
|
||
JSOP_LAMBDA is one of the more complicated deffun*/lambda* ops because we can do some optimizations to avoid cloning the function object in some cases, I hope the other ops will be a bit simpler.
Attachment #596017 -
Flags: review?(dvander)
Comment on attachment 596017 [details] [diff] [review]
Patch
Review of attachment 596017 [details] [diff] [review]:
-----------------------------------------------------------------
::: js/src/ion/IonBuilder.cpp
@@ +3515,5 @@
> +IonBuilder::jsop_lambda(JSFunction *fun)
> +{
> + JS_ASSERT(script->analysis()->usesScopeChain());
> + current->pushSlot(info().scopeChainSlot());
> + MDefinition *scopeChain = current->pop();
It should be okay to use getSlot here, if you want to.
::: js/src/jsanalyze.cpp
@@ +344,5 @@
>
> + case JSOP_DEFLOCALFUN:
> + case JSOP_LAMBDA:
> + usesScopeChain_ = true;
> + isInlineable = false;
Why didn't JM need this to set usesScopeChain?
Attachment #596017 -
Flags: review?(dvander) → review+
| Assignee | ||
Comment 3•14 years ago
|
||
https://hg.mozilla.org/projects/ionmonkey/rev/73866db4e189
(In reply to David Anderson [:dvander] from comment #2)
>
> It should be okay to use getSlot here, if you want to.
Done.
>
> Why didn't JM need this to set usesScopeChain?
JM's lambda stubs call StackFrame::scopeChain(), which sets the scope chain to the callee's environment if HAS_SCOPECHAIN is not set. I discussed this with bhackett on IRC, there are two ways to determine the parent of the new function in IM:
1) Use the scope chain slot (and set usesScopChain_ to true)
2) Use LFunctionEnvironment.
According to bhackett a good argument for 1) is that it will be forward compatible with block compilation.
Status: ASSIGNED → RESOLVED
Closed: 14 years ago
Resolution: --- → FIXED
You need to log in
before you can comment on or make changes to this bug.
Description
•