|
64 | 64 | import com.oracle.graal.python.builtins.PythonBuiltins; |
65 | 65 | import com.oracle.graal.python.builtins.objects.PNone; |
66 | 66 | import com.oracle.graal.python.builtins.objects.PNotImplemented; |
| 67 | +import com.oracle.graal.python.builtins.objects.bytes.BytesNodes; |
| 68 | +import com.oracle.graal.python.builtins.objects.bytes.PIBytesLike; |
67 | 69 | import com.oracle.graal.python.builtins.objects.common.HashingStorageNodes.SetItemNode; |
68 | 70 | import com.oracle.graal.python.builtins.objects.dict.PDict; |
69 | 71 | import com.oracle.graal.python.builtins.objects.ints.PInt; |
70 | 72 | import com.oracle.graal.python.builtins.objects.iterator.PStringIterator; |
71 | 73 | import com.oracle.graal.python.builtins.objects.list.ListBuiltins.ListAppendNode; |
72 | 74 | import com.oracle.graal.python.builtins.objects.list.ListBuiltins.ListReverseNode; |
73 | 75 | import com.oracle.graal.python.builtins.objects.list.PList; |
| 76 | +import com.oracle.graal.python.builtins.objects.memoryview.PMemoryView; |
74 | 77 | import com.oracle.graal.python.builtins.objects.slice.PSlice; |
75 | 78 | import com.oracle.graal.python.builtins.objects.slice.PSlice.SliceInfo; |
76 | 79 | import com.oracle.graal.python.builtins.objects.str.StringBuiltinsFactory.SpliceNodeGen; |
@@ -751,6 +754,29 @@ public String translate(String self, PDict table, |
751 | 754 |
|
752 | 755 | return new String(translatedChars); |
753 | 756 | } |
| 757 | + |
| 758 | + private static String translateFromByteTable(String text, Object table, BytesNodes.ToBytesNode toBytesNode) { |
| 759 | + byte[] translatedChars = text.getBytes(); |
| 760 | + byte[] byteTable = toBytesNode.execute(table); |
| 761 | + for (int i = 0; i < translatedChars.length; i++) { |
| 762 | + byte original = translatedChars[i]; |
| 763 | + translatedChars[i] = byteTable[original]; |
| 764 | + } |
| 765 | + return new String(translatedChars); |
| 766 | + } |
| 767 | + |
| 768 | + @Specialization |
| 769 | + public String translate(String self, PIBytesLike table, |
| 770 | + @Cached("create()") BytesNodes.ToBytesNode getBytesNode) { |
| 771 | + return translateFromByteTable(self, table, getBytesNode); |
| 772 | + } |
| 773 | + |
| 774 | + @Specialization |
| 775 | + public String translate(String self, PMemoryView table, |
| 776 | + @Cached("create()") BytesNodes.ToBytesNode getBytesNode) { |
| 777 | + return translateFromByteTable(self, table, getBytesNode); |
| 778 | + } |
| 779 | + |
754 | 780 | } |
755 | 781 |
|
756 | 782 | protected abstract static class SpliceNode extends PNodeWithContext { |
|
0 commit comments