Skip to content

Commit 8063d48

Browse files
committed
Extract PySliceNew from SliceLiteralNode
1 parent 0426a7d commit 8063d48

File tree

9 files changed

+160
-63
lines changed

9 files changed

+160
-63
lines changed

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/BuiltinConstructors.java

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@
197197
import com.oracle.graal.python.lib.PyObjectIsTrueNode;
198198
import com.oracle.graal.python.lib.PyObjectSizeNode;
199199
import com.oracle.graal.python.lib.PyObjectStrAsObjectNode;
200+
import com.oracle.graal.python.lib.PySliceNew;
200201
import com.oracle.graal.python.nodes.BuiltinNames;
201202
import com.oracle.graal.python.nodes.ErrorMessages;
202203
import com.oracle.graal.python.nodes.PConstructAndRaiseNode;
@@ -238,7 +239,6 @@
238239
import com.oracle.graal.python.nodes.object.GetClassNode;
239240
import com.oracle.graal.python.nodes.object.GetOrCreateDictNode;
240241
import com.oracle.graal.python.nodes.object.IsBuiltinClassProfile;
241-
import com.oracle.graal.python.nodes.subscript.SliceLiteralNode;
242242
import com.oracle.graal.python.nodes.util.CannotCastException;
243243
import com.oracle.graal.python.nodes.util.CastToJavaIntExactNode;
244244
import com.oracle.graal.python.nodes.util.CastToJavaStringNode;
@@ -3244,26 +3244,25 @@ Object doGeneric(@SuppressWarnings("unused") Object clazz, Object get, Object se
32443244
// slice(start, stop[, step])
32453245
@Builtin(name = "slice", minNumOfPositionalArgs = 2, maxNumOfPositionalArgs = 4, constructsClass = PythonBuiltinClassType.PSlice)
32463246
@GenerateNodeFactory
3247-
public abstract static class CreateSliceNode extends PythonBuiltinNode {
3248-
3249-
@Specialization(guards = {"isNoValue(second)", "isNoValue(third)"})
3247+
abstract static class SliceNode extends PythonQuaternaryBuiltinNode {
3248+
@Specialization(guards = {"isNoValue(second)"})
32503249
@SuppressWarnings("unused")
3251-
static Object stop(VirtualFrame frame, Object cls, Object first, Object second, Object third,
3252-
@Cached SliceLiteralNode sliceNode) {
3253-
return sliceNode.execute(frame, PNone.NONE, first, PNone.NONE);
3250+
static Object singleArg(Object cls, Object first, Object second, Object third,
3251+
@Cached PySliceNew sliceNode) {
3252+
return sliceNode.execute(PNone.NONE, first, PNone.NONE);
32543253
}
32553254

3256-
@Specialization(guards = {"!isNoValue(second)", "isNoValue(third)"})
3255+
@Specialization(guards = {"!isNoValue(stop)", "isNoValue(step)"})
32573256
@SuppressWarnings("unused")
3258-
static Object startStop(VirtualFrame frame, Object cls, Object first, Object second, Object third,
3259-
@Cached SliceLiteralNode sliceNode) {
3260-
return sliceNode.execute(frame, first, second, PNone.NONE);
3257+
static Object twoArgs(Object cls, Object start, Object stop, Object step,
3258+
@Cached PySliceNew sliceNode) {
3259+
return sliceNode.execute(start, stop, PNone.NONE);
32613260
}
32623261

3263-
@Specialization(guards = {"!isNoValue(second)", "!isNoValue(third)"})
3264-
static Object slice(VirtualFrame frame, @SuppressWarnings("unused") Object cls, Object first, Object second, Object third,
3265-
@Cached SliceLiteralNode sliceNode) {
3266-
return sliceNode.execute(frame, first, second, third);
3262+
@Fallback
3263+
static Object threeArgs(@SuppressWarnings("unused") Object cls, Object start, Object stop, Object step,
3264+
@Cached PySliceNew sliceNode) {
3265+
return sliceNode.execute(start, stop, step);
32673266
}
32683267
}
32693268

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextAbstractBuiltins.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,25 +40,26 @@
4040
*/
4141
package com.oracle.graal.python.builtins.modules.cext;
4242

43+
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.SystemError;
44+
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.TypeError;
4345
import static com.oracle.graal.python.builtins.objects.cext.capi.NativeCAPISymbol.FUN_PY_TRUFFLE_PY_MAPPING_CHECK;
4446
import static com.oracle.graal.python.builtins.objects.cext.capi.NativeCAPISymbol.FUN_PY_TRUFFLE_PY_MAPPING_SIZE;
4547
import static com.oracle.graal.python.builtins.objects.cext.capi.NativeCAPISymbol.FUN_PY_TRUFFLE_PY_OBJECT_SIZE;
4648
import static com.oracle.graal.python.builtins.objects.cext.capi.NativeCAPISymbol.FUN_PY_TRUFFLE_PY_SEQUENCE_CHECK;
4749
import static com.oracle.graal.python.builtins.objects.cext.capi.NativeCAPISymbol.FUN_PY_TRUFFLE_PY_SEQUENCE_SIZE;
48-
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.SystemError;
49-
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.TypeError;
5050
import static com.oracle.graal.python.nodes.ErrorMessages.BASE_MUST_BE;
5151
import static com.oracle.graal.python.nodes.ErrorMessages.OBJ_ISNT_MAPPING;
5252
import static com.oracle.graal.python.nodes.ErrorMessages.P_OBJ_DOES_NOT_SUPPORT_ITEM_ASSIGMENT;
53+
import static com.oracle.graal.python.nodes.SpecialMethodNames.ITEMS;
54+
import static com.oracle.graal.python.nodes.SpecialMethodNames.KEYS;
55+
import static com.oracle.graal.python.nodes.SpecialMethodNames.VALUES;
5356
import static com.oracle.graal.python.nodes.SpecialMethodNames.__GETITEM__;
5457
import static com.oracle.graal.python.nodes.SpecialMethodNames.__IADD__;
5558
import static com.oracle.graal.python.nodes.SpecialMethodNames.__IMUL__;
5659
import static com.oracle.graal.python.nodes.SpecialMethodNames.__SETITEM__;
57-
import static com.oracle.graal.python.nodes.SpecialMethodNames.ITEMS;
58-
import static com.oracle.graal.python.nodes.SpecialMethodNames.KEYS;
59-
import static com.oracle.graal.python.nodes.SpecialMethodNames.VALUES;
6060

6161
import java.util.List;
62+
6263
import com.oracle.graal.python.builtins.Builtin;
6364
import com.oracle.graal.python.builtins.CoreFunctions;
6465
import com.oracle.graal.python.builtins.Python3Core;
@@ -95,6 +96,7 @@
9596
import com.oracle.graal.python.lib.PyObjectDelItem;
9697
import com.oracle.graal.python.lib.PyObjectGetAttr;
9798
import com.oracle.graal.python.lib.PyObjectLookupAttr;
99+
import com.oracle.graal.python.lib.PySliceNew;
98100
import com.oracle.graal.python.nodes.ErrorMessages;
99101
import com.oracle.graal.python.nodes.SpecialMethodNames;
100102
import com.oracle.graal.python.nodes.builtins.ListNodes.ConstructListNode;
@@ -113,7 +115,6 @@
113115
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
114116
import com.oracle.graal.python.nodes.object.GetClassNode;
115117
import com.oracle.graal.python.nodes.object.IsBuiltinClassProfile;
116-
import com.oracle.graal.python.nodes.subscript.SliceLiteralNode;
117118
import com.oracle.graal.python.nodes.truffle.PythonTypes;
118119
import com.oracle.graal.python.runtime.ExecutionContext.IndirectCallContext;
119120
import com.oracle.graal.python.runtime.exception.PException;
@@ -750,12 +751,12 @@ abstract static class PySequenceGetSliceNode extends PythonTernaryBuiltinNode {
750751
Object getSlice(VirtualFrame frame, Object obj, long iLow, long iHigh,
751752
@Shared("check") @SuppressWarnings("unused") @Cached com.oracle.graal.python.lib.PySequenceCheckNode checkNode,
752753
@Cached PyObjectLookupAttr lookupAttrNode,
753-
@Cached SliceLiteralNode sliceNode,
754+
@Cached PySliceNew sliceNode,
754755
@Cached CallNode callNode,
755756
@Cached TransformExceptionToNativeNode transformExceptionToNativeNode) {
756757
try {
757758
Object getItemCallable = lookupAttrNode.execute(frame, obj, __GETITEM__);
758-
return callNode.execute(getItemCallable, sliceNode.execute(frame, iLow, iHigh, PNone.NONE));
759+
return callNode.execute(getItemCallable, sliceNode.execute(iLow, iHigh, PNone.NONE));
759760
} catch (PException e) {
760761
transformExceptionToNativeNode.execute(e);
761762
return getContext().getNativeNull();

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextListBuiltins.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@
7070
import com.oracle.graal.python.builtins.objects.list.ListBuiltins.ListInsertNode;
7171
import com.oracle.graal.python.builtins.objects.list.ListBuiltins.ListSortNode;
7272
import com.oracle.graal.python.builtins.objects.list.PList;
73+
import com.oracle.graal.python.lib.PySliceNew;
7374
import com.oracle.graal.python.nodes.ErrorMessages;
7475
import com.oracle.graal.python.nodes.PGuards;
7576
import com.oracle.graal.python.nodes.builtins.ListNodes.AppendNode;
@@ -81,7 +82,6 @@
8182
import com.oracle.graal.python.nodes.function.builtins.PythonTernaryBuiltinNode;
8283
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
8384
import com.oracle.graal.python.nodes.object.GetClassNode;
84-
import com.oracle.graal.python.nodes.subscript.SliceLiteralNode;
8585
import com.oracle.graal.python.nodes.truffle.PythonTypes;
8686
import com.oracle.graal.python.runtime.exception.PException;
8787
import com.oracle.graal.python.util.PythonUtils;
@@ -269,15 +269,15 @@ abstract static class PyListGetSliceNode extends PythonTernaryBuiltinNode {
269269
@Specialization
270270
Object getSlice(VirtualFrame frame, PList list, long iLow, long iHigh,
271271
@Cached com.oracle.graal.python.builtins.objects.list.ListBuiltins.GetItemNode getItemNode,
272-
@Cached SliceLiteralNode sliceNode,
272+
@Cached PySliceNew sliceNode,
273273
@Cached BranchProfile isIntRangeProfile,
274274
@Cached TransformExceptionToNativeNode transformExceptionToNativeNode) {
275275
try {
276276
if (PInt.isIntRange(iLow) && PInt.isIntRange(iHigh)) {
277277
isIntRangeProfile.enter();
278-
return getItemNode.execute(frame, list, sliceNode.execute(frame, (int) iLow, (int) iHigh, PNone.NONE));
278+
return getItemNode.execute(frame, list, sliceNode.execute((int) iLow, (int) iHigh, PNone.NONE));
279279
}
280-
return getItemNode.execute(frame, list, sliceNode.execute(frame, iLow, iHigh, PNone.NONE));
280+
return getItemNode.execute(frame, list, sliceNode.execute(iLow, iHigh, PNone.NONE));
281281
} catch (PException e) {
282282
transformExceptionToNativeNode.execute(e);
283283
return getContext().getNativeNull();
@@ -287,10 +287,10 @@ Object getSlice(VirtualFrame frame, PList list, long iLow, long iHigh,
287287
@Specialization
288288
Object getSlice(VirtualFrame frame, PList list, Object iLow, Object iHigh,
289289
@Cached com.oracle.graal.python.builtins.objects.list.ListBuiltins.GetItemNode getItemNode,
290-
@Cached SliceLiteralNode sliceNode,
290+
@Cached PySliceNew sliceNode,
291291
@Cached TransformExceptionToNativeNode transformExceptionToNativeNode) {
292292
try {
293-
return getItemNode.execute(frame, list, sliceNode.execute(frame, iLow, iHigh, PNone.NONE));
293+
return getItemNode.execute(frame, list, sliceNode.execute(iLow, iHigh, PNone.NONE));
294294
} catch (PException e) {
295295
transformExceptionToNativeNode.execute(e);
296296
return getContext().getNativeNull();
@@ -327,15 +327,15 @@ abstract static class PyListSetSliceNode extends PythonQuaternaryBuiltinNode {
327327
@Specialization
328328
static Object getSlice(VirtualFrame frame, PList list, long iLow, long iHigh, Object s,
329329
@Cached com.oracle.graal.python.builtins.objects.list.ListBuiltins.SetItemNode setItemNode,
330-
@Cached SliceLiteralNode sliceNode,
330+
@Cached PySliceNew sliceNode,
331331
@Cached BranchProfile isIntRangeProfile,
332332
@Cached TransformExceptionToNativeNode transformExceptionToNativeNode) {
333333
try {
334334
if (PInt.isIntRange(iLow) && PInt.isIntRange(iHigh)) {
335335
isIntRangeProfile.enter();
336-
setItemNode.execute(frame, list, sliceNode.execute(frame, (int) iLow, (int) iHigh, PNone.NONE), s);
336+
setItemNode.execute(frame, list, sliceNode.execute((int) iLow, (int) iHigh, PNone.NONE), s);
337337
}
338-
setItemNode.execute(frame, list, sliceNode.execute(frame, iLow, iHigh, PNone.NONE), s);
338+
setItemNode.execute(frame, list, sliceNode.execute(iLow, iHigh, PNone.NONE), s);
339339
return 0;
340340
} catch (PException e) {
341341
transformExceptionToNativeNode.execute(e);
@@ -346,10 +346,10 @@ static Object getSlice(VirtualFrame frame, PList list, long iLow, long iHigh, Ob
346346
@Specialization
347347
static Object getSlice(VirtualFrame frame, PList list, Object iLow, Object iHigh, Object s,
348348
@Cached com.oracle.graal.python.builtins.objects.list.ListBuiltins.SetItemNode setItemNode,
349-
@Cached SliceLiteralNode sliceNode,
349+
@Cached PySliceNew sliceNode,
350350
@Cached TransformExceptionToNativeNode transformExceptionToNativeNode) {
351351
try {
352-
setItemNode.execute(frame, list, sliceNode.execute(frame, iLow, iHigh, PNone.NONE), s);
352+
setItemNode.execute(frame, list, sliceNode.execute(iLow, iHigh, PNone.NONE), s);
353353
return 0;
354354
} catch (PException e) {
355355
transformExceptionToNativeNode.execute(e);

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextSliceBuiltins.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -40,24 +40,24 @@
4040
*/
4141
package com.oracle.graal.python.builtins.modules.cext;
4242

43-
import com.oracle.graal.python.builtins.Builtin;
4443
import java.util.List;
44+
45+
import com.oracle.graal.python.builtins.Builtin;
4546
import com.oracle.graal.python.builtins.CoreFunctions;
4647
import com.oracle.graal.python.builtins.Python3Core;
4748
import com.oracle.graal.python.builtins.PythonBuiltins;
4849
import com.oracle.graal.python.builtins.objects.ellipsis.PEllipsis;
4950
import com.oracle.graal.python.builtins.objects.ints.PInt;
51+
import com.oracle.graal.python.lib.PySliceNew;
5052
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
5153
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
5254
import com.oracle.graal.python.nodes.function.builtins.PythonTernaryBuiltinNode;
53-
import com.oracle.graal.python.nodes.subscript.SliceLiteralNode;
5455
import com.oracle.graal.python.nodes.truffle.PythonTypes;
5556
import com.oracle.truffle.api.dsl.Cached;
5657
import com.oracle.truffle.api.dsl.GenerateNodeFactory;
5758
import com.oracle.truffle.api.dsl.NodeFactory;
5859
import com.oracle.truffle.api.dsl.Specialization;
5960
import com.oracle.truffle.api.dsl.TypeSystemReference;
60-
import com.oracle.truffle.api.frame.VirtualFrame;
6161
import com.oracle.truffle.api.profiles.BranchProfile;
6262

6363
@CoreFunctions(extendsModule = PythonCextBuiltins.PYTHON_CEXT)
@@ -79,20 +79,20 @@ public void initialize(Python3Core core) {
7979
@GenerateNodeFactory
8080
public abstract static class PySliceNewNode extends PythonTernaryBuiltinNode {
8181
@Specialization
82-
public static Object slice(VirtualFrame frame, long start, long stop, Object step,
83-
@Cached SliceLiteralNode sliceNode,
82+
public static Object slice(long start, long stop, Object step,
83+
@Cached PySliceNew sliceNode,
8484
@Cached BranchProfile isIntRangeProfile) {
8585
if (PInt.isIntRange(start) && PInt.isIntRange(stop)) {
8686
isIntRangeProfile.enter();
87-
return sliceNode.execute(frame, (int) start, (int) stop, step);
87+
return sliceNode.execute((int) start, (int) stop, step);
8888
}
89-
return sliceNode.execute(frame, start, stop, step);
89+
return sliceNode.execute(start, stop, step);
9090
}
9191

9292
@Specialization(guards = {"!isInteger(start) || !isInteger(stop)"})
93-
public static Object slice(VirtualFrame frame, Object start, Object stop, Object step,
94-
@Cached SliceLiteralNode sliceNode) {
95-
return sliceNode.execute(frame, start, stop, step);
93+
public static Object slice(Object start, Object stop, Object step,
94+
@Cached PySliceNew sliceNode) {
95+
return sliceNode.execute(start, stop, step);
9696
}
9797
}
9898

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/cext/PythonCextTupleBuiltins.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
import com.oracle.graal.python.builtins.objects.tuple.PTuple;
6969
import com.oracle.graal.python.builtins.objects.tuple.TupleBuiltins.GetItemNode;
7070
import com.oracle.graal.python.lib.PyNumberAsSizeNode;
71+
import com.oracle.graal.python.lib.PySliceNew;
7172
import com.oracle.graal.python.nodes.ErrorMessages;
7273
import com.oracle.graal.python.nodes.PGuards;
7374
import com.oracle.graal.python.nodes.PRaiseNode;
@@ -77,7 +78,6 @@
7778
import com.oracle.graal.python.nodes.function.builtins.PythonTernaryBuiltinNode;
7879
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
7980
import com.oracle.graal.python.nodes.object.GetClassNode;
80-
import com.oracle.graal.python.nodes.subscript.SliceLiteralNode;
8181
import com.oracle.graal.python.nodes.truffle.PythonTypes;
8282
import com.oracle.graal.python.runtime.exception.PException;
8383
import com.oracle.graal.python.runtime.sequence.storage.SequenceStorage;
@@ -202,15 +202,15 @@ abstract static class PyTupleGetSliceNode extends PythonTernaryBuiltinNode {
202202
@Specialization
203203
Object getSlice(VirtualFrame frame, PTuple tuple, long iLow, long iHigh,
204204
@Cached GetItemNode getItemNode,
205-
@Cached SliceLiteralNode sliceNode,
205+
@Cached PySliceNew sliceNode,
206206
@Cached BranchProfile isIntRangeProfile,
207207
@Cached TransformExceptionToNativeNode transformExceptionToNativeNode) {
208208
try {
209209
if (PInt.isIntRange(iLow) && PInt.isIntRange(iHigh)) {
210210
isIntRangeProfile.enter();
211-
return getItemNode.execute(frame, tuple, sliceNode.execute(frame, (int) iLow, (int) iHigh, PNone.NONE));
211+
return getItemNode.execute(frame, tuple, sliceNode.execute((int) iLow, (int) iHigh, PNone.NONE));
212212
}
213-
return getItemNode.execute(frame, tuple, sliceNode.execute(frame, iLow, iHigh, PNone.NONE));
213+
return getItemNode.execute(frame, tuple, sliceNode.execute(iLow, iHigh, PNone.NONE));
214214
} catch (PException e) {
215215
transformExceptionToNativeNode.execute(e);
216216
return getContext().getNativeNull();
@@ -220,10 +220,10 @@ Object getSlice(VirtualFrame frame, PTuple tuple, long iLow, long iHigh,
220220
@Specialization
221221
Object getSlice(VirtualFrame frame, PTuple tuple, Object iLow, Object iHigh,
222222
@Cached GetItemNode getItemNode,
223-
@Cached SliceLiteralNode sliceNode,
223+
@Cached PySliceNew sliceNode,
224224
@Cached TransformExceptionToNativeNode transformExceptionToNativeNode) {
225225
try {
226-
return getItemNode.execute(frame, tuple, sliceNode.execute(frame, iLow, iHigh, PNone.NONE));
226+
return getItemNode.execute(frame, tuple, sliceNode.execute(iLow, iHigh, PNone.NONE));
227227
} catch (PException e) {
228228
transformExceptionToNativeNode.execute(e);
229229
return getContext().getNativeNull();

0 commit comments

Comments
 (0)