Skip to content

Commit ad5a4b2

Browse files
committed
Fix isPrintable for whitespace
1 parent 984db10 commit ad5a4b2

File tree

3 files changed

+19
-2
lines changed

3 files changed

+19
-2
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_replace
6868
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_replace_id
6969
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_replace_overflow
70+
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_repr
7071
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_resize
7172
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_rfind
7273
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_rindex

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/str/StringBuiltins.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1851,7 +1851,7 @@ static boolean doGeneric(Object self,
18511851
abstract static class IsPrintableNode extends PythonUnaryBuiltinNode {
18521852
@TruffleBoundary
18531853
private static boolean isPrintableChar(int i) {
1854-
return UCharacter.isPrintable(i);
1854+
return StringUtils.isPrintable(i);
18551855
}
18561856

18571857
@Specialization

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/str/StringUtils.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@
4545
import org.graalvm.nativeimage.ImageInfo;
4646

4747
import com.ibm.icu.lang.UCharacter;
48+
import com.ibm.icu.lang.UCharacterCategory;
4849
import com.ibm.icu.lang.UProperty;
4950
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
5051

@@ -242,7 +243,22 @@ public static boolean isPrintable(int codepoint) {
242243

243244
@TruffleBoundary
244245
private static boolean isPrintableICU(int codepoint) {
245-
return UCharacter.isPrintable(codepoint);
246+
// ICU's definition of printability is different from CPython, so we cannot use
247+
// UCharacter.isPrintable
248+
int category = UCharacter.getType(codepoint);
249+
switch (category) {
250+
case UCharacterCategory.CONTROL:
251+
case UCharacterCategory.FORMAT:
252+
case UCharacterCategory.SURROGATE:
253+
case UCharacterCategory.PRIVATE_USE:
254+
case UCharacterCategory.UNASSIGNED:
255+
case UCharacterCategory.LINE_SEPARATOR:
256+
case UCharacterCategory.PARAGRAPH_SEPARATOR:
257+
return false;
258+
case UCharacterCategory.SPACE_SEPARATOR:
259+
return codepoint == ' ';
260+
}
261+
return true;
246262
}
247263

248264
@TruffleBoundary

0 commit comments

Comments
 (0)