Skip to content

Commit 6e49892

Browse files
committed
intrinsified bytes
1 parent 1c6243e commit 6e49892

File tree

5 files changed

+64
-75
lines changed

5 files changed

+64
-75
lines changed

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -307,7 +307,6 @@ private static String[] initializeCoreFiles() {
307307
"faulthandler",
308308
"base_exception",
309309
PythonCextBuiltins.PYTHON_CEXT,
310-
"bytes",
311310
"bytearray",
312311
"unicodedata",
313312
"_locale",

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

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1046,8 +1046,8 @@ private static Object get(PythonContext ctx, String name) {
10461046
}
10471047

10481048
@Builtin(name = ENCODE, minNumOfPositionalArgs = 1, parameterNames = {"obj", "encoding", "errors"})
1049-
@ArgumentClinic(name = "encoding", conversion = ArgumentClinic.ClinicConversion.String, defaultValue = "\"utf-8\"", useDefaultForNone = true)
1050-
@ArgumentClinic(name = "errors", conversion = ArgumentClinic.ClinicConversion.String, defaultValue = "\"strict\"", useDefaultForNone = true)
1049+
@ArgumentClinic(name = "encoding", conversion = ArgumentClinic.ClinicConversion.String, defaultValue = "\"utf-8\"")
1050+
@ArgumentClinic(name = "errors", conversion = ArgumentClinic.ClinicConversion.String, defaultValue = "\"strict\"")
10511051
@GenerateNodeFactory
10521052
public abstract static class EncodeNode extends PythonTernaryClinicBuiltinNode {
10531053

@@ -1075,10 +1075,12 @@ Object encode(VirtualFrame frame, Object obj, String encoding, String errors,
10751075
}
10761076

10771077
@Builtin(name = DECODE, minNumOfPositionalArgs = 1, parameterNames = {"obj", "encoding", "errors"})
1078-
@ArgumentClinic(name = "encoding", conversion = ArgumentClinic.ClinicConversion.String, defaultValue = "\"utf-8\"", useDefaultForNone = true)
1079-
@ArgumentClinic(name = "errors", conversion = ArgumentClinic.ClinicConversion.String, defaultValue = "\"strict\"", useDefaultForNone = true)
1078+
@ArgumentClinic(name = "encoding", conversion = ArgumentClinic.ClinicConversion.String, defaultValue = "\"utf-8\"")
1079+
@ArgumentClinic(name = "errors", conversion = ArgumentClinic.ClinicConversion.String, defaultValue = "\"strict\"")
10801080
@GenerateNodeFactory
1081-
abstract static class DecodeNode extends PythonTernaryClinicBuiltinNode {
1081+
public abstract static class DecodeNode extends PythonTernaryClinicBuiltinNode {
1082+
1083+
public abstract Object executeWithStrings(VirtualFrame frame, Object obj, String encoding, String errors);
10821084

10831085
@Override
10841086
protected ArgumentClinicProvider getArgumentClinic() {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/bytes/BytesBuiltins.java

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,11 +77,15 @@
7777
import com.oracle.graal.python.builtins.Python3Core;
7878
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
7979
import com.oracle.graal.python.builtins.PythonBuiltins;
80+
import com.oracle.graal.python.builtins.modules.BuiltinFunctions.IsInstanceNode;
81+
import com.oracle.graal.python.builtins.modules.CodecsModuleBuiltins;
8082
import com.oracle.graal.python.builtins.modules.SysModuleBuiltins;
8183
import com.oracle.graal.python.builtins.objects.PNone;
8284
import com.oracle.graal.python.builtins.objects.PNotImplemented;
8385
import com.oracle.graal.python.builtins.objects.buffer.PythonBufferAccessLibrary;
8486
import com.oracle.graal.python.builtins.objects.buffer.PythonBufferAcquireLibrary;
87+
import com.oracle.graal.python.builtins.objects.bytes.BytesBuiltinsFactory.LStripNodeFactory;
88+
import com.oracle.graal.python.builtins.objects.bytes.BytesBuiltinsFactory.RStripNodeFactory;
8589
import com.oracle.graal.python.builtins.objects.common.IndexNodes;
8690
import com.oracle.graal.python.builtins.objects.common.SequenceNodes;
8791
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
@@ -99,7 +103,9 @@
99103
import com.oracle.graal.python.lib.PyNumberAsSizeNode;
100104
import com.oracle.graal.python.lib.PyNumberIndexNode;
101105
import com.oracle.graal.python.lib.PyObjectGetItem;
106+
import static com.oracle.graal.python.nodes.BuiltinNames.DECODE;
102107
import com.oracle.graal.python.nodes.ErrorMessages;
108+
import static com.oracle.graal.python.nodes.ErrorMessages.DECODER_RETURNED_P_INSTEAD_OF_BYTES;
103109
import com.oracle.graal.python.nodes.PRaiseNode;
104110
import com.oracle.graal.python.nodes.SpecialAttributeNames;
105111
import com.oracle.graal.python.nodes.SpecialMethodNames;
@@ -264,6 +270,48 @@ public static Object repr(PBytes self,
264270
}
265271
}
266272

273+
@Builtin(name = DECODE, minNumOfPositionalArgs = 1, parameterNames = {"$self", "encoding", "errors"}, doc = "Decode the bytes using the codec registered for encoding.\n\n" +
274+
"encoding\n" +
275+
" The encoding with which to decode the bytes.\n" +
276+
"errors\n" +
277+
" The error handling scheme to use for the handling of decoding errors.\n" +
278+
" The default is 'strict' meaning that decoding errors raise a\n" +
279+
" UnicodeDecodeError. Other possible values are 'ignore' and 'replace'\n" +
280+
" as well as any other name registered with codecs.register_error that\n" +
281+
" can handle UnicodeDecodeErrors.")
282+
@ArgumentClinic(name = "encoding", conversion = ArgumentClinic.ClinicConversion.String, defaultValue = "\"utf-8\"")
283+
@ArgumentClinic(name = "errors", conversion = ArgumentClinic.ClinicConversion.String, defaultValue = "\"strict\"")
284+
@GenerateNodeFactory
285+
abstract static class DecodeNode extends PythonTernaryClinicBuiltinNode {
286+
287+
@Override
288+
protected ArgumentClinicProvider getArgumentClinic() {
289+
return BytesBuiltinsClinicProviders.DecodeNodeClinicProviderGen.INSTANCE;
290+
}
291+
292+
@Specialization
293+
public Object decode(VirtualFrame frame, PBytesLike self, String encoding, String errors,
294+
@Cached CodecsModuleBuiltins.DecodeNode decodeNode,
295+
@Cached IsInstanceNode isInstanceNode) {
296+
Object result = decodeNode.executeWithStrings(frame, self, encoding, errors);
297+
if (!isInstanceNode.executeWith(frame, result, PythonBuiltinClassType.PString)) {
298+
throw raise(TypeError, DECODER_RETURNED_P_INSTEAD_OF_BYTES, encoding, result);
299+
}
300+
return result;
301+
}
302+
}
303+
304+
@Builtin(name = "strip", minNumOfPositionalArgs = 1, parameterNames = {"$self", "what"})
305+
@GenerateNodeFactory
306+
abstract static class StripNode extends PythonBinaryBuiltinNode {
307+
@Specialization
308+
public Object strip(VirtualFrame frame, PBytesLike self, Object what,
309+
@Cached LStripNode lstripNode,
310+
@Cached RStripNode rstripNode) {
311+
return rstripNode.execute(frame, lstripNode.execute(frame, self, what), what);
312+
}
313+
}
314+
267315
// bytes.translate(table, delete=b'')
268316
@Builtin(name = "translate", minNumOfPositionalArgs = 2, parameterNames = {"self", "table", "delete"})
269317
@GenerateNodeFactory
@@ -2235,6 +2283,10 @@ protected int findIndex(byte[] bs, byte[] stripBs, int stripBsLen) {
22352283
@GenerateNodeFactory
22362284
abstract static class LStripNode extends AStripNode {
22372285

2286+
static LStripNode create() {
2287+
return LStripNodeFactory.create();
2288+
}
2289+
22382290
@Override
22392291
protected byte[] getResultBytes(byte[] bs, int i) {
22402292
byte[] out;
@@ -2268,6 +2320,10 @@ int start(byte[] bs) {
22682320
@GenerateNodeFactory
22692321
abstract static class RStripNode extends AStripNode {
22702322

2323+
static RStripNode create() {
2324+
return RStripNodeFactory.create();
2325+
}
2326+
22712327
@Override
22722328
protected byte[] getResultBytes(byte[] bs, int i) {
22732329
byte[] out;

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/nodes/ErrorMessages.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@ public abstract class ErrorMessages {
116116
public static final String CALLING_ARG_CONVERTER_FAIL_UNEXPECTED_RETURN = "calling argument converter failed; unexpected return value %s";
117117
public static final String CALLING_NATIVE_FUNC_EXPECTED_ARGS = "Calling native function %s expected %d arguments but got %d.";
118118
public static final String CALLING_NATIVE_FUNC_FAILED = "Calling native function %s failed: %m";
119+
public static final String DECODER_RETURNED_P_INSTEAD_OF_BYTES = "'%s' decoder returned '%p' instead of 'str'; use codecs.decode() to decode to arbitrary types";
119120
public static final String ENCODER_RETURNED_P_INSTEAD_OF_BYTES = "'%s' encoder returned '%p' instead of 'bytes'; use codecs.encode() to encode to arbitrary types";
120121
public static final String EXPECTED_D_ARGS = "expected %d arguments";
121122
public static final String CAN_ONLY_ASSIGN_S_TO_S_S_NOT_P = "can only assign %s to %s.%s, not %p";

graalpython/lib-graalpython/bytes.py

Lines changed: 0 additions & 69 deletions
This file was deleted.

0 commit comments

Comments
 (0)