Skip to content

Commit e6b7a2a

Browse files
committed
[GR-17457] Use more specific types when possible in execute*() methods.
PullRequest: truffleruby/1767
2 parents d8f759e + 446b5ba commit e6b7a2a

File tree

5 files changed

+24
-28
lines changed

5 files changed

+24
-28
lines changed

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

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,10 @@
3636
import org.truffleruby.core.array.library.NativeArrayStorage;
3737
import org.truffleruby.core.cast.BooleanCastNode;
3838
import org.truffleruby.core.cast.CmpIntNode;
39-
import org.truffleruby.core.cast.ToIntNode;
40-
import org.truffleruby.core.cast.ToLongNode;
4139
import org.truffleruby.core.cast.ToAryNode;
4240
import org.truffleruby.core.cast.ToAryNodeGen;
41+
import org.truffleruby.core.cast.ToIntNode;
42+
import org.truffleruby.core.cast.ToLongNode;
4343
import org.truffleruby.core.cast.ToStrNodeGen;
4444
import org.truffleruby.core.format.BytesResult;
4545
import org.truffleruby.core.format.FormatExceptionTranslator;
@@ -62,16 +62,17 @@
6262
import org.truffleruby.extra.ffi.Pointer;
6363
import org.truffleruby.language.NotProvided;
6464
import org.truffleruby.language.RubyGuards;
65-
import org.truffleruby.language.library.RubyLibrary;
6665
import org.truffleruby.language.RubyNode;
6766
import org.truffleruby.language.Visibility;
6867
import org.truffleruby.language.control.RaiseException;
6968
import org.truffleruby.language.dispatch.CallDispatchHeadNode;
69+
import org.truffleruby.language.library.RubyLibrary;
7070
import org.truffleruby.language.objects.AllocateObjectNode;
7171
import org.truffleruby.language.objects.PropagateTaintNode;
7272
import org.truffleruby.language.objects.WriteObjectFieldNode;
7373
import org.truffleruby.language.objects.shared.PropagateSharingNode;
7474
import org.truffleruby.language.yield.YieldNode;
75+
import org.truffleruby.utils.Utils;
7576

7677
import com.oracle.truffle.api.CompilerDirectives;
7778
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
@@ -92,7 +93,6 @@
9293
import com.oracle.truffle.api.profiles.BranchProfile;
9394
import com.oracle.truffle.api.profiles.ConditionProfile;
9495
import com.oracle.truffle.api.profiles.IntValueProfile;
95-
import org.truffleruby.utils.Utils;
9696

