Skip to content

Commit 2ec3d0e

Browse files
committed
Convert ForeignToRubyArgumentsNode to DSL inlinable node
1 parent 3b690b5 commit 2ec3d0e

File tree

6 files changed

+30
-15
lines changed

6 files changed

+30
-15
lines changed

src/main/java/org/truffleruby/core/method/RubyMethod.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
import java.util.Set;
1313

14+
import com.oracle.truffle.api.dsl.Bind;
15+
import com.oracle.truffle.api.nodes.Node;
1416
import org.truffleruby.core.klass.RubyClass;
1517
import org.truffleruby.interop.ForeignToRubyArgumentsNode;
1618
import org.truffleruby.language.RubyDynamicObject;
@@ -69,8 +71,9 @@ public boolean isExecutable() {
6971
@ExportMessage
7072
public Object execute(Object[] arguments,
7173
@Cached ForeignToRubyArgumentsNode foreignToRubyArgumentsNode,
72-
@Cached CallInternalMethodNode callInternalMethodNode) {
73-
final Object[] convertedArguments = foreignToRubyArgumentsNode.executeConvert(arguments);
74+
@Cached CallInternalMethodNode callInternalMethodNode,
75+
@Bind("$node") Node node) {
76+
final Object[] convertedArguments = foreignToRubyArgumentsNode.executeConvert(node, arguments);
7477
final Object[] frameArgs = RubyArguments.pack(null, null, method, null, receiver, nil,
7578
EmptyArgumentsDescriptor.INSTANCE, convertedArguments);
7679
return callInternalMethodNode.execute(null, method, receiver, frameArgs);

src/main/java/org/truffleruby/core/proc/RubyProc.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,7 @@ public Object execute(Object[] arguments,
149149
@Cached CallBlockNode yieldNode,
150150
@Cached ForeignToRubyArgumentsNode foreignToRubyArgumentsNode,
151151
@Bind("$node") Node node) {
152-
return yieldNode.yield(node, this, foreignToRubyArgumentsNode.executeConvert(arguments));
152+
return yieldNode.yield(node, this, foreignToRubyArgumentsNode.executeConvert(node, arguments));
153153
}
154154
// endregion
155155
}

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

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
*/
1010
package org.truffleruby.interop;
1111

12+
import com.oracle.truffle.api.dsl.GenerateCached;
13+
import com.oracle.truffle.api.dsl.GenerateInline;
14+
import com.oracle.truffle.api.nodes.Node;
1215
import org.truffleruby.language.RubyBaseNode;
1316

1417
import com.oracle.truffle.api.dsl.Cached;
@@ -17,15 +20,17 @@
1720
import com.oracle.truffle.api.nodes.ExplodeLoop;
1821

1922
@GenerateUncached
23+
@GenerateCached(false)
24+
@GenerateInline
2025
public abstract class ForeignToRubyArgumentsNode extends RubyBaseNode {
2126

22-
public abstract Object[] executeConvert(Object[] args);
27+
public abstract Object[] executeConvert(Node node, Object[] args);
2328

2429
@ExplodeLoop
2530
@Specialization(
2631
guards = { "args.length == cachedArgsLength", "cachedArgsLength <= MAX_EXPLODE_SIZE" },
2732
limit = "getLimit()")
28-
Object[] convertCached(Object[] args,
33+
static Object[] convertCached(Object[] args,
2934
@Cached("args.length") int cachedArgsLength,
3035
@Cached("foreignToRubyNodes(cachedArgsLength)") ForeignToRubyNode[] foreignToRubyNodes) {
3136
final Object[] convertedArgs = new Object[cachedArgsLength];
@@ -38,12 +43,12 @@ Object[] convertCached(Object[] args,
3843
}
3944

4045
@Specialization(replaces = "convertCached")
41-
Object[] convertUncached(Object[] args,
46+
static Object[] convertUncached(Node node, Object[] args,
4247
@Cached ForeignToRubyNode foreignToRubyNode) {
4348
final Object[] convertedArgs = new Object[args.length];
4449

4550
for (int n = 0; n < args.length; n++) {
46-
convertedArgs[n] = foreignToRubyNode.execute(this, args[n]);
51+
convertedArgs[n] = foreignToRubyNode.execute(node, args[n]);
4752
}
4853

4954
return convertedArgs;

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
*/
1010
package org.truffleruby.interop;
1111

12+
import com.oracle.truffle.api.dsl.Bind;
13+
import com.oracle.truffle.api.nodes.Node;
1214
import org.truffleruby.RubyLanguage;
1315
import org.truffleruby.core.array.ArrayUtils;
1416
import org.truffleruby.language.dispatch.DispatchNode;
@@ -49,7 +51,7 @@ protected Object send(Message message, Object[] rawArgs,
4951
@Cached DispatchNode dispatchNode,
5052
@Cached ForeignToRubyArgumentsNode foreignToRubyArgumentsNode,
5153
@CachedLibrary("this.delegate") ReflectionLibrary reflections,
52-
@CachedLibrary("this") ReflectionLibrary node) throws Exception {
54+
@Bind("$node") Node node) throws Exception {
5355

5456
if (message == IS_META_INSTANCE) { // Workaround StackOverflowError in asserts (GR-37197)
5557
rawArgs = rawArgs.clone();
@@ -75,7 +77,7 @@ protected Object send(Message message, Object[] rawArgs,
7577
}
7678
}
7779

78-
Object[] convertedArgs = foreignToRubyArgumentsNode.executeConvert(loggingArgs);
80+
Object[] convertedArgs = foreignToRubyArgumentsNode.executeConvert(node, loggingArgs);
7981
dispatchNode.call(logger, "<<", convertedArgs);
8082
}
8183

src/main/java/org/truffleruby/language/ImmutableRubyObject.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@
1010
package org.truffleruby.language;
1111

1212
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
13+
import com.oracle.truffle.api.dsl.Bind;
1314
import com.oracle.truffle.api.library.CachedLibrary;
15+
import com.oracle.truffle.api.nodes.Node;
1416
import com.oracle.truffle.api.profiles.ConditionProfile;
1517
import com.oracle.truffle.api.utilities.TriState;
1618
import org.truffleruby.RubyContext;
@@ -144,9 +146,10 @@ public boolean isMemberInvocable(String name,
144146
public Object invokeMember(String name, Object[] arguments,
145147
@Cached @Exclusive DispatchNode dispatchMember,
146148
@Cached @Exclusive ForeignToRubyArgumentsNode foreignToRubyArgumentsNode,
147-
@Cached @Shared BranchProfile errorProfile)
149+
@Cached @Shared BranchProfile errorProfile,
150+
@Bind("$node") Node node)
148151
throws UnknownIdentifierException {
149-
Object[] convertedArguments = foreignToRubyArgumentsNode.executeConvert(arguments);
152+
Object[] convertedArguments = foreignToRubyArgumentsNode.executeConvert(node, arguments);
150153
Object result = dispatchMember.call(PRIVATE_RETURN_MISSING, this, name, convertedArguments);
151154
if (result == DispatchNode.MISSING) {
152155
errorProfile.enter();

src/main/java/org/truffleruby/language/RubyDynamicObject.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -670,9 +670,10 @@ public Object invokeMember(String name, Object[] arguments,
670670
@Cached @Exclusive ForeignToRubyArgumentsNode foreignToRubyArgumentsNode,
671671
@Cached @Shared ConditionProfile dynamicProfile,
672672
@Cached @Shared TranslateInteropRubyExceptionNode translateRubyException,
673-
@Cached @Shared BranchProfile errorProfile)
673+
@Cached @Shared BranchProfile errorProfile,
674+
@Bind("$node") Node node)
674675
throws UnknownIdentifierException, UnsupportedTypeException, UnsupportedMessageException, ArityException {
675-
Object[] convertedArguments = foreignToRubyArgumentsNode.executeConvert(arguments);
676+
Object[] convertedArguments = foreignToRubyArgumentsNode.executeConvert(node, arguments);
676677
Object[] combinedArguments = ArrayUtils.unshift(convertedArguments, name);
677678
Object dynamic;
678679
try {
@@ -877,10 +878,11 @@ public boolean isInstantiable(
877878
public Object instantiate(Object[] arguments,
878879
@Cached @Shared BranchProfile errorProfile,
879880
@Cached @Exclusive DispatchNode dispatchNode,
880-
@Cached @Exclusive ForeignToRubyArgumentsNode foreignToRubyArgumentsNode)
881+
@Cached @Exclusive ForeignToRubyArgumentsNode foreignToRubyArgumentsNode,
882+
@Bind("$node") Node node)
881883
throws UnsupportedMessageException {
882884
Object instance = dispatchNode.call(PUBLIC_RETURN_MISSING, this, "new",
883-
foreignToRubyArgumentsNode.executeConvert(arguments));
885+
foreignToRubyArgumentsNode.executeConvert(node, arguments));
884886

885887
// TODO (pitr-ch 28-Jan-2020): we should translate argument-error caused by bad arity to ArityException
886888
if (instance == DispatchNode.MISSING) {

0 commit comments

Comments
 (0)