Skip to content

Commit df2a471

Browse files
committed
FindAndReadDeclarationVariableNode is DSL inlinable node
1 parent 9132cb0 commit df2a471

File tree

3 files changed

+13
-8
lines changed

3 files changed

+13
-8
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ public abstract static class LocalVariableGetNode extends RubyBaseNode {
294294
protected static Object localVariableGet(Node node, RubyBinding binding, String name,
295295
@Cached FindAndReadDeclarationVariableNode readNode) {
296296
MaterializedFrame frame = binding.getFrame();
297-
Object result = readNode.execute(frame, name, null);
297+
Object result = readNode.execute(frame, node, name, null);
298298
if (result == null) {
299299
throw new RaiseException(
300300
getContext(node),

src/main/java/org/truffleruby/core/kernel/KernelNodes.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -367,8 +367,8 @@ protected boolean blockGiven(Frame callerFrame, Object self, Object[] rubyArgs,
367367
@Cached FindAndReadDeclarationVariableNode readNode,
368368
@Cached InlinedConditionProfile blockProfile) {
369369
needCallerFrame(callerFrame, target);
370-
return blockProfile
371-
.profile(this, readNode.execute(callerFrame, TranslatorEnvironment.METHOD_BLOCK_NAME, nil) != nil);
370+
return blockProfile.profile(this,
371+
readNode.execute(callerFrame, this, TranslatorEnvironment.METHOD_BLOCK_NAME, nil) != nil);
372372
}
373373
}
374374

src/main/java/org/truffleruby/language/locals/FindDeclarationVariableNodes.java

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

1212
import com.oracle.truffle.api.CompilerAsserts;
13+
import com.oracle.truffle.api.dsl.GenerateCached;
14+
import com.oracle.truffle.api.dsl.GenerateInline;
1315
import com.oracle.truffle.api.dsl.GenerateUncached;
1416
import com.oracle.truffle.api.frame.Frame;
1517
import com.oracle.truffle.api.frame.MaterializedFrame;
18+
import com.oracle.truffle.api.nodes.Node;
1619
import org.truffleruby.language.RubyBaseNode;
1720
import org.truffleruby.language.arguments.RubyArguments;
1821

@@ -76,14 +79,16 @@ public static FrameSlotAndDepth findFrameSlotOrNull(String identifier, Frame fra
7679
@ReportPolymorphism
7780
@GenerateUncached
7881
@ImportStatic(FindDeclarationVariableNodes.class)
82+
@GenerateInline
83+
@GenerateCached(false)
7984
public abstract static class FindAndReadDeclarationVariableNode extends RubyBaseNode {
8085

81-
public abstract Object execute(Frame frame, String name, Object defaultValue);
86+
public abstract Object execute(Frame frame, Node node, String name, Object defaultValue);
8287

8388
@Specialization(
8489
guards = { "name == cachedName", "frame.getFrameDescriptor() == cachedDescriptor" },
8590
limit = "getDefaultCacheLimit()")
86-
protected Object getVariable(Frame frame, String name, Object defaultValue,
91+
protected static Object getVariable(Frame frame, String name, Object defaultValue,
8792
@Cached("name") String cachedName,
8893
@Cached("frame.getFrameDescriptor()") FrameDescriptor cachedDescriptor,
8994
@Cached("findFrameSlotOrNull(name, frame)") FrameSlotAndDepth slotAndDepth,
@@ -97,12 +102,12 @@ protected Object getVariable(Frame frame, String name, Object defaultValue,
97102
}
98103

99104
@Specialization(replaces = "getVariable")
100-
protected Object getVariableSlow(Frame frame, String name, Object defaultValue) {
105+
protected static Object getVariableSlow(Frame frame, String name, Object defaultValue) {
101106
return getVariableSlowBoundary(frame.materialize(), name, defaultValue);
102107
}
103108

104109
@TruffleBoundary
105-
private Object getVariableSlowBoundary(MaterializedFrame frame, String name, Object defaultValue) {
110+
private static Object getVariableSlowBoundary(MaterializedFrame frame, String name, Object defaultValue) {
106111
final FrameSlotAndDepth slotAndDepth = findFrameSlotOrNull(name, frame);
107112
if (slotAndDepth == null) {
108113
return defaultValue;
@@ -112,7 +117,7 @@ private Object getVariableSlowBoundary(MaterializedFrame frame, String name, Obj
112117
}
113118
}
114119

115-
protected ReadFrameSlotNode createReadNode(FrameSlotAndDepth frameSlot) {
120+
protected static ReadFrameSlotNode createReadNode(FrameSlotAndDepth frameSlot) {
116121
if (frameSlot == null) {
117122
return null;
118123
} else {

0 commit comments

Comments
 (0)