9797
@CoreModule(value = "Array", isClass = true)
9898
public abstract class ArrayNodes {
@@ -1027,8 +1027,8 @@ public abstract static class InitializeNode extends YieldingCoreMethodNode {
10271027
@Child private CallDispatchHeadNode toAryNode;
10281028
@Child private KernelNodes.RespondToNode respondToToAryNode;
10291029

1030-
public abstract DynamicObject executeInitialize(VirtualFrame frame, DynamicObject array, Object size,
1031-
Object fillingValue, Object block);
1030+
protected abstract DynamicObject executeInitialize(DynamicObject array, Object size, Object fillingValue,
1031+
NotProvided block);
10321032

10331033
@Specialization
10341034
protected DynamicObject initializeNoArgs(
@@ -1120,13 +1120,12 @@ protected DynamicObject initializeWithSizeAndValue(
11201120
@Specialization(
11211121
guards = { "wasProvided(size)", "!isInteger(size)", "!isLong(size)", "wasProvided(fillingValue)" })
11221122
protected DynamicObject initializeSizeOther(
1123-
VirtualFrame frame,
11241123
DynamicObject array,
11251124
Object size,
11261125
Object fillingValue,
11271126
NotProvided block) {
11281127
int intSize = toInt(size);
1129-
return executeInitialize(frame, array, intSize, fillingValue, block);
1128+
return executeInitialize(array, intSize, fillingValue, block);
11301129
}
11311130

11321131
// With block
@@ -1168,36 +1167,35 @@ protected DynamicObject initializeFromArray(
11681167
@Specialization(
11691168
guards = { "!isInteger(object)", "!isLong(object)", "wasProvided(object)", "!isRubyArray(object)" })
11701169
protected DynamicObject initialize(
1171-
VirtualFrame frame,
11721170
DynamicObject array,
11731171
Object object,
11741172
NotProvided unusedValue,
11751173
NotProvided block) {
11761174
DynamicObject copy = null;
1177-
if (respondToToAry(frame, object)) {
1178-
Object toAryResult = callToAry(frame, object);
1175+
if (respondToToAry(object)) {
1176+
Object toAryResult = callToAry(object);
11791177
if (RubyGuards.isRubyArray(toAryResult)) {
11801178
copy = (DynamicObject) toAryResult;
11811179
}
11821180
}
11831181

11841182
if (copy != null) {
1185-
return executeInitialize(frame, array, copy, NotProvided.INSTANCE, NotProvided.INSTANCE);
1183+
return executeInitialize(array, copy, NotProvided.INSTANCE, NotProvided.INSTANCE);
11861184
} else {
11871185
int size = toInt(object);
1188-
return executeInitialize(frame, array, size, NotProvided.INSTANCE, NotProvided.INSTANCE);
1186+
return executeInitialize(array, size, NotProvided.INSTANCE, NotProvided.INSTANCE);
11891187
}
11901188
}
11911189

1192-
public boolean respondToToAry(VirtualFrame frame, Object object) {
1190+
public boolean respondToToAry(Object object) {
11931191
if (respondToToAryNode == null) {
11941192
CompilerDirectives.transferToInterpreterAndInvalidate();
11951193
respondToToAryNode = insert(KernelNodesFactory.RespondToNodeFactory.create(null, null, null));
11961194
}
1197-
return respondToToAryNode.executeDoesRespondTo(frame, object, coreStrings().TO_ARY.createInstance(), true);
1195+
return respondToToAryNode.executeDoesRespondTo(null, object, coreStrings().TO_ARY.createInstance(), true);
11981196
}
11991197

1200-
protected Object callToAry(VirtualFrame frame, Object object) {
1198+
protected Object callToAry(Object object) {
12011199
if (toAryNode == null) {
12021200
CompilerDirectives.transferToInterpreterAndInvalidate();
12031201
toAryNode = insert(CallDispatchHeadNode.createPrivate());

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,7 @@ public static InstanceExecNode create() {
394394

395395
@Child private CallBlockNode callBlockNode = CallBlockNode.create();
396396

397-
public abstract Object executeInstanceExec(Object self, Object[] args, Object block);
397+
abstract Object executeInstanceExec(Object self, Object[] args, DynamicObject block);
398398

399399
@Specialization
400400
protected Object instanceExec(Object receiver, Object[] arguments, DynamicObject block) {

src/main/java/org/truffleruby/core/module/ModuleNodes.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -760,7 +760,7 @@ public static ClassExecNode create() {
760760

761761
@Child private CallBlockNode callBlockNode = CallBlockNode.create();
762762

763-
public abstract Object executeClassExec(DynamicObject self, Object[] args, Object block);
763+
abstract Object executeClassExec(DynamicObject self, Object[] args, DynamicObject block);
764764

765765
@Specialization
766766
protected Object classExec(DynamicObject self, Object[] args, DynamicObject block) {

src/main/java/org/truffleruby/core/numeric/FloatNodes.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ public static ModNode create() {
223223
return ModNodeFactory.create(null);
224224
}
225225

226-
public abstract Object executeMod(Object a, Object b);
226+
public abstract Object executeMod(double a, double b);
227227

228228
@Specialization
229229
protected double mod(double a, long b) {

src/main/java/org/truffleruby/core/regexp/MatchDataNodes.java

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import java.util.Arrays;
1313
import java.util.Iterator;
1414

15-
import com.oracle.truffle.api.library.CachedLibrary;
1615
import org.jcodings.Encoding;
1716
import org.joni.NameEntry;
1817
import org.joni.Regex;
@@ -30,8 +29,8 @@
3029
import org.truffleruby.core.array.ArrayIndexNodes;
3130
import org.truffleruby.core.array.ArrayOperations;
3231
import org.truffleruby.core.array.ArrayUtils;
33-
import org.truffleruby.core.cast.ToIntNode;
3432
import org.truffleruby.core.cast.IntegerCastNode;
33+
import org.truffleruby.core.cast.ToIntNode;
3534
import org.truffleruby.core.regexp.MatchDataNodesFactory.ValuesNodeFactory;
3635
import org.truffleruby.core.rope.Rope;
3736
import org.truffleruby.core.rope.RopeNodes;
@@ -41,19 +40,19 @@
4140
import org.truffleruby.core.symbol.RubySymbol;
4241
import org.truffleruby.language.Nil;
4342
import org.truffleruby.language.NotProvided;
44-
import org.truffleruby.language.library.RubyLibrary;
4543
import org.truffleruby.language.RubyNode;
4644
import org.truffleruby.language.Visibility;
4745
import org.truffleruby.language.control.RaiseException;
4846
import org.truffleruby.language.dispatch.CallDispatchHeadNode;
47+
import org.truffleruby.language.library.RubyLibrary;
4948
import org.truffleruby.language.objects.AllocateObjectNode;
5049

5150
import com.oracle.truffle.api.CompilerDirectives;
5251
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
5352
import com.oracle.truffle.api.dsl.Cached;
5453
import com.oracle.truffle.api.dsl.Specialization;
54+
import com.oracle.truffle.api.library.CachedLibrary;
5555
import com.oracle.truffle.api.object.DynamicObject;
56-
import com.oracle.truffle.api.profiles.BranchProfile;
5756
import com.oracle.truffle.api.profiles.ConditionProfile;
5857

5958
@CoreModule(value = "MatchData", isClass = true)
@@ -230,7 +229,7 @@ public static GetIndexNode create(RubyNode... nodes) {
230229
return MatchDataNodesFactory.GetIndexNodeFactory.create(nodes);
231230
}
232231

233-
public abstract Object executeGetIndex(Object matchData, Object index, Object length);
232+
protected abstract Object executeGetIndex(Object matchData, int index, NotProvided length);
234233

235234
@Specialization
236235
protected Object getIndex(DynamicObject matchData, int index, NotProvided length,
@@ -283,14 +282,12 @@ protected Object getIndexSymbolSingleMatch(DynamicObject matchData, RubySymbol i
283282
return executeGetIndex(matchData, backRefIndex, NotProvided.INSTANCE);
284283
} else {
285284
final int i = getBackRef(matchData, regexp, name);
286-
287285
return executeGetIndex(matchData, i, NotProvided.INSTANCE);
288286
}
289287
}
290288

291289
@Specialization
292-
protected Object getIndexSymbol(DynamicObject matchData, RubySymbol index, NotProvided length,
293-
@Cached BranchProfile errorProfile) {
290+
protected Object getIndexSymbol(DynamicObject matchData, RubySymbol index, NotProvided length) {
294291
return executeGetIndex(matchData, getBackRefFromSymbol(matchData, index), NotProvided.INSTANCE);
295292
}
296293

@@ -299,7 +296,8 @@ protected Object getIndexString(DynamicObject matchData, DynamicObject index, No
299296
return executeGetIndex(matchData, getBackRefFromString(matchData, index), NotProvided.INSTANCE);
300297
}
301298

302-
@Specialization(guards = { "!isRubySymbol(index)", "!isRubyString(index)", "!isIntRange(index)" })
299+
@Specialization(
300+
guards = { "!isInteger(index)", "!isRubySymbol(index)", "!isRubyString(index)", "!isIntRange(index)" })
303301
protected Object getIndex(DynamicObject matchData, Object index, NotProvided length,
304302
@Cached ToIntNode toIntNode) {
305303
return executeGetIndex(matchData, toIntNode.execute(index), NotProvided.INSTANCE);

0 commit comments

Comments
 (0)