Skip to content

Commit 0736fe2

Browse files
committed
Convert AllocateHandleNode to DSL inlinable
1 parent a1071d5 commit 0736fe2

File tree

2 files changed

+21
-15
lines changed

2 files changed

+21
-15
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ static void toNative(ValueWrapper wrapper,
108108
@Bind("$node") Node node) {
109109
if (!wrapper.isPointer()) {
110110
createHandleProfile.enter(node);
111-
createNativeHandleNode.execute(wrapper);
111+
createNativeHandleNode.execute(node, wrapper);
112112
}
113113
}
114114

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

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
import java.util.concurrent.atomic.AtomicLong;
1717

1818
import com.oracle.truffle.api.dsl.Bind;
19+
import com.oracle.truffle.api.dsl.GenerateCached;
20+
import com.oracle.truffle.api.dsl.GenerateInline;
1921
import com.oracle.truffle.api.nodes.Node;
2022
import org.truffleruby.RubyContext;
2123
import org.truffleruby.RubyLanguage;
@@ -283,35 +285,39 @@ public static final class HandleBlockHolder {
283285
}
284286

285287
@GenerateUncached
288+
@GenerateInline
289+
@GenerateCached(false)
286290
public abstract static class AllocateHandleNode extends RubyBaseNode {
287291

288292
private static final Set<ValueWrapper> keepAlive = ConcurrentHashMap.newKeySet();
289293

290-
public abstract long execute(ValueWrapper wrapper);
294+
public abstract long execute(Node node, ValueWrapper wrapper);
291295

292296
@Specialization(guards = "!isSharedObject(wrapper)")
293-
long allocateHandleOnKnownThread(ValueWrapper wrapper) {
294-
if (getContext().getOptions().CEXTS_KEEP_HANDLES_ALIVE) {
297+
static long allocateHandleOnKnownThread(Node node, ValueWrapper wrapper) {
298+
if (getContext(node).getOptions().CEXTS_KEEP_HANDLES_ALIVE) {
295299
keepAlive(wrapper);
296300
}
297301
return allocateHandle(
302+
node,
298303
wrapper,
299-
getContext(),
300-
getLanguage(),
301-
getBlockHolder(getContext(), getLanguage()),
304+
getContext(node),
305+
getLanguage(node),
306+
getBlockHolder(getContext(node), getLanguage(node)),
302307
false);
303308
}
304309

305310
@Specialization(guards = "isSharedObject(wrapper)")
306-
long allocateSharedHandleOnKnownThread(ValueWrapper wrapper) {
307-
if (getContext().getOptions().CEXTS_KEEP_HANDLES_ALIVE) {
311+
static long allocateSharedHandleOnKnownThread(Node node, ValueWrapper wrapper) {
312+
if (getContext(node).getOptions().CEXTS_KEEP_HANDLES_ALIVE) {
308313
keepAlive(wrapper);
309314
}
310315
return allocateHandle(
316+
node,
311317
wrapper,
312-
getContext(),
313-
getLanguage(),
314-
getBlockHolder(getContext(), getLanguage()),
318+
getContext(node),
319+
getLanguage(node),
320+
getBlockHolder(getContext(node), getLanguage(node)),
315321
true);
316322
}
317323

@@ -320,8 +326,8 @@ protected static void keepAlive(ValueWrapper wrapper) {
320326
keepAlive.add(wrapper);
321327
}
322328

323-
protected long allocateHandle(ValueWrapper wrapper, RubyContext context, RubyLanguage language,
324-
HandleBlockHolder holder, boolean shared) {
329+
protected static long allocateHandle(Node node, ValueWrapper wrapper, RubyContext context,
330+
RubyLanguage language, HandleBlockHolder holder, boolean shared) {
325331
HandleBlock block;
326332
if (shared) {
327333
block = holder.sharedHandleBlock;
@@ -334,7 +340,7 @@ protected long allocateHandle(ValueWrapper wrapper, RubyContext context, RubyLan
334340
}
335341

336342
if (context.getOptions().BACKTRACE_ON_TO_NATIVE) {
337-
context.getDefaultBacktraceFormatter().printBacktraceOnEnvStderr("ValueWrapper#toNative: ", this);
343+
context.getDefaultBacktraceFormatter().printBacktraceOnEnvStderr("ValueWrapper#toNative: ", node);
338344
}
339345

340346
if (block == null || block.isFull()) {

0 commit comments

Comments
 (0)