Skip to content

Commit e0113d5

Browse files
committed
PString shouldn't inherit from PSequence
1 parent cee059b commit e0113d5

18 files changed

+94
-142
lines changed

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,6 @@
123123
import com.oracle.graal.python.builtins.objects.object.ObjectBuiltins;
124124
import com.oracle.graal.python.builtins.objects.object.PythonObject;
125125
import com.oracle.graal.python.builtins.objects.set.PSet;
126-
import com.oracle.graal.python.builtins.objects.str.PString;
127126
import com.oracle.graal.python.builtins.objects.str.StringUtils;
128127
import com.oracle.graal.python.builtins.objects.tuple.PTuple;
129128
import com.oracle.graal.python.lib.OsEnvironGetNode;
@@ -876,7 +875,7 @@ static Object which(Object object) {
876875
detail = whichCallTarget(fn.getCallTarget());
877876
} else if (object instanceof PBuiltinMethod fn) {
878877
detail = whichCallTarget(fn.getBuiltinFunction().getCallTarget());
879-
} else if (object instanceof PSequence sequence && !(object instanceof PString)) {
878+
} else if (object instanceof PSequence sequence) {
880879
detail = sequence.getSequenceStorage();
881880
} else if (object instanceof PArray array) {
882881
detail = array.getSequenceStorage();

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

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -55,21 +55,20 @@
5555
import com.oracle.graal.python.annotations.ArgumentClinic;
5656
import com.oracle.graal.python.annotations.ArgumentClinic.ClinicConversion;
5757
import com.oracle.graal.python.annotations.ArgumentClinic.PrimitiveType;
58+
import com.oracle.graal.python.annotations.Builtin;
5859
import com.oracle.graal.python.annotations.ClinicConverterFactory;
5960
import com.oracle.graal.python.annotations.ClinicConverterFactory.ArgumentName;
6061
import com.oracle.graal.python.annotations.ClinicConverterFactory.BuiltinName;
61-
import com.oracle.graal.python.annotations.Builtin;
62+
import com.oracle.graal.python.annotations.PythonOS;
6263
import com.oracle.graal.python.builtins.CoreFunctions;
6364
import com.oracle.graal.python.builtins.Python3Core;
6465
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
6566
import com.oracle.graal.python.builtins.PythonBuiltins;
66-
import com.oracle.graal.python.annotations.PythonOS;
6767
import com.oracle.graal.python.builtins.modules.SysModuleBuiltins.AuditNode;
6868
import com.oracle.graal.python.builtins.objects.PNone;
6969
import com.oracle.graal.python.builtins.objects.buffer.PythonBufferAccessLibrary;
7070
import com.oracle.graal.python.builtins.objects.bytes.BytesNodes;
7171
import com.oracle.graal.python.builtins.objects.bytes.PBytes;
72-
import com.oracle.graal.python.builtins.objects.common.SequenceNodes.LenNode;
7372
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
7473
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes.GetItemNode;
7574
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes.ToArrayNode;
@@ -128,7 +127,6 @@
128127
import com.oracle.graal.python.runtime.exception.PException;
129128
import com.oracle.graal.python.runtime.exception.PythonExitException;
130129
import com.oracle.graal.python.runtime.object.PFactory;
131-
import com.oracle.graal.python.runtime.sequence.PSequence;
132130
import com.oracle.graal.python.runtime.sequence.storage.LongSequenceStorage;
133131
import com.oracle.graal.python.runtime.sequence.storage.SequenceStorage;
134132
import com.oracle.graal.python.util.OverflowException;
@@ -2020,21 +2018,19 @@ static long[] now(VirtualFrame frame, PNone times, PNone ns) {
20202018
@Specialization(guards = {"isNoValue(ns)"})
20212019
static long[] times(VirtualFrame frame, PTuple times, @SuppressWarnings("unused") PNone ns,
20222020
@Bind Node inliningTarget,
2023-
@Exclusive @Cached LenNode lenNode,
2024-
@Shared @Cached("createNotNormalized()") GetItemNode getItemNode,
2021+
@Shared @Cached SequenceStorageNodes.GetItemScalarNode getItemNode,
20252022
@Cached ObjectToTimespecNode objectToTimespecNode,
20262023
@Exclusive @Cached PRaiseNode raiseNode) {
2027-
return convertToTimespec(frame, inliningTarget, times, lenNode, getItemNode, objectToTimespecNode, raiseNode);
2024+
return convertToTimespec(frame, inliningTarget, times, getItemNode, objectToTimespecNode, raiseNode);
20282025
}
20292026

20302027
@Specialization
20312028
static long[] ns(VirtualFrame frame, @SuppressWarnings("unused") PNone times, PTuple ns,
20322029
@Bind Node inliningTarget,
2033-
@Exclusive @Cached LenNode lenNode,
2034-
@Shared @Cached("createNotNormalized()") GetItemNode getItemNode,
2030+
@Shared @Cached SequenceStorageNodes.GetItemScalarNode getItemNode,
20352031
@Cached SplitLongToSAndNsNode splitLongToSAndNsNode,
20362032
@Exclusive @Cached PRaiseNode raiseNode) {
2037-
return convertToTimespec(frame, inliningTarget, ns, lenNode, getItemNode, splitLongToSAndNsNode, raiseNode);
2033+
return convertToTimespec(frame, inliningTarget, ns, getItemNode, splitLongToSAndNsNode, raiseNode);
20382034
}
20392035

20402036
@Specialization(guards = {"!isPNone(times)", "!isNoValue(ns)"})
@@ -2066,14 +2062,15 @@ private static PException timesTupleError(Node inliningTarget, PRaiseNode raiseN
20662062
throw raiseNode.raise(inliningTarget, TypeError, ErrorMessages.MUST_BE_EITHER_OR, "utime", "times", "a tuple of two ints", "None");
20672063
}
20682064

2069-
private static long[] convertToTimespec(VirtualFrame frame, Node inliningTarget, PTuple times, LenNode lenNode, GetItemNode getItemNode, ConvertToTimespecBaseNode convertToTimespecBaseNode,
2070-
PRaiseNode raiseNode) {
2071-
if (lenNode.execute(inliningTarget, times) != 2) {
2065+
private static long[] convertToTimespec(VirtualFrame frame, Node inliningTarget, PTuple times, SequenceStorageNodes.GetItemScalarNode getItemNode,
2066+
ConvertToTimespecBaseNode convertToTimespecBaseNode, PRaiseNode raiseNode) {
2067+
SequenceStorage storage = times.getSequenceStorage();
2068+
if (storage.length() != 2) {
20722069
throw timesTupleError(inliningTarget, raiseNode);
20732070
}
20742071
long[] timespec = new long[4];
2075-
convertToTimespecBaseNode.execute(frame, inliningTarget, getItemNode.execute(times.getSequenceStorage(), 0), timespec, 0);
2076-
convertToTimespecBaseNode.execute(frame, inliningTarget, getItemNode.execute(times.getSequenceStorage(), 1), timespec, 2);
2072+
convertToTimespecBaseNode.execute(frame, inliningTarget, getItemNode.execute(inliningTarget, storage, 0), timespec, 0);
2073+
convertToTimespecBaseNode.execute(frame, inliningTarget, getItemNode.execute(inliningTarget, storage, 1), timespec, 2);
20772074
return timespec;
20782075
}
20792076
}
@@ -3245,17 +3242,19 @@ static void doLong(long value, long[] timespec, int offset) {
32453242
@Specialization(guards = {"!isInteger(value)"})
32463243
static void doGeneric(VirtualFrame frame, Node inliningTarget, Object value, long[] timespec, int offset,
32473244
@Cached PyNumberDivmodNode divmodNode,
3248-
@Cached LenNode lenNode,
32493245
@Cached(value = "createNotNormalized()", inline = false) GetItemNode getItemNode,
32503246
@Cached PyLongAsLongNode asLongNode,
32513247
@Cached PRaiseNode raiseNode) {
32523248
Object divmod = divmodNode.execute(frame, inliningTarget, value, BILLION);
3253-
if (!PGuards.isPTuple(divmod) || lenNode.execute(inliningTarget, (PSequence) divmod) != 2) {
3254-
throw raiseNode.raise(inliningTarget, TypeError, ErrorMessages.MUST_RETURN_2TUPLE, value, divmod);
3249+
if (divmod instanceof PTuple tuple) {
3250+
SequenceStorage storage = tuple.getSequenceStorage();
3251+
if (storage.length() == 2) {
3252+
timespec[offset] = asLongNode.execute(frame, inliningTarget, getItemNode.execute(storage, 0));
3253+
timespec[offset + 1] = asLongNode.execute(frame, inliningTarget, getItemNode.execute(storage, 1));
3254+
return;
3255+
}
32553256
}
3256-
SequenceStorage storage = ((PTuple) divmod).getSequenceStorage();
3257-
timespec[offset] = asLongNode.execute(frame, inliningTarget, getItemNode.execute(storage, 0));
3258-
timespec[offset + 1] = asLongNode.execute(frame, inliningTarget, getItemNode.execute(storage, 1));
3257+
throw raiseNode.raise(inliningTarget, TypeError, ErrorMessages.MUST_RETURN_2TUPLE, value, divmod);
32593258
}
32603259
}
32613260

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@
5454

5555
import com.oracle.graal.python.annotations.ArgumentClinic;
5656
import com.oracle.graal.python.annotations.ArgumentClinic.ClinicConversion;
57-
import com.oracle.graal.python.annotations.ClinicConverterFactory;
5857
import com.oracle.graal.python.annotations.Builtin;
58+
import com.oracle.graal.python.annotations.ClinicConverterFactory;
5959
import com.oracle.graal.python.builtins.CoreFunctions;
6060
import com.oracle.graal.python.builtins.PythonBuiltins;
6161
import com.oracle.graal.python.builtins.modules.PosixModuleBuiltins.ObjectToOpaquePathNode;
@@ -67,6 +67,7 @@
6767
import com.oracle.graal.python.builtins.objects.common.SequenceNodes.GetSequenceStorageNode;
6868
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes.GetItemNode;
6969
import com.oracle.graal.python.builtins.objects.exception.OSErrorEnum;
70+
import com.oracle.graal.python.builtins.objects.list.PList;
7071
import com.oracle.graal.python.builtins.objects.tuple.PTuple;
7172
import com.oracle.graal.python.lib.PyObjectGetItem;
7273
import com.oracle.graal.python.lib.PyObjectSizeNode;
@@ -89,7 +90,6 @@
8990
import com.oracle.graal.python.runtime.PythonContext;
9091
import com.oracle.graal.python.runtime.PythonOptions;
9192
import com.oracle.graal.python.runtime.exception.PException;
92-
import com.oracle.graal.python.runtime.sequence.PSequence;
9393
import com.oracle.graal.python.runtime.sequence.storage.SequenceStorage;
9494
import com.oracle.graal.python.util.PythonUtils;
9595
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
@@ -132,19 +132,19 @@ static Object[] doSequence(VirtualFrame frame, Object processArgs,
132132
@Cached ObjectToOpaquePathNode objectToOpaquePathNode,
133133
@Cached("createNotNormalized()") GetItemNode getItemNode,
134134
@Cached PRaiseNode raiseNode) {
135-
PSequence argsSequence;
135+
PList argsList;
136136
try {
137-
argsSequence = fastConstructListNode.execute(frame, inliningTarget, processArgs);
137+
argsList = fastConstructListNode.execute(frame, inliningTarget, processArgs);
138138
} catch (PException e) {
139139
e.expect(inliningTarget, TypeError, isBuiltinClassProfile);
140140
throw raiseNode.raise(inliningTarget, TypeError, ErrorMessages.S_MUST_BE_S, "argv", "a tuple");
141141
}
142142

143-
SequenceStorage argsStorage = getSequenceStorageNode.execute(inliningTarget, argsSequence);
143+
SequenceStorage argsStorage = getSequenceStorageNode.execute(inliningTarget, argsList);
144144
int len = argsStorage.length();
145145
Object[] argsArray = new Object[len];
146146
for (int i = 0; i < len; ++i) {
147-
SequenceStorage newStorage = getSequenceStorageNode.execute(inliningTarget, argsSequence);
147+
SequenceStorage newStorage = getSequenceStorageNode.execute(inliningTarget, argsList);
148148
if (newStorage != argsStorage || newStorage.length() != len) {
149149
// TODO write a test for this
150150
throw raiseNode.raise(inliningTarget, RuntimeError, ErrorMessages.ARGS_CHANGED_DURING_ITERATION);

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@
7676
import com.oracle.graal.python.runtime.PosixSupportLibrary.Timeval;
7777
import com.oracle.graal.python.runtime.exception.PythonErrorType;
7878
import com.oracle.graal.python.runtime.object.PFactory;
79-
import com.oracle.graal.python.runtime.sequence.PSequence;
8079
import com.oracle.graal.python.util.ArrayBuilder;
8180
import com.oracle.graal.python.util.IntArrayBuilder;
8281
import com.oracle.graal.python.util.PythonUtils;
@@ -192,9 +191,9 @@ private static ObjAndFDList seq2set(VirtualFrame frame, Node inliningTarget, Obj
192191
// repeatedly in the loop condition
193192
ArrayBuilder<Object> objects = new ArrayBuilder<>();
194193
IntArrayBuilder fds = new IntArrayBuilder();
195-
PSequence pSequence = constructListNode.execute(frame, inliningTarget, sequence);
194+
PList list = constructListNode.execute(frame, inliningTarget, sequence);
196195
for (int i = 0; i < sizeNode.execute(frame, inliningTarget, sequence); i++) {
197-
Object pythonObject = callGetItemNode.execute(frame, inliningTarget, pSequence, i);
196+
Object pythonObject = callGetItemNode.execute(frame, inliningTarget, list, i);
198197
objects.add(pythonObject);
199198
int fd = asFileDescriptor.execute(frame, inliningTarget, pythonObject);
200199
if (fd >= FD_SETSIZE.value) {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/codecs/ErrorHandlers.java

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@
6767
import com.oracle.graal.python.builtins.objects.buffer.PythonBufferAccessLibrary;
6868
import com.oracle.graal.python.builtins.objects.buffer.PythonBufferAcquireLibrary;
6969
import com.oracle.graal.python.builtins.objects.bytes.BytesUtils;
70-
import com.oracle.graal.python.builtins.objects.common.SequenceNodes;
70+
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
7171
import com.oracle.graal.python.builtins.objects.exception.PBaseException;
7272
import com.oracle.graal.python.builtins.objects.exception.UnicodeDecodeErrorBuiltins.MakeDecodeExceptionNode;
7373
import com.oracle.graal.python.builtins.objects.exception.UnicodeDecodeErrorBuiltins.PyUnicodeDecodeErrorGetEncodingNode;
@@ -93,6 +93,7 @@
9393
import com.oracle.graal.python.runtime.IndirectCallData;
9494
import com.oracle.graal.python.runtime.exception.PException;
9595
import com.oracle.graal.python.runtime.object.PFactory;
96+
import com.oracle.graal.python.runtime.sequence.storage.SequenceStorage;
9697
import com.oracle.truffle.api.CompilerDirectives.ValueType;
9798
import com.oracle.truffle.api.dsl.Bind;
9899
import com.oracle.truffle.api.dsl.Cached;
@@ -850,17 +851,18 @@ abstract static class ParseDecodingErrorHandlerResultNode extends Node {
850851

851852
@Specialization
852853
static DecodingErrorHandlerResult doTuple(Node inliningTarget, PTuple result,
853-
@Cached SequenceNodes.LenNode lenNode,
854-
@Cached SequenceNodes.GetObjectArrayNode getObjectArrayNode,
854+
@Cached SequenceStorageNodes.GetItemScalarNode getItemScalarNode,
855855
@Cached CastToTruffleStringChecked0Node castToTruffleStringCheckedNode,
856856
@Cached CastToJavaIntExactNode castToJavaIntExactNode,
857857
@Cached PRaiseNode raiseNode) {
858-
if (lenNode.execute(inliningTarget, result) != 2) {
858+
SequenceStorage storage = result.getSequenceStorage();
859+
if (storage.length() != 2) {
859860
throw raiseNode.raise(inliningTarget, PythonBuiltinClassType.TypeError, ErrorMessages.DECODING_ERROR_HANDLER_MUST_RETURN_STR_INT_TUPLE);
860861
}
861-
Object[] array = getObjectArrayNode.execute(inliningTarget, result);
862-
TruffleString str = castToTruffleStringCheckedNode.cast(inliningTarget, array[0], ErrorMessages.DECODING_ERROR_HANDLER_MUST_RETURN_STR_INT_TUPLE);
863-
int pos = castToJavaIntExactNode.execute(inliningTarget, array[1]);
862+
Object item1 = getItemScalarNode.execute(inliningTarget, storage, 0);
863+
Object item2 = getItemScalarNode.execute(inliningTarget, storage, 1);
864+
TruffleString str = castToTruffleStringCheckedNode.cast(inliningTarget, item1, ErrorMessages.DECODING_ERROR_HANDLER_MUST_RETURN_STR_INT_TUPLE);
865+
int pos = castToJavaIntExactNode.execute(inliningTarget, item2);
864866
return new DecodingErrorHandlerResult(str, pos);
865867
}
866868

@@ -919,26 +921,27 @@ abstract static class ParseEncodingErrorHandlerResultNode extends Node {
919921

920922
@Specialization
921923
static EncodingErrorHandlerResult doTuple(Node inliningTarget, PTuple result,
922-
@Cached SequenceNodes.LenNode lenNode,
923-
@Cached SequenceNodes.GetObjectArrayNode getObjectArrayNode,
924+
@Cached SequenceStorageNodes.GetItemScalarNode getItemScalarNode,
924925
@Cached CastToJavaIntExactNode castToJavaIntExactNode,
925926
@Cached PyUnicodeCheckNode pyUnicodeCheckNode,
926927
@Cached PyBytesCheckNode pyBytesCheckNode,
927928
@Cached PRaiseNode raiseNode) {
928-
if (lenNode.execute(inliningTarget, result) != 2) {
929+
SequenceStorage storage = result.getSequenceStorage();
930+
if (storage.length() != 2) {
929931
throw raiseNode.raise(inliningTarget, PythonBuiltinClassType.TypeError, ErrorMessages.ENCODING_ERROR_HANDLER_MUST_RETURN_STR_BYTES_INT_TUPLE);
930932
}
931-
Object[] array = getObjectArrayNode.execute(inliningTarget, result);
933+
Object item1 = getItemScalarNode.execute(inliningTarget, storage, 0);
934+
Object item2 = getItemScalarNode.execute(inliningTarget, storage, 1);
932935
boolean isUnicode;
933-
if (pyUnicodeCheckNode.execute(inliningTarget, array[0])) {
936+
if (pyUnicodeCheckNode.execute(inliningTarget, item1)) {
934937
isUnicode = true;
935-
} else if (pyBytesCheckNode.execute(inliningTarget, array[0])) {
938+
} else if (pyBytesCheckNode.execute(inliningTarget, item1)) {
936939
isUnicode = false;
937940
} else {
938941
throw raiseNode.raise(inliningTarget, PythonBuiltinClassType.TypeError, ErrorMessages.ENCODING_ERROR_HANDLER_MUST_RETURN_STR_BYTES_INT_TUPLE);
939942
}
940-
int pos = castToJavaIntExactNode.execute(inliningTarget, array[1]);
941-
return new EncodingErrorHandlerResult(array[0], pos, isUnicode);
943+
int pos = castToJavaIntExactNode.execute(inliningTarget, item2);
944+
return new EncodingErrorHandlerResult(item1, pos, isUnicode);
942945
}
943946

944947
@Fallback

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/modules/multiprocessing/MultiprocessingGraalPyModuleBuiltins.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,6 @@
8282
import com.oracle.graal.python.runtime.PythonContext;
8383
import com.oracle.graal.python.runtime.PythonContext.SharedMultiprocessingData;
8484
import com.oracle.graal.python.runtime.object.PFactory;
85-
import com.oracle.graal.python.runtime.sequence.PSequence;
8685
import com.oracle.graal.python.runtime.sequence.storage.SequenceStorage;
8786
import com.oracle.graal.python.util.ArrayBuilder;
8887
import com.oracle.graal.python.util.PythonUtils;
@@ -359,11 +358,11 @@ Object doGeneric(VirtualFrame frame, Object multiprocessingFdsList, Object multi
359358
PythonContext context = getContext();
360359
SharedMultiprocessingData sharedData = context.getSharedMultiprocessingData();
361360

362-
PSequence pSequence = constructListNode.execute(frame, inliningTarget, multiprocessingFdsList);
363-
int size = sizeNode.execute(frame, inliningTarget, pSequence);
361+
PList list = constructListNode.execute(frame, inliningTarget, multiprocessingFdsList);
362+
int size = sizeNode.execute(frame, inliningTarget, list);
364363
int[] multiprocessingFds = new int[size];
365364
for (int i = 0; i < size; i++) {
366-
Object pythonObject = getItem.execute(frame, inliningTarget, pSequence, i);
365+
Object pythonObject = getItem.execute(frame, inliningTarget, list, i);
367366
multiprocessingFds[i] = toInt(inliningTarget, castToJava, pythonObject);
368367
}
369368

0 commit comments

Comments
 (0)