|
44 | 44 | import java.util.TimeZone;
|
45 | 45 |
|
46 | 46 | import com.oracle.graal.python.PythonLanguage;
|
| 47 | +import com.oracle.graal.python.annotations.ArgumentClinic; |
47 | 48 | import com.oracle.graal.python.builtins.Builtin;
|
48 | 49 | import com.oracle.graal.python.builtins.CoreFunctions;
|
49 | 50 | import com.oracle.graal.python.builtins.PythonBuiltinClassType;
|
50 | 51 | import com.oracle.graal.python.builtins.PythonBuiltins;
|
| 52 | +import com.oracle.graal.python.builtins.modules.TimeModuleBuiltinsClinicProviders.StrfTimeNodeClinicProviderGen; |
51 | 53 | import com.oracle.graal.python.builtins.objects.PNone;
|
52 | 54 | import com.oracle.graal.python.builtins.objects.common.SequenceNodes.GetObjectArrayNode;
|
53 | 55 | import com.oracle.graal.python.builtins.objects.common.SequenceStorageNodes;
|
|
62 | 64 | import com.oracle.graal.python.nodes.PRaiseNode;
|
63 | 65 | import com.oracle.graal.python.nodes.function.PythonBuiltinBaseNode;
|
64 | 66 | import com.oracle.graal.python.nodes.function.PythonBuiltinNode;
|
| 67 | +import com.oracle.graal.python.nodes.function.builtins.PythonBinaryClinicBuiltinNode; |
65 | 68 | import com.oracle.graal.python.nodes.function.builtins.PythonUnaryBuiltinNode;
|
| 69 | +import com.oracle.graal.python.nodes.function.builtins.clinic.ArgumentClinicProvider; |
66 | 70 | import com.oracle.graal.python.nodes.truffle.PythonArithmeticTypes;
|
67 | 71 | import com.oracle.graal.python.nodes.util.CastToJavaIntExactNode;
|
68 | 72 | import com.oracle.graal.python.runtime.PythonCore;
|
|
73 | 77 | import com.oracle.truffle.api.TruffleOptions;
|
74 | 78 | import com.oracle.truffle.api.dsl.Cached;
|
75 | 79 | import com.oracle.truffle.api.dsl.Cached.Shared;
|
76 |
| -import com.oracle.truffle.api.dsl.Fallback; |
77 | 80 | import com.oracle.truffle.api.dsl.GenerateNodeFactory;
|
78 | 81 | import com.oracle.truffle.api.dsl.NodeFactory;
|
79 | 82 | import com.oracle.truffle.api.dsl.Specialization;
|
@@ -483,10 +486,14 @@ private static void doSleep(double seconds, double deadline) {
|
483 | 486 | }
|
484 | 487 |
|
485 | 488 | // 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) |
487 | 491 | @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 | + } |
490 | 497 |
|
491 | 498 | private static Object castToPInt(Object obj, PythonObjectLibrary asPIntLib, PRaiseNode raise) {
|
492 | 499 | if (asPIntLib.canBePInt(obj)) {
|
@@ -827,11 +834,6 @@ public String formatTime(String format, PTuple time,
|
827 | 834 | public String formatTime(@SuppressWarnings("unused") String format, @SuppressWarnings("unused") Object time) {
|
828 | 835 | throw raise(PythonBuiltinClassType.TypeError, ErrorMessages.TUPLE_OR_STRUCT_TIME_ARG_REQUIRED);
|
829 | 836 | }
|
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 |
| - } |
835 | 837 | }
|
836 | 838 |
|
837 | 839 | @Builtin(name = "mktime", minNumOfPositionalArgs = 1, doc = "mktime(tuple) -> floating point number\n\n" +
|
|
0 commit comments