Skip to content

Commit e0a996a

Browse files
committed
[GR-19925] Remove implicit PString -> String cast
PullRequest: graalpython/1677
2 parents 9590635 + c909974 commit e0a996a

File tree

8 files changed

+125
-88
lines changed

8 files changed

+125
-88
lines changed

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

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,6 @@
225225
import com.oracle.graal.python.nodes.object.GetClassNode;
226226
import com.oracle.graal.python.nodes.object.IsBuiltinClassProfile;
227227
import com.oracle.graal.python.nodes.subscript.SliceLiteralNode;
228-
import com.oracle.graal.python.nodes.truffle.PythonArithmeticTypes;
229228
import com.oracle.graal.python.nodes.util.CannotCastException;
230229
import com.oracle.graal.python.nodes.util.CastToJavaIntExactNode;
231230
import com.oracle.graal.python.nodes.util.CastToJavaStringNode;
@@ -258,7 +257,6 @@
258257
import com.oracle.truffle.api.dsl.ReportPolymorphism;
259258
import com.oracle.truffle.api.dsl.ReportPolymorphism.Megamorphic;
260259
import com.oracle.truffle.api.dsl.Specialization;
261-
import com.oracle.truffle.api.dsl.TypeSystemReference;
262260
import com.oracle.truffle.api.frame.VirtualFrame;
263261
import com.oracle.truffle.api.interop.InteropLibrary;
264262
import com.oracle.truffle.api.interop.UnsupportedMessageException;
@@ -345,7 +343,6 @@ protected static boolean hasByteAttr(Object object, LookupAttributeInMRONode loo
345343

346344
@Builtin(name = BYTEARRAY, minNumOfPositionalArgs = 1, takesVarArgs = true, takesVarKeywordArgs = true, constructsClass = PythonBuiltinClassType.PByteArray)
347345
@GenerateNodeFactory
348-
@TypeSystemReference(PythonArithmeticTypes.class)
349346
public abstract static class ByteArrayNode extends PythonBuiltinNode {
350347
@Specialization
351348
public PByteArray setEmpty(Object cls, @SuppressWarnings("unused") Object arg) {
@@ -2222,7 +2219,6 @@ public PFunction function(Object cls, Object method_def, Object def, Object name
22222219
// type(object, bases, dict)
22232220
@Builtin(name = TYPE, minNumOfPositionalArgs = 2, maxNumOfPositionalArgs = 4, takesVarKeywordArgs = true, constructsClass = PythonBuiltinClassType.PythonClass)
22242221
@GenerateNodeFactory
2225-
@TypeSystemReference(PythonArithmeticTypes.class)
22262222
public abstract static class TypeNode extends PythonBuiltinNode {
22272223
private static final long SIZEOF_PY_OBJECT_PTR = Long.BYTES;
22282224

@@ -2929,7 +2925,6 @@ private ForeignCallContext ensureForeignCallContext() {
29292925
"\n" +
29302926
"The name must be a string; the optional doc argument can have any type.")
29312927
@GenerateNodeFactory
2932-
@TypeSystemReference(PythonArithmeticTypes.class)
29332928
public abstract static class ModuleNode extends PythonBuiltinNode {
29342929
@Specialization
29352930
@SuppressWarnings("unused")

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

Lines changed: 24 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
import java.util.logging.Level;
6868

6969
import com.oracle.graal.python.PythonLanguage;
70+
import com.oracle.graal.python.annotations.ArgumentClinic;
7071
import com.oracle.graal.python.builtins.Builtin;
7172
import com.oracle.graal.python.builtins.CoreFunctions;
7273
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
@@ -91,7 +92,6 @@
9192
import com.oracle.graal.python.builtins.modules.ExternalFunctionNodes.SetAttrFuncRootNode;
9293
import com.oracle.graal.python.builtins.modules.PythonCextBuiltinsFactory.CheckInquiryResultNodeGen;
9394
import com.oracle.graal.python.builtins.modules.PythonCextBuiltinsFactory.CheckIterNextResultNodeGen;
94-
import com.oracle.graal.python.builtins.modules.PythonCextBuiltinsFactory.CreateFunctionNodeFactory;
9595
import com.oracle.graal.python.builtins.modules.PythonCextBuiltinsFactory.DefaultCheckFunctionResultNodeGen;
9696
import com.oracle.graal.python.builtins.objects.PNone;
9797
import com.oracle.graal.python.builtins.objects.PythonAbstractObject;
@@ -233,11 +233,12 @@
233233
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
234234
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryBuiltinNode;
235235
import com.oracle.graal.python.nodes.function.builtins.PythonQuaternaryBuiltinNode;
236+
import com.oracle.graal.python.nodes.function.builtins.PythonQuaternaryClinicBuiltinNode;
236237
import com.oracle.graal.python.nodes.function.builtins.PythonTernaryBuiltinNode;
237238
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
238239
import com.oracle.graal.python.nodes.function.builtins.PythonVarargsBuiltinNode;
240+
import com.oracle.graal.python.nodes.function.builtins.clinic.ArgumentClinicProvider;
239241
import com.oracle.graal.python.nodes.object.GetClassNode;
240-
import com.oracle.graal.python.nodes.truffle.PythonArithmeticTypes;
241242
import com.oracle.graal.python.nodes.truffle.PythonTypes;
242243
import com.oracle.graal.python.nodes.util.CannotCastException;
243244
import com.oracle.graal.python.nodes.util.CastToByteNode;
@@ -412,7 +413,6 @@ Object run(Object obj,
412413

413414
@Builtin(name = "PyTruffle_Type", minNumOfPositionalArgs = 1)
414415
@GenerateNodeFactory
415-
@TypeSystemReference(PythonArithmeticTypes.class)
416416
abstract static class PyTruffle_Type extends NativeBuiltin {
417417

418418
private static final String[] LOOKUP_MODULES = new String[]{
@@ -423,7 +423,8 @@ abstract static class PyTruffle_Type extends NativeBuiltin {
423423

424424
@Specialization
425425
@TruffleBoundary
426-
Object doI(String typeName) {
426+
Object doI(Object typeNameObject) {
427+
String typeName = CastToJavaStringNode.getUncached().execute(typeNameObject);
427428
PythonCore core = getCore();
428429
for (PythonBuiltinClassType type : PythonBuiltinClassType.VALUES) {
429430
if (type.getName().equals(typeName)) {
@@ -499,7 +500,6 @@ protected static SequenceStorageNodes.SetItemNode createSetItem() {
499500

500501
@Builtin(name = "CreateBuiltinMethod", minNumOfPositionalArgs = 2)
501502
@GenerateNodeFactory
502-
@TypeSystemReference(PythonArithmeticTypes.class)
503503
abstract static class CreateBuiltinMethodNode extends PythonBuiltinNode {
504504
@Specialization
505505
@TruffleBoundary
@@ -508,10 +508,14 @@ Object runWithoutCWrapper(PBuiltinFunction descriptor, Object self) {
508508
}
509509
}
510510

511-
@Builtin(name = "CreateFunction", minNumOfPositionalArgs = 2, maxNumOfPositionalArgs = 4)
511+
@Builtin(name = "CreateFunction", minNumOfPositionalArgs = 2, parameterNames = {"name", "callable", "wrapper", "type"})
512+
@ArgumentClinic(name = "name", conversion = ArgumentClinic.ClinicConversion.String)
512513
@GenerateNodeFactory
513-
@TypeSystemReference(PythonArithmeticTypes.class)
514-
abstract static class CreateFunctionNode extends PythonBuiltinNode {
514+
abstract static class CreateFunctionNode extends PythonQuaternaryClinicBuiltinNode {
515+
@Override
516+
protected ArgumentClinicProvider getArgumentClinic() {
517+
return PythonCextBuiltinsClinicProviders.CreateFunctionNodeClinicProviderGen.INSTANCE;
518+
}
515519

516520
abstract Object execute(String name, Object callable, Object wrapper, Object type);
517521

@@ -612,11 +616,6 @@ static boolean isNativeWrapper(Object obj) {
612616
static boolean isDecoratedManagedFunction(Object obj) {
613617
return obj instanceof PyCFunctionDecorator && CApiGuards.isNativeWrapper(((PyCFunctionDecorator) obj).getNativeFunction());
614618
}
615-
616-
public static CreateFunctionNode create() {
617-
return CreateFunctionNodeFactory.create(null);
618-
}
619-
620619
}
621620

622621
@Builtin(name = "PyErr_Restore", minNumOfPositionalArgs = 3)
@@ -1419,24 +1418,25 @@ private String decodeUTF32(byte[] data, int size, String errors, int byteorder)
14191418

14201419
@Builtin(name = "PyTruffle_Unicode_AsWideChar", minNumOfPositionalArgs = 4)
14211420
@GenerateNodeFactory
1422-
@TypeSystemReference(PythonArithmeticTypes.class)
14231421
abstract static class PyTruffle_Unicode_AsWideChar extends NativeUnicodeBuiltin {
14241422
@Child private UnicodeAsWideCharNode asWideCharNode;
14251423

14261424
@Specialization
1427-
Object doUnicode(VirtualFrame frame, String s, long elementSize, @SuppressWarnings("unused") PNone elements, Object errorMarker) {
1428-
return doUnicode(frame, s, elementSize, -1, errorMarker);
1425+
Object doUnicode(VirtualFrame frame, Object s, long elementSize, @SuppressWarnings("unused") PNone elements, Object errorMarker,
1426+
@Shared("castStr") @Cached CastToJavaStringNode castStr) {
1427+
return doUnicode(frame, s, elementSize, -1, errorMarker, castStr);
14291428
}
14301429

14311430
@Specialization
1432-
Object doUnicode(VirtualFrame frame, String s, long elementSize, long elements, Object errorMarker) {
1431+
Object doUnicode(VirtualFrame frame, Object s, long elementSize, long elements, Object errorMarker,
1432+
@Shared("castStr") @Cached CastToJavaStringNode castStr) {
14331433
try {
14341434
if (asWideCharNode == null) {
14351435
CompilerDirectives.transferToInterpreterAndInvalidate();
14361436
asWideCharNode = insert(UnicodeAsWideCharNodeGen.create());
14371437
}
14381438

1439-
PBytes wchars = asWideCharNode.executeLittleEndian(s, elementSize, elements);
1439+
PBytes wchars = asWideCharNode.executeLittleEndian(castStr.execute(s), elementSize, elements);
14401440
if (wchars != null) {
14411441
return wchars;
14421442
} else {
@@ -1449,18 +1449,20 @@ Object doUnicode(VirtualFrame frame, String s, long elementSize, long elements,
14491449
}
14501450

14511451
@Specialization
1452-
Object doUnicode(VirtualFrame frame, String s, PInt elementSize, @SuppressWarnings("unused") PNone elements, Object errorMarker) {
1452+
Object doUnicode(VirtualFrame frame, String s, PInt elementSize, @SuppressWarnings("unused") PNone elements, Object errorMarker,
1453+
@Shared("castStr") @Cached CastToJavaStringNode castStr) {
14531454
try {
1454-
return doUnicode(frame, s, elementSize.longValueExact(), -1, errorMarker);
1455+
return doUnicode(frame, s, elementSize.longValueExact(), -1, errorMarker, castStr);
14551456
} catch (OverflowException e) {
14561457
return raiseNative(frame, errorMarker, PythonErrorType.ValueError, ErrorMessages.INVALID_PARAMS);
14571458
}
14581459
}
14591460

14601461
@Specialization
1461-
Object doUnicode(VirtualFrame frame, String s, PInt elementSize, PInt elements, Object errorMarker) {
1462+
Object doUnicode(VirtualFrame frame, String s, PInt elementSize, PInt elements, Object errorMarker,
1463+
@Shared("castStr") @Cached CastToJavaStringNode castStr) {
14621464
try {
1463-
return doUnicode(frame, s, elementSize.longValueExact(), elements.longValueExact(), errorMarker);
1465+
return doUnicode(frame, s, elementSize.longValueExact(), elements.longValueExact(), errorMarker, castStr);
14641466
} catch (OverflowException e) {
14651467
return raiseNative(frame, errorMarker, PythonErrorType.ValueError, ErrorMessages.INVALID_PARAMS);
14661468
}

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

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,12 @@
4444
import java.util.TimeZone;
4545

4646
import com.oracle.graal.python.PythonLanguage;
47+
import com.oracle.graal.python.annotations.ArgumentClinic;
4748
import com.oracle.graal.python.builtins.Builtin;
4849
import com.oracle.graal.python.builtins.CoreFunctions;
4950
import com.oracle.graal.python.builtins.PythonBuiltinClassType;
5051
import com.oracle.graal.python.builtins.PythonBuiltins;
52+
import com.oracle.graal.python.builtins.modules.TimeModuleBuiltinsClinicProviders.StrfTimeNodeClinicProviderGen;
5153
import com.oracle.graal.python.builtins.objects.PNone;
5254
import com.oracle.graal.python.builtins.objects.common.SequenceNodes.GetObjectArrayNode;
5355
import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
@@ -62,7 +64,9 @@
6264
import com.oracle.graal.python.nodes.PRaiseNode;
6365
import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
6466
import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
67+
import com.oracle.graal.python.nodes.function.builtins.PythonBinaryClinicBuiltinNode;
6568
import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
69+
import com.oracle.graal.python.nodes.function.builtins.clinic.ArgumentClinicProvider;
6670
import com.oracle.graal.python.nodes.truffle.PythonArithmeticTypes;
6771
import com.oracle.graal.python.nodes.util.CastToJavaIntExactNode;
6872
import com.oracle.graal.python.runtime.PythonCore;
@@ -73,7 +77,6 @@
7377
import com.oracle.truffle.api.TruffleOptions;
7478
import com.oracle.truffle.api.dsl.Cached;
7579
import com.oracle.truffle.api.dsl.Cached.Shared;
76-
import com.oracle.truffle.api.dsl.Fallback;
7780
import com.oracle.truffle.api.dsl.GenerateNodeFactory;
7881
import com.oracle.truffle.api.dsl.NodeFactory;
7982
import com.oracle.truffle.api.dsl.Specialization;
@@ -483,10 +486,14 @@ private static void doSleep(double seconds, double deadline) {
483486
}
484487

485488
// time.strftime(format[, t])
486-
@Builtin(name = "strftime", minNumOfPositionalArgs = 1, maxNumOfPositionalArgs = 2)
489+
@Builtin(name = "strftime", minNumOfPositionalArgs = 1, parameterNames = {"format", "time"})
490+
@ArgumentClinic(name = "format", conversion = ArgumentClinic.ClinicConversion.String)
487491
@GenerateNodeFactory
488-
@TypeSystemReference(PythonArithmeticTypes.class)
489-
public abstract static class StrfTimeNode extends PythonBuiltinNode {
492+
public abstract static class StrfTimeNode extends PythonBinaryClinicBuiltinNode {
493+
@Override
494+
protected ArgumentClinicProvider getArgumentClinic() {
495+
return StrfTimeNodeClinicProviderGen.INSTANCE;
496+
}
490497

491498
private static Object castToPInt(Object obj, PythonObjectLibrary asPIntLib, PRaiseNode raise) {
492499
if (asPIntLib.canBePInt(obj)) {
@@ -827,11 +834,6 @@ public String formatTime(String format, PTuple time,
827834
public String formatTime(@SuppressWarnings("unused") String format, @SuppressWarnings("unused") Object time) {
828835
throw raise(PythonBuiltinClassType.TypeError, ErrorMessages.TUPLE_OR_STRUCT_TIME_ARG_REQUIRED);
829836
}
830-
831-
@Fallback
832-
public String formatTime(Object format, @SuppressWarnings("unused") Object time) {
833-
throw raise(PythonBuiltinClassType.TypeError, ErrorMessages.ARG_D_MUST_BE_S_NOT_P, "strftime()", 1, "str", format);
834-
}
835837
}
836838

837839
@Builtin(name = "mktime", minNumOfPositionalArgs = 1, doc = "mktime(tuple) -> floating point number\n\n" +

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

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,6 @@
8686
import com.oracle.graal.python.nodes.control.GetNextNode;
8787
import com.oracle.graal.python.nodes.function.builtins.clinic.ArgumentCastNode;
8888
import com.oracle.graal.python.nodes.object.IsBuiltinClassProfile;
89-
import com.oracle.graal.python.nodes.truffle.PythonArithmeticTypes;
9089
import com.oracle.graal.python.nodes.util.CastToByteNode;
9190
import com.oracle.graal.python.nodes.util.CastToJavaByteNode;
9291
import com.oracle.graal.python.nodes.util.CastToJavaStringNode;
@@ -106,7 +105,6 @@
106105
import com.oracle.truffle.api.dsl.GenerateUncached;
107106
import com.oracle.truffle.api.dsl.ImportStatic;
108107
import com.oracle.truffle.api.dsl.Specialization;
109-
import com.oracle.truffle.api.dsl.TypeSystemReference;
110108
import com.oracle.truffle.api.frame.VirtualFrame;
111109
import com.oracle.truffle.api.interop.UnsupportedMessageException;
112110
import com.oracle.truffle.api.library.CachedLibrary;
@@ -588,7 +586,6 @@ public static ExpectStringNode create(@ArgumentIndex int argNum, String classNam
588586
}
589587
}
590588

591-
@TypeSystemReference(PythonArithmeticTypes.class)
592589
@ImportStatic(PGuards.class)
593590
public abstract static class BytesInitNode extends PNodeWithRaise {
594591

@@ -629,15 +626,16 @@ static byte[] fromIterable(VirtualFrame frame, Object source, @SuppressWarnings(
629626
return toByteNode.execute(frame, source, lenNode.execute(frame, source));
630627
}
631628

632-
@Specialization
633-
byte[] fromString(String source, String encoding, @SuppressWarnings("unused") Object errors) {
629+
@Specialization(guards = {"isString(source)", "isString(encoding)"})
630+
byte[] fromString(Object source, Object encoding, Object errors,
631+
@Cached CastToJavaStringNode castStr) {
634632
String e = errors instanceof String ? (String) errors : "strict";
635-
return BytesBuiltins.stringToByte(source, encoding, e, getRaiseNode());
633+
return BytesBuiltins.stringToByte(castStr.execute(source), castStr.execute(encoding), e, getRaiseNode());
636634
}
637635

638-
@Specialization
636+
@Specialization(guards = "isString(source)")
639637
@SuppressWarnings("unused")
640-
byte[] fromString(String source, PNone encoding, Object errors) {
638+
byte[] fromString(Object source, PNone encoding, Object errors) {
641639
throw raise(TypeError, ErrorMessages.STRING_ARG_WO_ENCODING);
642640
}
643641

@@ -838,7 +836,7 @@ static String doit(VirtualFrame frame, Object value,
838836
}
839837

840838
/*-
841-
* This should be equivalent to PyUnicode_EncodeFSDefault
839+
* This should be equivalent to PyUnicode_EncodeFSDefault
842840
* TODO: encoding perference is set per context but will force
843841
* it to UTF-8 for the time being.
844842
*/

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/list/ListBuiltins.java

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
*/
2626
package com.oracle.graal.python.builtins.objects.list;
2727

28+
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__DOC__;
2829
import static com.oracle.graal.python.nodes.SpecialMethodNames.SORT;
2930
import static com.oracle.graal.python.nodes.SpecialMethodNames.__ADD__;
3031
import static com.oracle.graal.python.nodes.SpecialMethodNames.__CONTAINS__;
@@ -83,7 +84,6 @@
8384
import com.oracle.graal.python.builtins.objects.tuple.PTuple;
8485
import com.oracle.graal.python.nodes.ErrorMessages;
8586
import com.oracle.graal.python.nodes.PGuards;
86-
import static com.oracle.graal.python.nodes.SpecialAttributeNames.__DOC__;
8787
import com.oracle.graal.python.nodes.attributes.GetAttributeNode;
8888
import com.oracle.graal.python.nodes.builtins.ListNodes;
8989
import com.oracle.graal.python.nodes.builtins.ListNodes.AppendNode;
@@ -99,6 +99,7 @@
9999
import com.oracle.graal.python.nodes.function.builtins.PythonVarargsBuiltinNode;
100100
import com.oracle.graal.python.nodes.object.IsBuiltinClassProfile;
101101
import com.oracle.graal.python.nodes.truffle.PythonArithmeticTypes;
102+
import com.oracle.graal.python.nodes.util.CastToJavaStringNode;
102103
import com.oracle.graal.python.runtime.PythonContext;
103104
import com.oracle.graal.python.runtime.PythonCore;
104105
import com.oracle.graal.python.runtime.exception.PException;
@@ -114,6 +115,7 @@
114115
import com.oracle.truffle.api.CompilerDirectives;
115116
import com.oracle.truffle.api.CompilerDirectives.TruffleBoundary;
116117
import com.oracle.truffle.api.dsl.Cached;
118+
import com.oracle.truffle.api.dsl.Cached.Shared;
117119
import com.oracle.truffle.api.dsl.CachedContext;
118120
import com.oracle.truffle.api.dsl.Fallback;
119121
import com.oracle.truffle.api.dsl.GenerateNodeFactory;
@@ -191,15 +193,14 @@ public Object repr(VirtualFrame frame, PList self,
191193
}
192194

193195
@Builtin(name = __INIT__, minNumOfPositionalArgs = 1, maxNumOfPositionalArgs = 2)
194-
@TypeSystemReference(PythonArithmeticTypes.class)
195196
@GenerateNodeFactory
196197
public abstract static class ListInitNode extends PythonBinaryBuiltinNode {
197198

198199
public abstract PNone execute(VirtualFrame frame, PList list, Object source);
199200

200201
@Specialization
201-
static PNone init(PList list, String value,
202-
@Cached("create()") AppendNode appendNode) {
202+
static PNone initString(PList list, String value,
203+
@Shared("appendNode") @Cached AppendNode appendNode) {
203204
clearStorage(list);
204205
char[] chars = value.toCharArray();
205206
for (char c : chars) {
@@ -208,6 +209,13 @@ static PNone init(PList list, String value,
208209
return PNone.NONE;
209210
}
210211

212+
@Specialization
213+
static PNone initPString(PList list, PString value,
214+
@Cached CastToJavaStringNode castStr,
215+
@Shared("appendNode") @Cached AppendNode appendNode) {
216+
return initString(list, castStr.execute(value), appendNode);
217+
}
218+
211219
@Specialization(guards = "isNoValue(none)")
212220
static PNone init(PList list, @SuppressWarnings("unused") PNone none) {
213221
clearStorage(list);

0 commit comments

Comments
 (0)