Skip to content

Commit 41510ec

Browse files
committed
Load resumption call target when materializing async/generator function expressions.
1 parent 65817f2 commit 41510ec

File tree

4 files changed

+38
-0
lines changed

4 files changed

+38
-0
lines changed

graal-js/src/com.oracle.truffle.js/src/com/oracle/truffle/js/nodes/control/AsyncFunctionBodyNode.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import com.oracle.truffle.api.frame.Frame;
5252
import com.oracle.truffle.api.frame.MaterializedFrame;
5353
import com.oracle.truffle.api.frame.VirtualFrame;
54+
import com.oracle.truffle.api.instrumentation.InstrumentableNode;
5455
import com.oracle.truffle.api.instrumentation.Tag;
5556
import com.oracle.truffle.api.nodes.DirectCallNode;
5657
import com.oracle.truffle.api.source.SourceSection;
@@ -284,4 +285,12 @@ protected JavaScriptNode copyUninitialized(Set<Class<? extends Tag>> materialize
284285
resumptionRootNode);
285286
}
286287

288+
@Override
289+
public InstrumentableNode materializeInstrumentableNodes(Set<Class<? extends Tag>> materializedTags) {
290+
if (!materializedTags.isEmpty()) {
291+
// ensure resumption call target is visible to instrumentation.
292+
resumptionRootNode.getCallTarget();
293+
}
294+
return this;
295+
}
287296
}

graal-js/src/com.oracle.truffle.js/src/com/oracle/truffle/js/nodes/control/AsyncGeneratorBodyNode.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@
5353
import com.oracle.truffle.api.frame.Frame;
5454
import com.oracle.truffle.api.frame.MaterializedFrame;
5555
import com.oracle.truffle.api.frame.VirtualFrame;
56+
import com.oracle.truffle.api.instrumentation.InstrumentableNode;
5657
import com.oracle.truffle.api.instrumentation.Tag;
5758
import com.oracle.truffle.api.source.SourceSection;
5859
import com.oracle.truffle.api.strings.TruffleString;
@@ -300,4 +301,13 @@ protected JavaScriptNode copyUninitialized(Set<Class<? extends Tag>> materialize
300301
cloneUninitialized(writeAsyncContext, materializedTags),
301302
resumptionRootNode);
302303
}
304+
305+
@Override
306+
public InstrumentableNode materializeInstrumentableNodes(Set<Class<? extends Tag>> materializedTags) {
307+
if (!materializedTags.isEmpty()) {
308+
// ensure resumption call target is visible to instrumentation.
309+
resumptionRootNode.getCallTarget();
310+
}
311+
return this;
312+
}
303313
}

graal-js/src/com.oracle.truffle.js/src/com/oracle/truffle/js/nodes/control/GeneratorBodyNode.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import java.util.Set;
4545

4646
import com.oracle.truffle.api.frame.VirtualFrame;
47+
import com.oracle.truffle.api.instrumentation.InstrumentableNode;
4748
import com.oracle.truffle.api.instrumentation.Tag;
4849
import com.oracle.truffle.api.profiles.BranchProfile;
4950
import com.oracle.truffle.api.profiles.ConditionProfile;
@@ -217,4 +218,13 @@ private void generatorStart(VirtualFrame frame, JSDynamicObject generatorObject)
217218
protected JavaScriptNode copyUninitialized(Set<Class<? extends Tag>> materializedTags) {
218219
return new GeneratorBodyNode(context, generatorRootNode);
219220
}
221+
222+
@Override
223+
public InstrumentableNode materializeInstrumentableNodes(Set<Class<? extends Tag>> materializedTags) {
224+
if (!materializedTags.isEmpty()) {
225+
// ensure resumption call target is visible to instrumentation.
226+
generatorRootNode.getCallTarget();
227+
}
228+
return this;
229+
}
220230
}

graal-js/src/com.oracle.truffle.js/src/com/oracle/truffle/js/nodes/control/TopLevelAwaitModuleBodyNode.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
import com.oracle.truffle.api.exception.AbstractTruffleException;
4747
import com.oracle.truffle.api.frame.MaterializedFrame;
4848
import com.oracle.truffle.api.frame.VirtualFrame;
49+
import com.oracle.truffle.api.instrumentation.InstrumentableNode;
4950
import com.oracle.truffle.api.instrumentation.Tag;
5051
import com.oracle.truffle.api.nodes.DirectCallNode;
5152
import com.oracle.truffle.api.source.SourceSection;
@@ -199,4 +200,12 @@ protected JavaScriptNode copyUninitialized(Set<Class<? extends Tag>> materialize
199200
resumptionRootNode);
200201
}
201202

203+
@Override
204+
public InstrumentableNode materializeInstrumentableNodes(Set<Class<? extends Tag>> materializedTags) {
205+
if (!materializedTags.isEmpty()) {
206+
// ensure resumption call target is visible to instrumentation.
207+
resumptionRootNode.getCallTarget();
208+
}
209+
return this;
210+
}
202211
}

0 commit comments

Comments
 (0)