Skip to content

Commit 7e07d2b

Browse files
committed
[GR-17457] Refactor nodes to later support DSL inlining 2
PullRequest: truffleruby/3862
2 parents 758004f + dc31407 commit 7e07d2b

36 files changed

+237
-489
lines changed

src/main/java/org/truffleruby/builtins/CoreMethodNodeManager.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ private RubyModule getModule(String fullName, boolean isClass) {
120120
}
121121

122122
private RubyClass getSingletonClass(Object object) {
123-
return SingletonClassNode.getUncached().executeSingletonClass(object);
123+
return SingletonClassNode.getUncached().execute(object);
124124
}
125125

126126
private Split effectiveSplit(Split split, boolean needsBlock) {
@@ -439,7 +439,7 @@ private static RubyNode transformArgument(CoreMethod method, RubyNode argument,
439439
}
440440

441441
if (n == 0 && method.raiseIfFrozenSelf()) {
442-
argument = TypeNodes.CheckFrozenNode.create(argument);
442+
argument = TypeNodes.TypeCheckFrozenNode.create(argument);
443443
} else if (n == 0 && method.raiseIfNotMutableSelf()) {
444444
argument = TypeNodes.CheckMutableStringNode.create(argument);
445445
}

src/main/java/org/truffleruby/builtins/PrimitiveNodeConstructor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public RubyNode createInvokePrimitiveNode(Source source, SourceIndexLength sourc
5252
arguments[n] = FixnumLowerNodeGen.create(arguments[n]);
5353
}
5454
if (ArrayUtils.contains(annotation.raiseIfFrozen(), n)) {
55-
arguments[n] = TypeNodes.CheckFrozenNode.create(arguments[n]);
55+
arguments[n] = TypeNodes.TypeCheckFrozenNode.create(arguments[n]);
5656
}
5757
if (ArrayUtils.contains(annotation.raiseIfNotMutable(), n)) {
5858
arguments[n] = TypeNodes.CheckMutableStringNode.create(arguments[n]);

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

Lines changed: 14 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,6 @@
126126
import com.oracle.truffle.api.Truffle;
127127
import com.oracle.truffle.api.dsl.Cached;
128128
import com.oracle.truffle.api.dsl.Cached.Shared;
129-
import com.oracle.truffle.api.dsl.CreateCast;
130129
import com.oracle.truffle.api.dsl.Fallback;
131130
import com.oracle.truffle.api.dsl.NodeChild;
132131
import com.oracle.truffle.api.dsl.ReportPolymorphism;
@@ -1003,16 +1002,14 @@ public abstract static class RbConstGetNode extends CoreMethodNode {
10031002

10041003
@Child private LookupConstantNode lookupConstantNode = LookupConstantNode.create(true, true);
10051004

1006-
@CreateCast("name")
1007-
protected RubyNode coerceToString(RubyNode name) {
1008-
return ToJavaStringNode.create(name);
1009-
}
1010-
10111005
@Specialization
1012-
protected Object rbConstGet(RubyModule module, String name,
1006+
protected Object rbConstGet(RubyModule module, Object name,
1007+
@Cached ToJavaStringNode toJavaStringNode,
10131008
@Cached GetConstantNode getConstantNode) {
1009+
final var nameAsString = toJavaStringNode.execute(name);
10141010
return getConstantNode
1015-
.lookupAndResolveConstant(LexicalScope.IGNORE, module, name, false, lookupConstantNode, true);
1011+
.lookupAndResolveConstant(LexicalScope.IGNORE, module, nameAsString, false, lookupConstantNode,
1012+
true);
10161013
}
10171014

10181015
}
@@ -1024,16 +1021,14 @@ public abstract static class RbConstGetFromNode extends CoreMethodNode {
10241021

10251022
@Child private LookupConstantNode lookupConstantNode = LookupConstantNode.create(true, false);
10261023

1027-
@CreateCast("name")
1028-
protected RubyNode coerceToString(RubyNode name) {
1029-
return ToJavaStringNode.create(name);
1030-
}
1031-
10321024
@Specialization
1033-
protected Object rbConstGetFrom(RubyModule module, String name,
1025+
protected Object rbConstGetFrom(RubyModule module, Object name,
1026+
@Cached ToJavaStringNode toJavaStringNode,
10341027
@Cached GetConstantNode getConstantNode) {
1028+
final var nameAsString = toJavaStringNode.execute(name);
10351029
return getConstantNode
1036-
.lookupAndResolveConstant(LexicalScope.IGNORE, module, name, false, lookupConstantNode, true);
1030+
.lookupAndResolveConstant(LexicalScope.IGNORE, module, nameAsString, false, lookupConstantNode,
1031+
true);
10371032
}
10381033

10391034
}
@@ -1044,17 +1039,14 @@ protected Object rbConstGetFrom(RubyModule module, String name,
10441039
@NodeChild(value = "value", type = RubyNode.class)
10451040
public abstract static class RbConstSetNode extends CoreMethodNode {
10461041

1047-
@CreateCast("name")
1048-
protected RubyNode coerceToString(RubyNode name) {
1049-
return ToJavaStringNode.create(name);
1050-
}
10511042

10521043
@Specialization
1053-
protected Object rbConstSet(RubyModule module, String name, Object value,
1044+
protected Object rbConstSet(RubyModule module, Object name, Object value,
1045+
@Cached ToJavaStringNode toJavaStringNode,
10541046
@Cached ConstSetUncheckedNode constSetUncheckedNode) {
1055-
return constSetUncheckedNode.execute(module, name, value);
1047+
final var nameAsString = toJavaStringNode.execute(name);
1048+
return constSetUncheckedNode.execute(module, nameAsString, value);
10561049
}
1057-
10581050
}
10591051

10601052
@Primitive(name = "rb_gv_get")

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -608,7 +608,7 @@ public void loadCoreNodes() {
608608
final CoreMethodNodeManager coreMethodNodeManager = new CoreMethodNodeManager(context);
609609
coreMethodNodeManager.loadCoreMethodNodes();
610610

611-
truffleBootMainInfo = getMethod(node.executeSingletonClass(truffleBootModule), "main").getSharedMethodInfo();
611+
truffleBootMainInfo = getMethod(node.execute(truffleBootModule), "main").getSharedMethodInfo();
612612
}
613613

614614
private InternalMethod getMethod(RubyModule module, String name) {

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ protected static Object javaGetEnv(Object name,
110110
@Cached FromJavaStringNode fromJavaStringNode,
111111
@Cached InlinedConditionProfile nullValueProfile,
112112
@Bind("this") Node node) {
113-
final String javaName = toJavaStringNode.executeToJavaString(name);
113+
final String javaName = toJavaStringNode.execute(name);
114114
final String value = getEnv(javaName);
115115

116116
if (nullValueProfile.profile(node, value == null)) {
@@ -191,7 +191,7 @@ public abstract static class GetJavaPropertyNode extends CoreMethodArrayArgument
191191
protected Object getJavaProperty(Object property,
192192
@Cached RubyStringLibrary strings,
193193
@Cached ToJavaStringNode toJavaStringNode) {
194-
String value = getProperty(toJavaStringNode.executeToJavaString(property));
194+
String value = getProperty(toJavaStringNode.execute(property));
195195
if (value == null) {
196196
return nil;
197197
} else {
@@ -238,15 +238,15 @@ protected Object logCached(RubySymbol level, Object message,
238238
@Shared @Cached ToJavaStringNode toJavaStringNode,
239239
@Cached("level") RubySymbol cachedLevel,
240240
@Cached("getLevel(cachedLevel)") Level javaLevel) {
241-
log(javaLevel, toJavaStringNode.executeToJavaString(message));
241+
log(javaLevel, toJavaStringNode.execute(message));
242242
return nil;
243243
}
244244

245245
@Specialization(guards = "strings.isRubyString(message)", replaces = "logCached", limit = "1")
246246
protected Object log(RubySymbol level, Object message,
247247
@Shared @Cached RubyStringLibrary strings,
248248
@Shared @Cached ToJavaStringNode toJavaStringNode) {
249-
log(getLevel(level), toJavaStringNode.executeToJavaString(message));
249+
log(getLevel(level), toJavaStringNode.execute(message));
250250
return nil;
251251
}
252252

src/main/java/org/truffleruby/core/array/ArrayNodes.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1431,7 +1431,7 @@ protected Object injectSymbolNoInitial(
14311431
return injectSymbolHelper(
14321432
frame,
14331433
array,
1434-
toJavaString.executeToJavaString(initialOrSymbol),
1434+
toJavaString.execute(initialOrSymbol),
14351435
stores,
14361436
store,
14371437
stores.read(store, 0),
@@ -1455,7 +1455,7 @@ protected Object injectSymbolWithInitial(
14551455
return injectSymbolHelper(
14561456
frame,
14571457
array,
1458-
toJavaString.executeToJavaString(symbol),
1458+
toJavaString.execute(symbol),
14591459
stores,
14601460
store,
14611461
initialOrSymbol,
@@ -1588,7 +1588,7 @@ protected RubyString packUncached(RubyArray array, Object format,
15881588
@Cached @Shared RubyStringLibrary libFormat,
15891589
@Cached ToJavaStringNode toJavaStringNode,
15901590
@Cached IndirectCallNode callPackNode) {
1591-
final String formatString = toJavaStringNode.executeToJavaString(format);
1591+
final String formatString = toJavaStringNode.execute(format);
15921592

15931593
final BytesResult result;
15941594
try {

src/main/java/org/truffleruby/core/basicobject/BasicObjectNodes.java

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
import com.oracle.truffle.api.RootCallTarget;
1313
import com.oracle.truffle.api.dsl.Bind;
14-
import com.oracle.truffle.api.dsl.NeverDefault;
1514
import com.oracle.truffle.api.interop.InteropLibrary;
1615
import com.oracle.truffle.api.interop.UnsupportedMessageException;
1716
import com.oracle.truffle.api.object.Shape;
@@ -24,6 +23,7 @@
2423
import org.truffleruby.annotations.Visibility;
2524
import org.truffleruby.annotations.Split;
2625
import org.truffleruby.builtins.CoreMethodArrayArgumentsNode;
26+
import org.truffleruby.builtins.CoreMethodNode;
2727
import org.truffleruby.core.basicobject.BasicObjectNodesFactory.InstanceExecNodeFactory;
2828
import org.truffleruby.core.cast.BooleanCastNode;
2929
import org.truffleruby.core.cast.NameToJavaStringNode;
@@ -48,7 +48,6 @@
4848
import org.truffleruby.language.RubyBaseNode;
4949
import org.truffleruby.language.RubyDynamicObject;
5050
import org.truffleruby.language.RubyNode;
51-
import org.truffleruby.language.RubySourceNode;
5251
import org.truffleruby.language.arguments.ArgumentsDescriptor;
5352
import org.truffleruby.language.arguments.EmptyArgumentsDescriptor;
5453
import org.truffleruby.language.arguments.RubyArguments;
@@ -133,31 +132,28 @@ protected boolean equal(Object a, Object b,
133132
}
134133
}
135134

136-
@GenerateUncached
137-
@GenerateNodeFactory
138135
@CoreMethod(names = "__id__")
139136
@NodeChild(value = "valueNode", type = RubyNode.class)
140-
public abstract static class ObjectIDNode extends RubySourceNode {
137+
public abstract static class BasicObjectObjectIDNode extends CoreMethodNode {
141138

142-
@NeverDefault
143-
public static ObjectIDNode create() {
144-
return BasicObjectNodesFactory.ObjectIDNodeFactory.create(null);
139+
@Specialization
140+
protected Object objectIDNode(Object value,
141+
@Cached ObjectIDNode objectIDNode) {
142+
return objectIDNode.execute(value);
145143
}
144+
}
146145

147-
public static ObjectIDNode create(RubyNode valueNode) {
148-
return BasicObjectNodesFactory.ObjectIDNodeFactory.create(valueNode);
149-
}
146+
@GenerateUncached
147+
public abstract static class ObjectIDNode extends RubyBaseNode {
150148

151149
public static ObjectIDNode getUncached() {
152-
return BasicObjectNodesFactory.ObjectIDNodeFactory.getUncached();
150+
return BasicObjectNodesFactory.ObjectIDNodeGen.getUncached();
153151
}
154152

155153
public abstract Object execute(Object value);
156154

157155
public abstract long execute(RubyDynamicObject value);
158156

159-
abstract RubyNode getValueNode();
160-
161157
@Specialization
162158
protected long objectIDNil(Nil nil) {
163159
return ObjectIDOperations.NIL;
@@ -255,11 +251,6 @@ protected int objectIDForeign(Object value,
255251
return System.identityHashCode(value);
256252
}
257253
}
258-
259-
@Override
260-
public RubyNode cloneUninitialized() {
261-
return create(getValueNode().cloneUninitialized()).copyFlags(this);
262-
}
263254
}
264255

265256
@GenerateUncached
@@ -314,7 +305,7 @@ protected static Object evalWithString(Frame callerFrame, Object self, Object[]
314305

315306
if (count >= 2) {
316307
fileName = toJavaStringNode
317-
.executeToJavaString(toStrNode.execute(RubyArguments.getArgument(rubyArgs, 1)));
308+
.execute(toStrNode.execute(RubyArguments.getArgument(rubyArgs, 1)));
318309
}
319310

320311
if (count >= 3) {
@@ -373,7 +364,7 @@ private static LexicalScope prependReceiverClassToScope(LexicalScope callerLexic
373364
LexicalScope lexicalScope = new LexicalScope(callerLexicalScope, logicalClass, true);
374365

375366
if (CanHaveSingletonClassNode.getUncached().execute(receiver)) {
376-
final RubyClass singletonClass = SingletonClassNode.getUncached().executeSingletonClass(receiver);
367+
final RubyClass singletonClass = SingletonClassNode.getUncached().execute(receiver);
377368

378369
// For true/false/nil Ruby objects #singleton_class (and SingletonClassNode as well) returns
379370
// a logical class (e.g. TrueClass etc). Ignore duplicate in this case.

src/main/java/org/truffleruby/core/binding/BindingNodes.java

Lines changed: 1 addition & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import java.util.Set;
1616

1717
import com.oracle.truffle.api.CompilerDirectives;
18-
import com.oracle.truffle.api.dsl.GenerateNodeFactory;
1918
import com.oracle.truffle.api.dsl.GenerateUncached;
2019
import com.oracle.truffle.api.dsl.Idempotent;
2120
import com.oracle.truffle.api.dsl.NeverDefault;
@@ -38,7 +37,6 @@
3837
import org.truffleruby.language.RubyBaseNode;
3938
import org.truffleruby.language.RubyBaseNodeWithExecute;
4039
import org.truffleruby.language.RubyNode;
41-
import org.truffleruby.language.RubySourceNode;
4240
import org.truffleruby.language.arguments.RubyArguments;
4341
import org.truffleruby.language.control.RaiseException;
4442
import org.truffleruby.language.locals.FindDeclarationVariableNodes;
@@ -213,22 +211,10 @@ protected int getCacheLimit() {
213211
}
214212

215213
@ImportStatic({ BindingNodes.class, FindDeclarationVariableNodes.class })
216-
@GenerateUncached
217-
@GenerateNodeFactory
218214
@CoreMethod(names = "local_variable_defined?", required = 1)
219215
@NodeChild(value = "bindingNode", type = RubyNode.class)
220216
@NodeChild(value = "nameNode", type = RubyBaseNodeWithExecute.class)
221-
public abstract static class LocalVariableDefinedNode extends RubySourceNode {
222-
223-
public static LocalVariableDefinedNode create(RubyNode bindingNode, RubyBaseNodeWithExecute nameNode) {
224-
return BindingNodesFactory.LocalVariableDefinedNodeFactory.create(bindingNode, nameNode);
225-
}
226-
227-
public abstract boolean execute(RubyBinding binding, String name);
228-
229-
abstract RubyNode getBindingNode();
230-
231-
abstract RubyBaseNodeWithExecute getNameNode();
217+
public abstract static class LocalVariableDefinedNode extends CoreMethodNode {
232218

233219
@CreateCast("nameNode")
234220
protected RubyBaseNodeWithExecute coerceToString(RubyBaseNodeWithExecute name) {
@@ -265,18 +251,6 @@ protected Object localVariableDefinedLastLine(RubyBinding binding, String name)
265251
protected int getCacheLimit() {
266252
return getLanguage().options.BINDING_LOCAL_VARIABLE_CACHE;
267253
}
268-
269-
private RubyBaseNodeWithExecute getNameNodeBeforeCasting() {
270-
return ((NameToJavaStringNode) getNameNode()).getValueNode();
271-
}
272-
273-
@Override
274-
public RubyNode cloneUninitialized() {
275-
return create(
276-
getBindingNode().cloneUninitialized(),
277-
getNameNodeBeforeCasting().cloneUninitialized()).copyFlags(this);
278-
}
279-
280254
}
281255

282256
@CoreMethod(names = "local_variable_get", required = 1)

src/main/java/org/truffleruby/core/cast/NameToJavaStringNode.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,13 @@ public static NameToJavaStringNode getUncached() {
5555
protected String stringNameToJavaString(Object value,
5656
@Cached @Exclusive RubyStringLibrary libString,
5757
@Cached @Shared ToJavaStringNode toJavaStringNode) {
58-
return toJavaStringNode.executeToJavaString(value);
58+
return toJavaStringNode.execute(value);
5959
}
6060

6161
@Specialization
6262
protected String symbolNameToJavaString(RubySymbol value,
6363
@Cached @Shared ToJavaStringNode toJavaStringNode) {
64-
return toJavaStringNode.executeToJavaString(value);
64+
return toJavaStringNode.execute(value);
6565
}
6666

6767
@Specialization
@@ -91,7 +91,7 @@ protected static String nameToJavaString(Object object,
9191
}
9292

9393
if (libString.isRubyString(coerced)) {
94-
return toJavaStringNode.executeToJavaString(coerced);
94+
return toJavaStringNode.execute(coerced);
9595
} else {
9696
errorProfile.enter(node);
9797
throw new RaiseException(getContext(node), coreExceptions(node).typeErrorBadCoercion(

src/main/java/org/truffleruby/core/cast/ToSNode.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ protected RubyString kernelToS(Object object) {
6161
CompilerDirectives.transferToInterpreterAndInvalidate();
6262
kernelToSNode = insert(KernelNodes.ToSNode.create());
6363
}
64-
return kernelToSNode.executeToS(object);
64+
return kernelToSNode.execute(object);
6565
}
6666

6767
@Override

0 commit comments

Comments
 (0)