Skip to content

Commit c7a8533

Browse files
committed
Don't use ReadCallerFrameNode in SymbolNodes.ToProcNode class
1 parent a5ab456 commit c7a8533

File tree

1 file changed

+16
-22
lines changed

1 file changed

+16
-22
lines changed

src/main/java/org/truffleruby/core/symbol/SymbolNodes.java

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

1212
import com.oracle.truffle.api.dsl.GenerateUncached;
1313
import com.oracle.truffle.api.dsl.ImportStatic;
14+
import com.oracle.truffle.api.frame.Frame;
1415
import org.graalvm.collections.Pair;
1516
import org.truffleruby.RubyContext;
1617
import org.truffleruby.RubyLanguage;
@@ -21,6 +22,7 @@
2122
import org.truffleruby.collections.ConcurrentOperations;
2223
import org.truffleruby.core.CoreLibrary;
2324
import org.truffleruby.core.array.RubyArray;
25+
import org.truffleruby.core.inlined.AlwaysInlinedMethodNode;
2426
import org.truffleruby.core.klass.RubyClass;
2527
import org.truffleruby.core.module.RubyModule;
2628
import org.truffleruby.core.proc.ProcCallTargets;
@@ -35,7 +37,6 @@
3537
import org.truffleruby.language.RubyRootNode;
3638
import org.truffleruby.language.Visibility;
3739
import org.truffleruby.language.arguments.EmptyArgumentsDescriptor;
38-
import org.truffleruby.language.arguments.ReadCallerFrameNode;
3940
import org.truffleruby.language.arguments.RubyArguments;
4041
import org.truffleruby.language.control.BreakID;
4142
import org.truffleruby.language.control.RaiseException;
@@ -55,7 +56,6 @@
5556
import com.oracle.truffle.api.dsl.Specialization;
5657
import com.oracle.truffle.api.frame.FrameDescriptor;
5758
import com.oracle.truffle.api.frame.MaterializedFrame;
58-
import com.oracle.truffle.api.frame.VirtualFrame;
5959
import com.oracle.truffle.api.source.SourceSection;
6060

6161
import java.util.Map;
@@ -126,29 +126,26 @@ protected long hash(RubySymbol symbol,
126126
}
127127
}
128128

129-
@CoreMethod(names = "to_proc")
129+
@GenerateUncached
130+
@CoreMethod(names = "to_proc", alwaysInlined = true)
130131
@ImportStatic(DeclarationContext.class)
131-
public abstract static class ToProcNode extends CoreMethodArrayArgumentsNode {
132+
public abstract static class ToProcNode extends AlwaysInlinedMethodNode {
132133

133134
public static final Arity ARITY = new Arity(1, 0, true);
134135

135136
public static ToProcNode create() {
136-
return SymbolNodesFactory.ToProcNodeFactory.create(null);
137+
return SymbolNodesFactory.ToProcNodeFactory.create();
137138
}
138139

139-
public abstract RubyProc execute(VirtualFrame frame, RubySymbol symbol);
140-
141-
@Child private ReadCallerFrameNode readCallerFrame = ReadCallerFrameNode.create();
142-
143140
@Specialization(
144141
guards = {
145142
"isSingleContext()",
146143
"symbol == cachedSymbol",
147-
"getRefinements(frame) == cachedRefinements" },
144+
"getRefinements(callerFrame) == cachedRefinements" },
148145
limit = "getIdentityCacheLimit()")
149-
protected RubyProc toProcCached(VirtualFrame frame, RubySymbol symbol,
146+
protected RubyProc toProcCached(Frame callerFrame, RubySymbol symbol, Object[] rubyArgs, RootCallTarget target,
150147
@Cached("symbol") RubySymbol cachedSymbol,
151-
@Cached("getRefinements(frame)") Map<RubyModule, RubyModule[]> cachedRefinements,
148+
@Cached("getRefinements(callerFrame)") Map<RubyModule, RubyModule[]> cachedRefinements,
152149
@Cached("getOrCreateCallTarget(getContext(), getLanguage(), cachedSymbol, cachedRefinements)") RootCallTarget callTarget,
153150
@Cached("createProc(getContext(), getLanguage(), cachedRefinements, callTarget)") RubyProc cachedProc) {
154151
return cachedProc;
@@ -157,17 +154,19 @@ protected RubyProc toProcCached(VirtualFrame frame, RubySymbol symbol,
157154
@Specialization(
158155
guards = {
159156
"symbol == cachedSymbol",
160-
"getRefinements(frame) == NO_REFINEMENTS" },
157+
"getRefinements(callerFrame) == NO_REFINEMENTS" },
161158
limit = "getIdentityCacheLimit()")
162-
protected RubyProc toProcCachedNoRefinements(VirtualFrame frame, RubySymbol symbol,
159+
protected RubyProc toProcCachedNoRefinements(
160+
Frame callerFrame, RubySymbol symbol, Object[] rubyArgs, RootCallTarget target,
163161
@Cached("symbol") RubySymbol cachedSymbol,
164162
@Cached("getOrCreateCallTarget(getContext(), getLanguage(), cachedSymbol, NO_REFINEMENTS)") RootCallTarget callTarget) {
165163
return createProc(getContext(), getLanguage(), DeclarationContext.NO_REFINEMENTS, callTarget);
166164
}
167165

168166
@Specialization(replaces = { "toProcCached", "toProcCachedNoRefinements" })
169-
protected RubyProc toProcUncached(VirtualFrame frame, RubySymbol symbol) {
170-
final Map<RubyModule, RubyModule[]> refinements = getRefinements(frame);
167+
protected RubyProc toProcUncached(
168+
Frame callerFrame, RubySymbol symbol, Object[] rubyArgs, RootCallTarget target) {
169+
final Map<RubyModule, RubyModule[]> refinements = getRefinements(callerFrame);
171170
final RootCallTarget callTarget = getOrCreateCallTarget(getContext(), getLanguage(), symbol, refinements);
172171
return createProc(getContext(), getLanguage(), refinements, callTarget);
173172
}
@@ -246,12 +245,7 @@ public static RootCallTarget createCallTarget(RubyLanguage language, RubySymbol
246245
return rootNode.getCallTarget();
247246
}
248247

249-
protected InternalMethod getMethod(VirtualFrame frame) {
250-
return RubyArguments.getMethod(frame);
251-
}
252-
253-
protected Map<RubyModule, RubyModule[]> getRefinements(VirtualFrame frame) {
254-
final MaterializedFrame callerFrame = readCallerFrame.execute(frame);
248+
protected Map<RubyModule, RubyModule[]> getRefinements(Frame callerFrame) {
255249
final DeclarationContext declarationContext = RubyArguments.tryGetDeclarationContext(callerFrame);
256250
return declarationContext != null
257251
? declarationContext.getRefinements()

0 commit comments

Comments
 (0)