|
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