Skip to content

Commit 46b7d72

Browse files
committed
ForeignToRubyNode is DSL inlinable node
1 parent d62601f commit 46b7d72

File tree

6 files changed

+37
-24
lines changed

6 files changed

+37
-24
lines changed

src/main/java/org/truffleruby/core/hash/RubyHash.java

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,9 @@ public Object accept(Frame frame, Object hash, Object key) {
127127
@ExportMessage(name = "isHashEntryReadable", limit = "hashStrategyLimit()")
128128
public final boolean isHashEntryExisting(Object key,
129129
@CachedLibrary("this.store") HashStoreLibrary hashStores,
130-
@Cached @Shared ForeignToRubyNode toRuby) {
131-
return hashStores.lookupOrDefault(store, null, this, toRuby.executeConvert(key), NULL_PROVIDER) != null;
130+
@Cached @Shared ForeignToRubyNode toRuby,
131+
@Bind("$node") Node node) {
132+
return hashStores.lookupOrDefault(store, null, this, toRuby.execute(node, key), NULL_PROVIDER) != null;
132133
}
133134

134135
@ExportMessage(name = "isHashEntryModifiable")
@@ -153,7 +154,7 @@ public Object readHashValue(Object key,
153154
@Cached InlinedConditionProfile unknownKey,
154155
@Bind("$node") Node node)
155156
throws UnknownKeyException {
156-
final Object value = hashStores.lookupOrDefault(store, null, this, toRuby.executeConvert(key), NULL_PROVIDER);
157+
final Object value = hashStores.lookupOrDefault(store, null, this, toRuby.execute(node, key), NULL_PROVIDER);
157158
if (unknownKey.profile(node, value == null)) {
158159
throw UnknownKeyException.create(key);
159160
}
@@ -163,37 +164,40 @@ public Object readHashValue(Object key,
163164
@ExportMessage(limit = "hashStrategyLimit()")
164165
public Object readHashValueOrDefault(Object key, Object defaultValue,
165166
@CachedLibrary("this.store") HashStoreLibrary hashStores,
166-
@Cached @Shared ForeignToRubyNode toRuby) {
167+
@Cached @Shared ForeignToRubyNode toRuby,
168+
@Bind("$node") Node node) {
167169
return hashStores
168-
.lookupOrDefault(store, null, this, toRuby.executeConvert(key), new DefaultProvider(defaultValue));
170+
.lookupOrDefault(store, null, this, toRuby.execute(node, key), new DefaultProvider(defaultValue));
169171
}
170172

171173
@ExportMessage
172174
public void writeHashEntry(Object key, Object value,
173175
@Cached @Exclusive DispatchNode set,
174176
@Cached @Shared IsFrozenNode isFrozenNode,
175-
@Cached @Shared ForeignToRubyNode toRuby)
177+
@Cached @Shared ForeignToRubyNode toRuby,
178+
@Bind("$node") Node node)
176179
throws UnsupportedMessageException {
177180
if (isFrozenNode.execute(this)) {
178181
throw UnsupportedMessageException.create();
179182
}
180-
set.call(this, "[]=", toRuby.executeConvert(key), value);
183+
set.call(this, "[]=", toRuby.execute(node, key), value);
181184
}
182185

183186
@ExportMessage
184187
public void removeHashEntry(Object key,
185188
@Cached @Exclusive DispatchNode delete,
186189
@Shared @Cached IsFrozenNode isFrozenNode,
187190
@CachedLibrary("this") InteropLibrary interop,
188-
@Cached @Shared ForeignToRubyNode toRuby)
191+
@Cached @Shared ForeignToRubyNode toRuby,
192+
@Bind("$node") Node node)
189193
throws UnsupportedMessageException, UnknownKeyException {
190194
if (isFrozenNode.execute(this)) {
191195
throw UnsupportedMessageException.create();
192196
}
193197
if (!interop.isHashEntryExisting(this, key)) {
194198
throw UnknownKeyException.create(key);
195199
}
196-
delete.call(this, "delete", toRuby.executeConvert(key));
200+
delete.call(this, "delete", toRuby.execute(node, key));
197201
}
198202

199203
@ExportMessage

src/main/java/org/truffleruby/core/thread/ThreadNodes.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1037,7 +1037,7 @@ protected Object runBlockingSystemCall(Object executable, RubyArray argsArray,
10371037
blockingCallInterruptible,
10381038
this);
10391039
// Convert byte, short & float from NFI to int & double
1040-
return foreignToRubyNode.executeConvert(result);
1040+
return foreignToRubyNode.execute(this, result);
10411041
}
10421042
}
10431043
}

