|
40 | 40 | */
|
41 | 41 | package com.oracle.graal.python.builtins.modules;
|
42 | 42 |
|
| 43 | +import static com.oracle.graal.python.builtins.objects.bytes.BytesUtils.HEXDIGITS; |
| 44 | +import static com.oracle.graal.python.builtins.objects.bytes.BytesUtils.digitValue; |
43 | 45 | import static com.oracle.graal.python.nodes.ErrorMessages.BYTESLIKE_OBJ_REQUIRED;
|
44 | 46 | import static com.oracle.graal.python.nodes.ErrorMessages.ENCODING_ERROR_WITH_CODE;
|
45 | 47 | import static com.oracle.graal.python.nodes.ErrorMessages.INVALID_ESCAPE_AT;
|
|
64 | 66 | import com.oracle.graal.python.builtins.CoreFunctions;
|
65 | 67 | import com.oracle.graal.python.builtins.PythonBuiltins;
|
66 | 68 | import com.oracle.graal.python.builtins.objects.PNone;
|
| 69 | +import com.oracle.graal.python.builtins.objects.bytes.ByteArrayBuffer; |
67 | 70 | import com.oracle.graal.python.builtins.objects.bytes.BytesUtils;
|
68 | 71 | import com.oracle.graal.python.builtins.objects.bytes.PBytes;
|
69 | 72 | import com.oracle.graal.python.builtins.objects.bytes.PBytesLike;
|
|
80 | 83 | import com.oracle.graal.python.nodes.expression.CoerceToBooleanNode;
|
81 | 84 | import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
|
82 | 85 | import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
|
83 |
| -import com.oracle.graal.python.builtins.objects.bytes.ByteArrayBuffer; |
84 | 86 | import com.oracle.graal.python.nodes.util.CannotCastException;
|
85 | 87 | import com.oracle.graal.python.nodes.util.CastToJavaStringNode;
|
86 | 88 | import com.oracle.graal.python.nodes.util.CastToJavaStringNodeGen;
|
@@ -636,25 +638,6 @@ private void handleDecodingError(TruffleDecoder encoder, String errorAction, Obj
|
636 | 638 | @Builtin(name = "escape_decode", minNumOfPositionalArgs = 1, parameterNames = {"data", "errors"})
|
637 | 639 | @GenerateNodeFactory
|
638 | 640 | abstract static class CodecsEscapeDecodeNode extends EncodeBaseNode {
|
639 |
| - private static final int[] _PyLong_DigitValue = { |
640 |
| - 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, |
641 |
| - 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, |
642 |
| - 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, |
643 |
| - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 37, 37, 37, 37, 37, 37, |
644 |
| - 37, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, |
645 |
| - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 37, 37, 37, 37, |
646 |
| - 37, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, |
647 |
| - 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 37, 37, 37, 37, |
648 |
| - 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, |
649 |
| - 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, |
650 |
| - 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, |
651 |
| - 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, |
652 |
| - 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, |
653 |
| - 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, |
654 |
| - 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, |
655 |
| - 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, |
656 |
| - }; |
657 |
| - |
658 | 641 | enum Errors {
|
659 | 642 | ERR_STRICT,
|
660 | 643 | ERR_IGNORE,
|
@@ -761,8 +744,8 @@ Object decode(Object data, String errors,
|
761 | 744 | break;
|
762 | 745 | case 'x':
|
763 | 746 | if (i + 2 < bytes.length) {
|
764 |
| - int digit1 = _PyLong_DigitValue[bytes[i + 1] & 0xff]; |
765 |
| - int digit2 = _PyLong_DigitValue[bytes[i + 2] & 0xff]; |
| 747 | + int digit1 = digitValue(bytes[i + 1]); |
| 748 | + int digit2 = digitValue(bytes[i + 2]); |
766 | 749 | if (digit1 < 16 && digit2 < 16) {
|
767 | 750 | buffer.append((digit1 << 4) + digit2);
|
768 | 751 | i += 2;
|
@@ -810,8 +793,6 @@ private static boolean isHexDigit(char digit) {
|
810 | 793 | @Builtin(name = "escape_encode", minNumOfPositionalArgs = 1, parameterNames = {"data", "errors"})
|
811 | 794 | @GenerateNodeFactory
|
812 | 795 | abstract static class CodecsEscapeEncodeNode extends EncodeBaseNode {
|
813 |
| - private static final String Py_hexdigits = "0123456789abcdef"; |
814 |
| - |
815 | 796 | @Specialization(limit = "getCallSiteInlineCacheMaxDepth()")
|
816 | 797 | Object encode(PBytes data, @SuppressWarnings("unused") PNone errors,
|
817 | 798 | @CachedLibrary(value = "data") PythonObjectLibrary pol) {
|
@@ -844,8 +825,8 @@ Object encode(PBytes data, @SuppressWarnings("unused") String errors,
|
844 | 825 | } else if (c < ' ' || c >= 0x7f) {
|
845 | 826 | buffer.append('\\');
|
846 | 827 | buffer.append('x');
|
847 |
| - buffer.append(Py_hexdigits.charAt((c & 0xf0) >> 4)); |
848 |
| - buffer.append(Py_hexdigits.charAt(c & 0xf)); |
| 828 | + buffer.append(HEXDIGITS[(c & 0xf0) >> 4]); |
| 829 | + buffer.append(HEXDIGITS[c & 0xf]); |
849 | 830 | } else {
|
850 | 831 | buffer.append(c);
|
851 | 832 | }
|
|
0 commit comments