Skip to content

Commit 321b8ab

Browse files
committed
Convert KeepAliveNode to DSL inlinable
1 parent 0736fe2 commit 321b8ab

File tree

3 files changed

+18
-14
lines changed

3 files changed

+18
-14
lines changed

src/main/java/org/truffleruby/cext/CExtNodes.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1834,7 +1834,7 @@ Object addToMarkList(Object guardedObject,
18341834
ValueWrapper wrappedValue = toWrapperNode.execute(this, guardedObject);
18351835
if (wrappedValue != null) {
18361836
noExceptionProfile.enter(this);
1837-
keepAliveNode.execute(wrappedValue);
1837+
keepAliveNode.execute(this, wrappedValue);
18381838
}
18391839
return nil;
18401840
}

src/main/java/org/truffleruby/cext/ValueWrapper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ static long asPointer(ValueWrapper wrapper,
123123
if (ValueWrapperManager.isTaggedObject(handle)) {
124124
taggedObjectProfile.enter(node);
125125

126-
keepAliveNode.execute(wrapper);
126+
keepAliveNode.execute(node, wrapper);
127127
}
128128

129129
return handle;

src/main/java/org/truffleruby/core/MarkingServiceNodes.java

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@
99
*/
1010
package org.truffleruby.core;
1111

12+
import com.oracle.truffle.api.dsl.GenerateCached;
13+
import com.oracle.truffle.api.dsl.GenerateInline;
1214
import com.oracle.truffle.api.dsl.NeverDefault;
15+
import com.oracle.truffle.api.nodes.Node;
1316
import com.oracle.truffle.api.profiles.InlinedConditionProfile;
1417
import org.truffleruby.cext.ValueWrapper;
1518
import org.truffleruby.core.MarkingService.ExtensionCallStack;
@@ -28,42 +31,43 @@
2831
public abstract class MarkingServiceNodes {
2932

3033
@GenerateUncached
34+
@GenerateCached(false)
35+
@GenerateInline
3136
public abstract static class KeepAliveNode extends RubyBaseNode {
3237

33-
public abstract void execute(ValueWrapper object);
38+
public abstract void execute(Node node, ValueWrapper object);
3439

3540
@Specialization(guards = "!stack.hasKeptObjects()")
36-
void keepFirstObject(ValueWrapper object,
37-
@Bind("getStack(object)") ExtensionCallStack stack) {
41+
static void keepFirstObject(Node node, ValueWrapper object,
42+
@Bind("getStack(node)") ExtensionCallStack stack) {
3843
stack.current.preservedObject = object;
3944
}
4045

4146
@Specialization(guards = "stack.hasSingleKeptObject()")
42-
void keepCreatingList(ValueWrapper object,
43-
@Bind("getStack(object)") ExtensionCallStack stack,
47+
static void keepCreatingList(Node node, ValueWrapper object,
48+
@Bind("getStack(node)") ExtensionCallStack stack,
4449
@Cached InlinedConditionProfile sameObjectProfile) {
45-
if (sameObjectProfile.profile(this, object != stack.current.preservedObject)) {
50+
if (sameObjectProfile.profile(node, object != stack.current.preservedObject)) {
4651
createKeptList(object, stack);
4752
}
4853
}
4954

5055
@Specialization(guards = { "stack.hasKeptObjects()", "!stack.hasSingleKeptObject()" })
5156
@TruffleBoundary
52-
void keepAddingToList(ValueWrapper object,
53-
@Bind("getStack(object)") ExtensionCallStack stack) {
57+
static void keepAddingToList(Node node, ValueWrapper object,
58+
@Bind("getStack(node)") ExtensionCallStack stack) {
5459
stack.current.preservedObjects.add(object);
5560
}
5661

5762
@TruffleBoundary
58-
private void createKeptList(ValueWrapper object, ExtensionCallStack stack) {
63+
private static void createKeptList(ValueWrapper object, ExtensionCallStack stack) {
5964
stack.current.preservedObjects = new ArrayList<>();
6065
stack.current.preservedObjects.add(stack.current.preservedObject);
6166
stack.current.preservedObjects.add(object);
6267
}
6368

64-
// We take a parameter so that the bind isn't considered cacheable.
65-
protected ExtensionCallStack getStack(ValueWrapper object) {
66-
return getLanguage().getCurrentThread().getCurrentFiber().extensionCallStack;
69+
protected static ExtensionCallStack getStack(Node node) {
70+
return getLanguage(node).getCurrentThread().getCurrentFiber().extensionCallStack;
6771
}
6872
}
6973

0 commit comments

Comments
 (0)