src/main/java/org/truffleruby/interop/ForeignToRubyArgumentsNode.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ protected Object[] convertCached(Object[] args,
3131
final Object[] convertedArgs = new Object[cachedArgsLength];
3232

3333
for (int n = 0; n < cachedArgsLength; n++) {
34-
convertedArgs[n] = foreignToRubyNodes[n].executeConvert(args[n]);
34+
convertedArgs[n] = foreignToRubyNodes[n].executeCached(args[n]);
3535
}
3636

3737
return convertedArgs;
@@ -43,7 +43,7 @@ protected Object[] convertUncached(Object[] args,
4343
final Object[] convertedArgs = new Object[args.length];
4444

4545
for (int n = 0; n < args.length; n++) {
46-
convertedArgs[n] = foreignToRubyNode.executeConvert(args[n]);
46+
convertedArgs[n] = foreignToRubyNode.execute(this, args[n]);
4747
}
4848

4949
return convertedArgs;

src/main/java/org/truffleruby/interop/ForeignToRubyNode.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,33 +10,42 @@
1010
package org.truffleruby.interop;
1111

1212
import com.oracle.truffle.api.dsl.Fallback;
13+
import com.oracle.truffle.api.dsl.GenerateCached;
14+
import com.oracle.truffle.api.dsl.GenerateInline;
15+
import com.oracle.truffle.api.nodes.Node;
1316
import org.truffleruby.language.RubyBaseNode;
1417

1518
import com.oracle.truffle.api.dsl.GenerateUncached;
1619
import com.oracle.truffle.api.dsl.Specialization;
1720

1821
@GenerateUncached
22+
@GenerateInline(inlineByDefault = true)
23+
@GenerateCached
1924
public abstract class ForeignToRubyNode extends RubyBaseNode {
2025

21-
public abstract Object executeConvert(Object value);
26+
public final Object executeCached(Object value) {
27+
return execute(this, value);
28+
}
29+
30+
public abstract Object execute(Node node, Object value);
2231

2332
@Specialization
24-
protected int convertByte(byte value) {
33+
protected static int convertByte(byte value) {
2534
return value;
2635
}
2736

2837
@Specialization
29-
protected int convertShort(short value) {
38+
protected static int convertShort(short value) {
3039
return value;
3140
}
3241

3342
@Specialization
34-
protected double convertFloat(float value) {
43+
protected static double convertFloat(float value) {
3544
return value;
3645
}
3746

3847
@Fallback
39-
protected Object convert(Object value) {
48+
protected static Object convert(Object value) {
4049
return value;
4150
}
4251

src/main/java/org/truffleruby/interop/InteropNodes.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -520,7 +520,7 @@ protected static Object interopExecute(Object receiver, Object[] args,
520520
@Cached TranslateInteropExceptionNode translateInteropException,
521521
@Bind("this") Node node) {
522522
final Object foreign = InteropNodes.execute(node, receiver, args, receivers, translateInteropException);
523-
return foreignToRubyNode.executeConvert(foreign);
523+
return foreignToRubyNode.execute(node, foreign);
524524
}
525525
}
526526

@@ -564,7 +564,7 @@ protected static Object newCached(Object receiver, Object[] args,
564564
throw translateInteropException.execute(node, e);
565565
}
566566

567-
return foreignToRubyNode.executeConvert(foreign);
567+
return foreignToRubyNode.execute(node, foreign);
568568
}
569569
}
570570
// endregion
@@ -615,7 +615,7 @@ protected static Object readArrayElement(Object receiver, long identifier,
615615
throw translateInteropException.execute(node, e);
616616
}
617617

618-
return foreignToRubyNode.executeConvert(foreign);
618+
return foreignToRubyNode.execute(node, foreign);
619619
}
620620
}
621621

@@ -1284,7 +1284,7 @@ protected static Object readMember(Node node, Object receiver, Object identifier
12841284
@Cached ForeignToRubyNode foreignToRubyNode) {
12851285
final String name = toJavaStringNode.execute(node, identifier);
12861286
final Object foreign = InteropNodes.readMember(node, receivers, receiver, name, translateInteropException);
1287-
return foreignToRubyNode.executeConvert(foreign);
1287+
return foreignToRubyNode.execute(node, foreign);
12881288
}
12891289
}
12901290

@@ -1409,7 +1409,7 @@ protected static Object invokeCached(Node node, Object receiver, Object identifi
14091409
@Cached TranslateInteropExceptionNode translateInteropException) {
14101410
final String name = toJavaStringNode.execute(node, identifier);
14111411
final Object foreign = invoke(node, receivers, receiver, name, args, translateInteropException);
1412-
return foreignToRubyNode.executeConvert(foreign);
1412+
return foreignToRubyNode.execute(node, foreign);
14131413
}
14141414
}
14151415

@@ -1553,7 +1553,7 @@ protected Object importObject(Object name,
15531553
final var nameAsString = toJavaStringNode.execute(this, name);
15541554
final Object value = doImport(nameAsString);
15551555
if (value != null) {
1556-
return foreignToRubyNode.executeConvert(value);
1556+
return foreignToRubyNode.execute(this, value);
15571557
} else {
15581558
errorProfile.enter(this);
15591559
throw new RaiseException(getContext(), coreExceptions().nameErrorImportNotFound(nameAsString, this));

src/main/java/org/truffleruby/interop/PolyglotNodes.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -292,7 +292,7 @@ private static Object eval(Node node, RubyInnerContext rubyInnerContext, Source
292292
coreExceptions(node).argumentError(Utils.concat("Unknown language: ", source.getLanguage()),
293293
node));
294294
}
295-
return foreignToRubyNode.executeConvert(result);
295+
return foreignToRubyNode.execute(node, result);
296296
}
297297

298298
@TruffleBoundary

0 commit comments

Comments
 (0)