Skip to content

Commit d0bb62f

Browse files
committed
make some test_bytes pass
1 parent c74fbd3 commit d0bb62f

File tree

29 files changed

+4016
-1999
lines changed

29 files changed

+4016
-1999
lines changed

graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_bytes.txt

Lines changed: 140 additions & 0 deletions
Large diffs are not rendered by default.

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/Python3Core.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -318,8 +318,8 @@ private static PythonBuiltins[] initializeBuiltins() {
318318
new BoolBuiltins(),
319319
new FloatBuiltins(),
320320
new BytesBuiltins(),
321-
new ComplexBuiltins(),
322321
new ByteArrayBuiltins(),
322+
new ComplexBuiltins(),
323323
new TypeBuiltins(),
324324
new IntBuiltins(),
325325
new ForeignObjectBuiltins(),

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

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@
4444
import static com.oracle.graal.python.builtins.PythonBuiltinClassType.ValueError;
4545
import static com.oracle.graal.python.runtime.exception.PythonErrorType.SystemError;
4646

47-
import java.io.UnsupportedEncodingException;
4847
import java.util.List;
4948
import java.util.zip.CRC32;
5049

@@ -55,6 +54,7 @@
5554
import com.oracle.graal.python.builtins.objects.PNone;
5655
import com.oracle.graal.python.builtins.objects.array.PArray;
5756
import com.oracle.graal.python.builtins.objects.bytes.BytesNodes;
57+
import com.oracle.graal.python.builtins.objects.bytes.BytesUtils;
5858
import com.oracle.graal.python.builtins.objects.bytes.PBytes;
5959
import com.oracle.graal.python.builtins.objects.bytes.PBytesLike;
6060
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
@@ -132,13 +132,9 @@ private static byte[] b64decode(String data) {
132132

133133
@TruffleBoundary
134134
private byte[] b64decode(byte[] data) {
135-
try {
136-
byte[] asciis = Base64.decode(new String(data, "ascii"));
137-
if (asciis != null) {
138-
return asciis;
139-
}
140-
} catch (UnsupportedEncodingException e) {
141-
// fall through
135+
byte[] asciis = Base64.decode(BytesUtils.createASCIIString(data));
136+
if (asciis != null) {
137+
return asciis;
142138
}
143139
throw raise(ValueError);
144140
}

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

Lines changed: 42 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@
9898
import java.util.Arrays;
9999
import java.util.List;
100100

101+
import com.oracle.graal.python.annotations.ArgumentClinic;
101102
import com.oracle.graal.python.builtins.Builtin;
102103
import com.oracle.graal.python.builtins.CoreFunctions;
103104
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
@@ -106,7 +107,8 @@
106107
import com.oracle.graal.python.builtins.objects.PNone;
107108
import com.oracle.graal.python.builtins.objects.PNotImplemented;
108109
import com.oracle.graal.python.builtins.objects.bytes.BytesNodes;
109-
import com.oracle.graal.python.builtins.objects.bytes.BytesNodes.ConvertToByteObjectBytesNode;
110+
import com.oracle.graal.python.builtins.objects.bytes.BytesNodesFactory;
111+
import com.oracle.graal.python.builtins.objects.bytes.PByteArray;
110112
import com.oracle.graal.python.builtins.objects.bytes.PBytes;
111113
import com.oracle.graal.python.builtins.objects.bytes.PBytesLike;
112114
import com.oracle.graal.python.builtins.objects.cell.PCell;
@@ -199,8 +201,10 @@
199201
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
200202
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode;
201203
import com.oracle.graal.python.nodes.function.builtins.PythonQuaternaryBuiltinNode;
204+
import com.oracle.graal.python.nodes.function.builtins.PythonQuaternaryClinicBuiltinNode;
202205
import com.oracle.graal.python.nodes.function.builtins.PythonTernaryBuiltinNode;
203206
import com.oracle.graal.python.nodes.function.builtins.PythonVarargsBuiltinNode;
207+
import com.oracle.graal.python.nodes.function.builtins.clinic.ArgumentClinicProvider;
204208
import com.oracle.graal.python.nodes.object.GetClassNode;
205209
import com.oracle.graal.python.nodes.object.IsBuiltinClassProfile;
206210
import com.oracle.graal.python.nodes.subscript.SliceLiteralNode;
@@ -215,10 +219,11 @@
215219
import com.oracle.graal.python.runtime.PythonCore;
216220
import com.oracle.graal.python.runtime.exception.PException;
217221
import com.oracle.graal.python.runtime.object.PythonObjectFactory;
222+
import com.oracle.graal.python.runtime.sequence.storage.ByteSequenceStorage;
218223
import com.oracle.graal.python.runtime.sequence.storage.ObjectSequenceStorage;
219224
import com.oracle.graal.python.runtime.sequence.storage.SequenceStorage;
220-
import com.oracle.graal.python.util.PythonUtils;
221225
import com.oracle.graal.python.util.OverflowException;
226+
import com.oracle.graal.python.util.PythonUtils;
222227
import com.oracle.truffle.api.Assumption;
223228
import com.oracle.truffle.api.CompilerAsserts;
224229
import com.oracle.truffle.api.CompilerDirectives;
@@ -258,23 +263,49 @@ public void initialize(PythonCore core) {
258263
}
259264

260265
// bytes([source[, encoding[, errors]]])
261-
@Builtin(name = BYTES, minNumOfPositionalArgs = 1, maxNumOfPositionalArgs = 4, constructsClass = PythonBuiltinClassType.PBytes)
266+
@Builtin(name = BYTES, minNumOfPositionalArgs = 1, parameterNames = {"$self", "source", "encoding", "errors"}, constructsClass = PythonBuiltinClassType.PBytes)
267+
@ArgumentClinic(name = "encoding", customConversion = "createExpectStringNodeEncoding")
268+
@ArgumentClinic(name = "errors", customConversion = "createExpectStringNodeErrors")
262269
@GenerateNodeFactory
263-
public abstract static class BytesNode extends PythonBuiltinNode {
264-
@Specialization
265-
public Object createBytes(VirtualFrame frame, Object cls, Object source, Object encoding, Object errors,
266-
@Cached ConvertToByteObjectBytesNode toBytesNode) {
267-
return factory().createBytes(cls, toBytesNode.execute(frame, source, encoding, errors));
270+
public abstract static class BytesNode extends PythonQuaternaryClinicBuiltinNode {
271+
272+
@Override
273+
protected ArgumentClinicProvider getArgumentClinic() {
274+
return BuiltinConstructorsClinicProviders.BytesNodeClinicProviderGen.INSTANCE;
275+
}
276+
277+
public static BytesNodes.ExpectStringNode createExpectStringNodeEncoding() {
278+
return BytesNodesFactory.ExpectStringNodeGen.create(2, "bytes()");
279+
}
280+
281+
public static BytesNodes.ExpectStringNode createExpectStringNodeErrors() {
282+
return BytesNodesFactory.ExpectStringNodeGen.create(3, "bytes()");
283+
}
284+
285+
@SuppressWarnings("unused")
286+
@Specialization(guards = "isNoValue(source)")
287+
public PBytes byteDone(VirtualFrame frame, Object cls, PNone source, PNone encoding, PNone errors) {
288+
return factory().createBytes(cls, PythonUtils.EMPTY_BYTE_ARRAY);
289+
}
290+
291+
@Specialization(guards = "!isNone(source)")
292+
public PBytes doInit(VirtualFrame frame, Object cls, Object source, Object encoding, Object errors,
293+
@Cached BytesNodes.BytesInitNode toBytesNode) {
294+
return factory().createBytes(cls, new ByteSequenceStorage(toBytesNode.execute(frame, source, encoding, errors)));
295+
}
296+
297+
@Specialization(guards = "isNone(source)")
298+
public PBytes sourceNone(Object cls, Object source, @SuppressWarnings("unused") Object encoding, @SuppressWarnings("unused") Object errors) {
299+
throw raise(TypeError, ErrorMessages.CANNOT_CONVERT_P_OBJ_TO_S, source, cls);
268300
}
269301
}
270302

271-
// bytearray([source[, encoding[, errors]]])
272-
@Builtin(name = BYTEARRAY, minNumOfPositionalArgs = 1, maxNumOfPositionalArgs = 4, constructsClass = PythonBuiltinClassType.PByteArray)
303+
@Builtin(name = BYTEARRAY, minNumOfPositionalArgs = 1, takesVarArgs = true, takesVarKeywordArgs = true, constructsClass = PythonBuiltinClassType.PByteArray)
273304
@GenerateNodeFactory
274305
@TypeSystemReference(PythonArithmeticTypes.class)
275306
public abstract static class ByteArrayNode extends PythonBuiltinNode {
276307
@Specialization
277-
public Object createByteArray(Object cls, @SuppressWarnings("unused") Object source, @SuppressWarnings("unused") Object encoding, @SuppressWarnings("unused") Object errors) {
308+
public PByteArray setEmpty(Object cls, @SuppressWarnings("unused") Object arg) {
278309
// data filled in subsequent __init__ call - see BytesBuiltins.InitNode
279310
return factory().createByteArray(cls, PythonUtils.EMPTY_BYTE_ARRAY);
280311
}

0 commit comments

Comments
 (0)