Skip to content

Commit bc4ebcc

Browse files
committed
[GR-23268] Fixes for test_unicode, part 5
PullRequest: graalpython/1293
2 parents 6d897ae + 5c0f38e commit bc4ebcc

File tree

21 files changed

+219
-166
lines changed

21 files changed

+219
-166
lines changed

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,16 @@
1313
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_additional_rsplit
1414
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_additional_split
1515
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_ascii
16+
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_bug1001011
1617
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_bytes_comparison
1718
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_capitalize
1819
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_capitalize_nonascii
1920
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_case_operation_overflow
2021
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_casefold
2122
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_center
2223
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_codecs
24+
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_codecs_charmap
25+
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_codecs_errors
2326
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_codecs_idna
2427
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_codecs_utf7
2528
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_codecs_utf8
@@ -30,12 +33,14 @@
3033
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_constructor_defaults
3134
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_constructor_keyword_args
3235
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_contains
36+
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_conversion
3337
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_count
3438
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_endswith
3539
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_expandtabs
3640
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_expandtabs_optimization
3741
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_expandtabs_overflows_gracefully
3842
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_extended_getslice
43+
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_find
3944
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_find_etc_raise_correct_error_messages
4045
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_fixtype
4146
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_floatformatting
@@ -47,6 +52,7 @@
4752
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_format_huge_width
4853
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_format_map
4954
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_format_subclass
55+
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_formatting
5056
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_formatting_c_limits
5157
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_formatting_huge_precision
5258
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_formatting_huge_precision_c_limits
@@ -55,8 +61,10 @@
5561
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_free_after_iterating
5662
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_getnewargs
5763
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_hash
64+
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_index
5865
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_inplace_rewrites
5966
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_invalid_cb_for_2bytes_seq
67+
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_invalid_cb_for_3bytes_seq
6068
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_invalid_cb_for_4bytes_seq
6169
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_invalid_start_byte
6270
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_isalnum
@@ -87,6 +95,7 @@
8795
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_partition
8896
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_printable_repr
8997
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_printing
98+
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_raiseMemError
9099
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_replace
91100
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_replace_id
92101
*graalpython.lib-python.3.test.test_unicode.UnicodeTest.test_replace_overflow

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

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1843,6 +1843,7 @@ public abstract static class StrNode extends PythonBuiltinNode {
18431843

18441844
@CompilationFinal private ConditionProfile isStringProfile;
18451845
@CompilationFinal private ConditionProfile isPStringProfile;
1846+
@Child private CastToJavaStringNode castToJavaStringNode;
18461847

18471848
public final Object executeWith(VirtualFrame frame, Object arg) {
18481849
return executeWith(frame, PythonBuiltinClassType.PString, arg, PNone.NO_VALUE, PNone.NO_VALUE);
@@ -1866,8 +1867,17 @@ Object strOneArg(Object strClass, Object obj, @SuppressWarnings("unused") PNone
18661867
return asPString(strClass, (String) result);
18671868
}
18681869

1869-
// PythonObjectLibrary guarantees that the returned object is an instanceof of 'str'
1870-
return result;
1870+
if (isPrimitiveProfile.profileClass(strClass, PythonBuiltinClassType.PString)) {
1871+
// PythonObjectLibrary guarantees that the returned object is an instanceof of 'str'
1872+
return result;
1873+
} else {
1874+
try {
1875+
return asPString(strClass, getCastToJavaStringNode().execute(result));
1876+
} catch (CannotCastException e) {
1877+
CompilerDirectives.transferToInterpreterAndInvalidate();
1878+
throw new IllegalStateException("asPstring result not castable to String");
1879+
}
1880+
}
18711881
}
18721882

18731883
@Specialization(guards = {"!isNativeClass(strClass)", "!isNoValue(encoding) || !isNoValue(errors)"}, limit = "3")
@@ -1947,6 +1957,14 @@ private ConditionProfile getIsPStringProfile() {
19471957
return isPStringProfile;
19481958
}
19491959

1960+
private CastToJavaStringNode getCastToJavaStringNode() {
1961+
if (castToJavaStringNode == null) {
1962+
CompilerDirectives.transferToInterpreterAndInvalidate();
1963+
castToJavaStringNode = insert(CastToJavaStringNode.create());
1964+
}
1965+
return castToJavaStringNode;
1966+
}
1967+
19501968
public static StrNode create() {
19511969
return BuiltinConstructorsFactory.StrNodeFactory.create(null);
19521970
}

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -626,12 +626,12 @@ Object mod(PBytesLike self, Object right,
626626
@Cached("create(__GETITEM__)") LookupAndCallBinaryNode getItemNode,
627627
@Cached TupleBuiltins.GetItemNode getTupleItemNode,
628628
@CachedContext(PythonLanguage.class) PythonContext context) {
629-
byte[] data = format(getBytes(selfLib, self), right, getItemNode, getTupleItemNode, context);
629+
byte[] data = format(getBytes(selfLib, self), right, getItemNode, getTupleItemNode, context, getRaiseNode());
630630
return create.execute(factory(), self, data);
631631
}
632632

633-
protected static byte[] format(byte[] self, Object right, LookupAndCallBinaryNode getItemNode, TupleBuiltins.GetItemNode getTupleItemNode, PythonContext context) {
634-
BytesFormatProcessor formatter = new BytesFormatProcessor(context.getCore(), getItemNode, getTupleItemNode, self);
633+
protected static byte[] format(byte[] self, Object right, LookupAndCallBinaryNode getItemNode, TupleBuiltins.GetItemNode getTupleItemNode, PythonContext context, PRaiseNode raiseNode) {
634+
BytesFormatProcessor formatter = new BytesFormatProcessor(context.getCore(), raiseNode, getItemNode, getTupleItemNode, self);
635635
return formatter.format(right);
636636
}
637637
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/complex/ComplexBuiltins.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@
9393
import com.oracle.graal.python.builtins.objects.object.PythonObjectLibrary;
9494
import com.oracle.graal.python.builtins.objects.tuple.PTuple;
9595
import com.oracle.graal.python.nodes.ErrorMessages;
96+
import com.oracle.graal.python.nodes.PRaiseNode;
9697
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
9798
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
9899
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode;
@@ -101,7 +102,6 @@
101102
import com.oracle.graal.python.nodes.function.builtins.clinic.ArgumentClinicProvider;
102103
import com.oracle.graal.python.nodes.truffle.PythonArithmeticTypes;
103104
import com.oracle.graal.python.nodes.util.CoerceToComplexNode;
104-
import com.oracle.graal.python.runtime.PythonCore;
105105
import com.oracle.graal.python.runtime.exception.PythonErrorType;
106106
import com.oracle.graal.python.runtime.formatting.ComplexFormatter;
107107
import com.oracle.graal.python.runtime.formatting.InternalFormat;
@@ -722,12 +722,12 @@ PNotImplemented doGeneric(Object left, Object right) {
722722
abstract static class ReprNode extends PythonUnaryBuiltinNode {
723723
@Specialization
724724
String repr(PComplex self) {
725-
return repr(self, getCore());
725+
return repr(self, getRaiseNode());
726726
}
727727

728728
@TruffleBoundary
729-
private static String repr(PComplex self, PythonCore core) {
730-
ComplexFormatter formatter = new ComplexFormatter(core, new Spec(-1, Spec.NONE));
729+
private static String repr(PComplex self, PRaiseNode raiseNode) {
730+
ComplexFormatter formatter = new ComplexFormatter(raiseNode, new Spec(-1, Spec.NONE));
731731
formatter.format(self);
732732
return formatter.pad().getResult();
733733
}
@@ -750,15 +750,14 @@ protected ArgumentClinicProvider getArgumentClinic() {
750750

751751
@Specialization(guards = "!formatString.isEmpty()")
752752
Object format(PComplex self, String formatString) {
753-
PythonCore core = getCore();
754-
InternalFormat.Spec spec = InternalFormat.fromText(core, formatString, __FORMAT__);
753+
InternalFormat.Spec spec = InternalFormat.fromText(getRaiseNode(), formatString, __FORMAT__);
755754
validateSpec(spec);
756-
return doFormat(self, spec, core);
755+
return doFormat(getRaiseNode(), self, spec);
757756
}
758757

759758
@TruffleBoundary
760-
private static Object doFormat(PComplex self, Spec spec, PythonCore core) {
761-
ComplexFormatter formatter = new ComplexFormatter(core, validateAndPrepareForFloat(spec, core, "complex"));
759+
private static Object doFormat(PRaiseNode raiseNode, PComplex self, Spec spec) {
760+
ComplexFormatter formatter = new ComplexFormatter(raiseNode, validateAndPrepareForFloat(raiseNode, spec, "complex"));
762761
formatter.format(self);
763762
return formatter.pad().getResult();
764763
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/floats/FloatBuiltins.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,6 @@
101101
import com.oracle.graal.python.nodes.object.GetClassNode;
102102
import com.oracle.graal.python.nodes.truffle.PythonArithmeticTypes;
103103
import com.oracle.graal.python.runtime.PythonContext;
104-
import com.oracle.graal.python.runtime.PythonCore;
105104
import com.oracle.graal.python.runtime.exception.PythonErrorType;
106105
import com.oracle.graal.python.runtime.formatting.FloatFormatter;
107106
import com.oracle.graal.python.runtime.formatting.InternalFormat;
@@ -142,7 +141,7 @@ abstract static class StrNode extends PythonUnaryBuiltinNode {
142141
@Specialization
143142
String str(double self) {
144143
Spec spec = new Spec(' ', '>', Spec.NONE, false, Spec.UNSPECIFIED, Spec.NONE, 0, 'r');
145-
FloatFormatter f = new FloatFormatter(getCore(), spec);
144+
FloatFormatter f = new FloatFormatter(getRaiseNode(), spec);
146145
f.setMinFracDigits(1);
147146
return doFormat(self, f);
148147
}
@@ -183,13 +182,13 @@ protected ArgumentClinicProvider getArgumentClinic() {
183182

184183
@Specialization(guards = "!formatString.isEmpty()")
185184
Object formatPF(double self, String formatString) {
186-
return doFormat(self, formatString, getCore());
185+
return doFormat(self, formatString);
187186
}
188187

189188
@TruffleBoundary
190-
private String doFormat(double self, String formatString, PythonCore core) {
191-
InternalFormat.Spec spec = InternalFormat.fromText(core, formatString, __FORMAT__);
192-
FloatFormatter formatter = new FloatFormatter(core, validateAndPrepareForFloat(spec, getCore(), "float"));
189+
private String doFormat(double self, String formatString) {
190+
InternalFormat.Spec spec = InternalFormat.fromText(getRaiseNode(), formatString, __FORMAT__);
191+
FloatFormatter formatter = new FloatFormatter(getRaiseNode(), validateAndPrepareForFloat(getRaiseNode(), spec, "float"));
193192
formatter.format(self);
194193
return formatter.pad().getResult();
195194
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/ints/IntBuiltins.java

Lines changed: 22 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,6 @@
9595
import com.oracle.graal.python.nodes.object.GetClassNode;
9696
import com.oracle.graal.python.nodes.truffle.PythonArithmeticTypes;
9797
import com.oracle.graal.python.runtime.PythonContext;
98-
import com.oracle.graal.python.runtime.PythonCore;
9998
import com.oracle.graal.python.runtime.exception.PythonErrorType;
10099
import com.oracle.graal.python.runtime.formatting.FloatFormatter;
101100
import com.oracle.graal.python.runtime.formatting.IntegerFormatter;
@@ -2565,13 +2564,13 @@ Object formatB(boolean self, String formatString) {
25652564

25662565
@Specialization(guards = "!formatString.isEmpty()")
25672566
Object formatI(int self, String formatString) {
2568-
PythonCore core = getCore();
2569-
Spec spec = getSpec(formatString, core);
2567+
PRaiseNode raiseNode = getRaiseNode();
2568+
Spec spec = getSpec(formatString, raiseNode);
25702569
if (isDoubleSpec(spec)) {
2571-
return formatDouble(core, spec, self);
2570+
return formatDouble(raiseNode, spec, self);
25722571
}
2573-
validateIntegerSpec(core, spec);
2574-
return formatInt(self, core, spec);
2572+
validateIntegerSpec(raiseNode, spec);
2573+
return formatInt(self, raiseNode, spec);
25752574
}
25762575

25772576
@Specialization(guards = "!formatString.isEmpty()")
@@ -2581,15 +2580,15 @@ Object formatL(VirtualFrame frame, long self, String formatString) {
25812580

25822581
@Specialization(guards = "!formatString.isEmpty()")
25832582
Object formatPI(VirtualFrame frame, PInt self, String formatString) {
2584-
PythonCore core = getCore();
2585-
Spec spec = getSpec(formatString, core);
2583+
PRaiseNode raiseNode = getRaiseNode();
2584+
Spec spec = getSpec(formatString, raiseNode);
25862585
if (isDoubleSpec(spec)) {
25872586
// lazy init of floatNode serves as branch profile
25882587
double doubleVal = asDouble(frame, self);
2589-
return formatDouble(core, spec, doubleVal);
2588+
return formatDouble(raiseNode, spec, doubleVal);
25902589
}
2591-
validateIntegerSpec(core, spec);
2592-
return formatPInt(self, core, spec);
2590+
validateIntegerSpec(raiseNode, spec);
2591+
return formatPInt(self, raiseNode, spec);
25932592
}
25942593

25952594
private double asDouble(VirtualFrame frame, Object self) {
@@ -2601,8 +2600,8 @@ private double asDouble(VirtualFrame frame, Object self) {
26012600
return (double) floatNode.executeWith(frame, PythonBuiltinClassType.PFloat, self);
26022601
}
26032602

2604-
private static Spec getSpec(String formatString, PythonCore core) {
2605-
Spec spec = InternalFormat.fromText(core, formatString, __FORMAT__);
2603+
private static Spec getSpec(String formatString, PRaiseNode raiseNode) {
2604+
Spec spec = InternalFormat.fromText(raiseNode, formatString, __FORMAT__);
26062605
return spec.withDefaults(Spec.NUMERIC);
26072606
}
26082607

@@ -2613,35 +2612,35 @@ private static boolean isDoubleSpec(Spec spec) {
26132612
}
26142613

26152614
@TruffleBoundary
2616-
private static String formatDouble(PythonCore core, Spec spec, double value) {
2617-
FloatFormatter formatter = new FloatFormatter(core, spec);
2615+
private static String formatDouble(PRaiseNode raiseNode, Spec spec, double value) {
2616+
FloatFormatter formatter = new FloatFormatter(raiseNode, spec);
26182617
formatter.format(value);
26192618
return formatter.pad().getResult();
26202619
}
26212620

26222621
@TruffleBoundary
2623-
private static String formatInt(int self, PythonCore core, Spec spec) {
2624-
IntegerFormatter formatter = new IntegerFormatter(core, spec);
2622+
private static String formatInt(int self, PRaiseNode raiseNode, Spec spec) {
2623+
IntegerFormatter formatter = new IntegerFormatter(raiseNode, spec);
26252624
formatter.format(self);
26262625
return formatter.pad().getResult();
26272626
}
26282627

26292628
@TruffleBoundary
2630-
private static String formatPInt(PInt self, PythonCore core, Spec spec) {
2631-
IntegerFormatter formatter = new IntegerFormatter(core, spec);
2629+
private static String formatPInt(PInt self, PRaiseNode raiseNode, Spec spec) {
2630+
IntegerFormatter formatter = new IntegerFormatter(raiseNode, spec);
26322631
formatter.format(self.getValue());
26332632
return formatter.pad().getResult();
26342633
}
26352634

2636-
private static void validateIntegerSpec(PythonCore core, Spec spec) {
2635+
private static void validateIntegerSpec(PRaiseNode raiseNode, Spec spec) {
26372636
if (Spec.specified(spec.precision)) {
2638-
throw core.raise(ValueError, ErrorMessages.PRECISION_NOT_ALLOWED_FOR_INT);
2637+
throw raiseNode.raise(ValueError, ErrorMessages.PRECISION_NOT_ALLOWED_FOR_INT);
26392638
}
26402639
if (spec.type == 'c') {
26412640
if (Spec.specified(spec.sign)) {
2642-
throw core.raise(ValueError, ErrorMessages.SIGN_NOT_ALLOWED_WITH_C_FOR_INT);
2641+
throw raiseNode.raise(ValueError, ErrorMessages.SIGN_NOT_ALLOWED_WITH_C_FOR_INT);
26432642
} else if (spec.alternate) {
2644-
throw core.raise(ValueError, ErrorMessages.ALTERNATE_NOT_ALLOWED_WITH_C_FOR_INT);
2643+
throw raiseNode.raise(ValueError, ErrorMessages.ALTERNATE_NOT_ALLOWED_WITH_C_FOR_INT);
26452644
}
26462645
}
26472646
}

0 commit comments

Comments
 (0)