Skip to content

Commit

Permalink
[GR-17457] Refactor nodes to later support DSL inlining 2
Browse files Browse the repository at this point in the history
PullRequest: truffleruby/3862
  • Loading branch information
horakivo committed Jun 7, 2023
2 parents 758004f + dc31407 commit 7e07d2b
Show file tree
Hide file tree
Showing 36 changed files with 237 additions and 489 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ private RubyModule getModule(String fullName, boolean isClass) {
}

private RubyClass getSingletonClass(Object object) {
return SingletonClassNode.getUncached().executeSingletonClass(object);
return SingletonClassNode.getUncached().execute(object);
}

private Split effectiveSplit(Split split, boolean needsBlock) {
Expand Down Expand Up @@ -439,7 +439,7 @@ private static RubyNode transformArgument(CoreMethod method, RubyNode argument,
}

if (n == 0 && method.raiseIfFrozenSelf()) {
argument = TypeNodes.CheckFrozenNode.create(argument);
argument = TypeNodes.TypeCheckFrozenNode.create(argument);
} else if (n == 0 && method.raiseIfNotMutableSelf()) {
argument = TypeNodes.CheckMutableStringNode.create(argument);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ public RubyNode createInvokePrimitiveNode(Source source, SourceIndexLength sourc
arguments[n] = FixnumLowerNodeGen.create(arguments[n]);
}
if (ArrayUtils.contains(annotation.raiseIfFrozen(), n)) {
arguments[n] = TypeNodes.CheckFrozenNode.create(arguments[n]);
arguments[n] = TypeNodes.TypeCheckFrozenNode.create(arguments[n]);
}
if (ArrayUtils.contains(annotation.raiseIfNotMutable(), n)) {
arguments[n] = TypeNodes.CheckMutableStringNode.create(arguments[n]);
Expand Down
36 changes: 14 additions & 22 deletions src/main/java/org/truffleruby/cext/CExtNodes.java
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,6 @@
import com.oracle.truffle.api.Truffle;
import com.oracle.truffle.api.dsl.Cached;
import com.oracle.truffle.api.dsl.Cached.Shared;
import com.oracle.truffle.api.dsl.CreateCast;
import com.oracle.truffle.api.dsl.Fallback;
import com.oracle.truffle.api.dsl.NodeChild;
import com.oracle.truffle.api.dsl.ReportPolymorphism;
Expand Down Expand Up @@ -1003,16 +1002,14 @@ public abstract static class RbConstGetNode extends CoreMethodNode {

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

@CreateCast("name")
protected RubyNode coerceToString(RubyNode name) {
return ToJavaStringNode.create(name);
}

@Specialization
protected Object rbConstGet(RubyModule module, String name,
protected Object rbConstGet(RubyModule module, Object name,
@Cached ToJavaStringNode toJavaStringNode,
@Cached GetConstantNode getConstantNode) {
final var nameAsString = toJavaStringNode.execute(name);
return getConstantNode
.lookupAndResolveConstant(LexicalScope.IGNORE, module, name, false, lookupConstantNode, true);
.lookupAndResolveConstant(LexicalScope.IGNORE, module, nameAsString, false, lookupConstantNode,
true);
}

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

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

@CreateCast("name")
protected RubyNode coerceToString(RubyNode name) {
return ToJavaStringNode.create(name);
}

@Specialization
protected Object rbConstGetFrom(RubyModule module, String name,
protected Object rbConstGetFrom(RubyModule module, Object name,
@Cached ToJavaStringNode toJavaStringNode,
@Cached GetConstantNode getConstantNode) {
final var nameAsString = toJavaStringNode.execute(name);
return getConstantNode
.lookupAndResolveConstant(LexicalScope.IGNORE, module, name, false, lookupConstantNode, true);
.lookupAndResolveConstant(LexicalScope.IGNORE, module, nameAsString, false, lookupConstantNode,
true);
}

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

@CreateCast("name")
protected RubyNode coerceToString(RubyNode name) {
return ToJavaStringNode.create(name);
}

@Specialization
protected Object rbConstSet(RubyModule module, String name, Object value,
protected Object rbConstSet(RubyModule module, Object name, Object value,
@Cached ToJavaStringNode toJavaStringNode,
@Cached ConstSetUncheckedNode constSetUncheckedNode) {
return constSetUncheckedNode.execute(module, name, value);
final var nameAsString = toJavaStringNode.execute(name);
return constSetUncheckedNode.execute(module, nameAsString, value);
}

}

@Primitive(name = "rb_gv_get")
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/org/truffleruby/core/CoreLibrary.java
Original file line number Diff line number Diff line change
Expand Up @@ -608,7 +608,7 @@ public void loadCoreNodes() {
final CoreMethodNodeManager coreMethodNodeManager = new CoreMethodNodeManager(context);
coreMethodNodeManager.loadCoreMethodNodes();

truffleBootMainInfo = getMethod(node.executeSingletonClass(truffleBootModule), "main").getSharedMethodInfo();
truffleBootMainInfo = getMethod(node.execute(truffleBootModule), "main").getSharedMethodInfo();
}

private InternalMethod getMethod(RubyModule module, String name) {
Expand Down
8 changes: 4 additions & 4 deletions src/main/java/org/truffleruby/core/TruffleSystemNodes.java
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ protected static Object javaGetEnv(Object name,
@Cached FromJavaStringNode fromJavaStringNode,
@Cached InlinedConditionProfile nullValueProfile,
@Bind("this") Node node) {
final String javaName = toJavaStringNode.executeToJavaString(name);
final String javaName = toJavaStringNode.execute(name);
final String value = getEnv(javaName);

if (nullValueProfile.profile(node, value == null)) {
Expand Down Expand Up @@ -191,7 +191,7 @@ public abstract static class GetJavaPropertyNode extends CoreMethodArrayArgument
protected Object getJavaProperty(Object property,
@Cached RubyStringLibrary strings,
@Cached ToJavaStringNode toJavaStringNode) {
String value = getProperty(toJavaStringNode.executeToJavaString(property));
String value = getProperty(toJavaStringNode.execute(property));
if (value == null) {
return nil;
} else {
Expand Down Expand Up @@ -238,15 +238,15 @@ protected Object logCached(RubySymbol level, Object message,
@Shared @Cached ToJavaStringNode toJavaStringNode,
@Cached("level") RubySymbol cachedLevel,
@Cached("getLevel(cachedLevel)") Level javaLevel) {
log(javaLevel, toJavaStringNode.executeToJavaString(message));
log(javaLevel, toJavaStringNode.execute(message));
return nil;
}

@Specialization(guards = "strings.isRubyString(message)", replaces = "logCached", limit = "1")
protected Object log(RubySymbol level, Object message,
@Shared @Cached RubyStringLibrary strings,
@Shared @Cached ToJavaStringNode toJavaStringNode) {
log(getLevel(level), toJavaStringNode.executeToJavaString(message));
log(getLevel(level), toJavaStringNode.execute(message));
return nil;
}

Expand Down
6 changes: 3 additions & 3 deletions src/main/java/org/truffleruby/core/array/ArrayNodes.java
Original file line number Diff line number Diff line change
Expand Up @@ -1431,7 +1431,7 @@ protected Object injectSymbolNoInitial(
return injectSymbolHelper(
frame,
array,
toJavaString.executeToJavaString(initialOrSymbol),
toJavaString.execute(initialOrSymbol),
stores,
store,
stores.read(store, 0),
Expand All @@ -1455,7 +1455,7 @@ protected Object injectSymbolWithInitial(
return injectSymbolHelper(
frame,
array,
toJavaString.executeToJavaString(symbol),
toJavaString.execute(symbol),
stores,
store,
initialOrSymbol,
Expand Down Expand Up @@ -1588,7 +1588,7 @@ protected RubyString packUncached(RubyArray array, Object format,
@Cached @Shared RubyStringLibrary libFormat,
@Cached ToJavaStringNode toJavaStringNode,
@Cached IndirectCallNode callPackNode) {
final String formatString = toJavaStringNode.executeToJavaString(format);
final String formatString = toJavaStringNode.execute(format);

final BytesResult result;
try {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@

import com.oracle.truffle.api.RootCallTarget;
import com.oracle.truffle.api.dsl.Bind;
import com.oracle.truffle.api.dsl.NeverDefault;
import com.oracle.truffle.api.interop.InteropLibrary;
import com.oracle.truffle.api.interop.UnsupportedMessageException;
import com.oracle.truffle.api.object.Shape;
Expand All @@ -24,6 +23,7 @@
import org.truffleruby.annotations.Visibility;
import org.truffleruby.annotations.Split;
import org.truffleruby.builtins.CoreMethodArrayArgumentsNode;
import org.truffleruby.builtins.CoreMethodNode;
import org.truffleruby.core.basicobject.BasicObjectNodesFactory.InstanceExecNodeFactory;
import org.truffleruby.core.cast.BooleanCastNode;
import org.truffleruby.core.cast.NameToJavaStringNode;
Expand All @@ -48,7 +48,6 @@
import org.truffleruby.language.RubyBaseNode;
import org.truffleruby.language.RubyDynamicObject;
import org.truffleruby.language.RubyNode;
import org.truffleruby.language.RubySourceNode;
import org.truffleruby.language.arguments.ArgumentsDescriptor;
import org.truffleruby.language.arguments.EmptyArgumentsDescriptor;
import org.truffleruby.language.arguments.RubyArguments;
Expand Down Expand Up @@ -133,31 +132,28 @@ protected boolean equal(Object a, Object b,
}
}

@GenerateUncached
@GenerateNodeFactory
@CoreMethod(names = "__id__")
@NodeChild(value = "valueNode", type = RubyNode.class)
public abstract static class ObjectIDNode extends RubySourceNode {
public abstract static class BasicObjectObjectIDNode extends CoreMethodNode {

@NeverDefault
public static ObjectIDNode create() {
return BasicObjectNodesFactory.ObjectIDNodeFactory.create(null);
@Specialization
protected Object objectIDNode(Object value,
@Cached ObjectIDNode objectIDNode) {
return objectIDNode.execute(value);
}
}

public static ObjectIDNode create(RubyNode valueNode) {
return BasicObjectNodesFactory.ObjectIDNodeFactory.create(valueNode);
}
@GenerateUncached
public abstract static class ObjectIDNode extends RubyBaseNode {

public static ObjectIDNode getUncached() {
return BasicObjectNodesFactory.ObjectIDNodeFactory.getUncached();
return BasicObjectNodesFactory.ObjectIDNodeGen.getUncached();
}

public abstract Object execute(Object value);

public abstract long execute(RubyDynamicObject value);

abstract RubyNode getValueNode();

@Specialization
protected long objectIDNil(Nil nil) {
return ObjectIDOperations.NIL;
Expand Down Expand Up @@ -255,11 +251,6 @@ protected int objectIDForeign(Object value,
return System.identityHashCode(value);
}
}

@Override
public RubyNode cloneUninitialized() {
return create(getValueNode().cloneUninitialized()).copyFlags(this);
}
}

@GenerateUncached
Expand Down Expand Up @@ -314,7 +305,7 @@ protected static Object evalWithString(Frame callerFrame, Object self, Object[]

if (count >= 2) {
fileName = toJavaStringNode
.executeToJavaString(toStrNode.execute(RubyArguments.getArgument(rubyArgs, 1)));
.execute(toStrNode.execute(RubyArguments.getArgument(rubyArgs, 1)));
}

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

if (CanHaveSingletonClassNode.getUncached().execute(receiver)) {
final RubyClass singletonClass = SingletonClassNode.getUncached().executeSingletonClass(receiver);
final RubyClass singletonClass = SingletonClassNode.getUncached().execute(receiver);

// For true/false/nil Ruby objects #singleton_class (and SingletonClassNode as well) returns
// a logical class (e.g. TrueClass etc). Ignore duplicate in this case.
Expand Down
28 changes: 1 addition & 27 deletions src/main/java/org/truffleruby/core/binding/BindingNodes.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
import java.util.Set;

import com.oracle.truffle.api.CompilerDirectives;
import com.oracle.truffle.api.dsl.GenerateNodeFactory;
import com.oracle.truffle.api.dsl.GenerateUncached;
import com.oracle.truffle.api.dsl.Idempotent;
import com.oracle.truffle.api.dsl.NeverDefault;
Expand All @@ -38,7 +37,6 @@
import org.truffleruby.language.RubyBaseNode;
import org.truffleruby.language.RubyBaseNodeWithExecute;
import org.truffleruby.language.RubyNode;
import org.truffleruby.language.RubySourceNode;
import org.truffleruby.language.arguments.RubyArguments;
import org.truffleruby.language.control.RaiseException;
import org.truffleruby.language.locals.FindDeclarationVariableNodes;
Expand Down Expand Up @@ -213,22 +211,10 @@ protected int getCacheLimit() {
}

@ImportStatic({ BindingNodes.class, FindDeclarationVariableNodes.class })
@GenerateUncached
@GenerateNodeFactory
@CoreMethod(names = "local_variable_defined?", required = 1)
@NodeChild(value = "bindingNode", type = RubyNode.class)
@NodeChild(value = "nameNode", type = RubyBaseNodeWithExecute.class)
public abstract static class LocalVariableDefinedNode extends RubySourceNode {

public static LocalVariableDefinedNode create(RubyNode bindingNode, RubyBaseNodeWithExecute nameNode) {
return BindingNodesFactory.LocalVariableDefinedNodeFactory.create(bindingNode, nameNode);
}

public abstract boolean execute(RubyBinding binding, String name);

abstract RubyNode getBindingNode();

abstract RubyBaseNodeWithExecute getNameNode();
public abstract static class LocalVariableDefinedNode extends CoreMethodNode {

@CreateCast("nameNode")
protected RubyBaseNodeWithExecute coerceToString(RubyBaseNodeWithExecute name) {
Expand Down Expand Up @@ -265,18 +251,6 @@ protected Object localVariableDefinedLastLine(RubyBinding binding, String name)
protected int getCacheLimit() {
return getLanguage().options.BINDING_LOCAL_VARIABLE_CACHE;
}

private RubyBaseNodeWithExecute getNameNodeBeforeCasting() {
return ((NameToJavaStringNode) getNameNode()).getValueNode();
}

@Override
public RubyNode cloneUninitialized() {
return create(
getBindingNode().cloneUninitialized(),
getNameNodeBeforeCasting().cloneUninitialized()).copyFlags(this);
}

}

@CoreMethod(names = "local_variable_get", required = 1)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,13 +55,13 @@ public static NameToJavaStringNode getUncached() {
protected String stringNameToJavaString(Object value,
@Cached @Exclusive RubyStringLibrary libString,
@Cached @Shared ToJavaStringNode toJavaStringNode) {
return toJavaStringNode.executeToJavaString(value);
return toJavaStringNode.execute(value);
}

@Specialization
protected String symbolNameToJavaString(RubySymbol value,
@Cached @Shared ToJavaStringNode toJavaStringNode) {
return toJavaStringNode.executeToJavaString(value);
return toJavaStringNode.execute(value);
}

@Specialization
Expand Down Expand Up @@ -91,7 +91,7 @@ protected static String nameToJavaString(Object object,
}

if (libString.isRubyString(coerced)) {
return toJavaStringNode.executeToJavaString(coerced);
return toJavaStringNode.execute(coerced);
} else {
errorProfile.enter(node);
throw new RaiseException(getContext(node), coreExceptions(node).typeErrorBadCoercion(
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/org/truffleruby/core/cast/ToSNode.java
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ protected RubyString kernelToS(Object object) {
CompilerDirectives.transferToInterpreterAndInvalidate();
kernelToSNode = insert(KernelNodes.ToSNode.create());
}
return kernelToSNode.executeToS(object);
return kernelToSNode.execute(object);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -697,7 +697,7 @@ public abstract static class EncodingReplicateNode extends EncodingCreationNode
protected RubyArray encodingReplicate(RubyEncoding object, Object nameObject,
@Cached RubyStringLibrary strings,
@Cached ToJavaStringNode toJavaStringNode) {
final String name = toJavaStringNode.executeToJavaString(nameObject);
final String name = toJavaStringNode.execute(nameObject);

final RubyEncoding newEncoding = replicate(name, object);
return setIndexOrRaiseError(name, newEncoding);
Expand All @@ -717,7 +717,7 @@ public abstract static class DummyEncodingNode extends EncodingCreationNode {
protected RubyArray createDummyEncoding(Object nameObject,
@Cached RubyStringLibrary strings,
@Cached ToJavaStringNode toJavaStringNode) {
final String name = toJavaStringNode.executeToJavaString(nameObject);
final String name = toJavaStringNode.execute(nameObject);

final RubyEncoding newEncoding = createDummy(name);
return setIndexOrRaiseError(name, newEncoding);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ protected Object toDisplayString(boolean allowSideEffects,
if (allowSideEffects) {
return dispatchNode.call(this, "inspect");
} else {
return kernelToSNode.executeToS(this);
return kernelToSNode.execute(this);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -154,7 +154,7 @@ protected Object toString(Object object,
inspectNode = insert(KernelNodes.ToSNode.create());
}

return inspectNode.executeToS(object);
return inspectNode.execute(object);
} else {
throw new NoImplicitConversionException(object, "String");
}
Expand Down

0 comments on commit 7e07d2b

Please sign in to comment.