Skip to content

Commit 6470233

Browse files
committed
intrinsified initialize_datetime_capi
1 parent 12d1f0b commit 6470233

File tree

7 files changed

+373
-123
lines changed

7 files changed

+373
-123
lines changed

graalpython/com.oracle.graal.python.cext/src/datetime.c

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2017, 2021, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2017, 2022, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* The Universal Permissive License (UPL), Version 1.0
@@ -70,9 +70,7 @@ POLYGLOT_DECLARE_TYPE(PyDateTime_Delta);
7070
POLYGLOT_DECLARE_TYPE(PyDateTime_TZInfo);
7171

7272
/** to be used from Java code only; returns the type ID for a PyDateTime_CAPI */
73-
extern PyObject* set_PyDateTime_typeids(PyTypeObject* dtcapiType, PyTypeObject* dateType, PyTypeObject* dateTimeType, PyTypeObject* timeType, PyTypeObject* deltaType, PyTypeObject* tzinfoType) {
74-
polyglot_invoke(PY_TRUFFLE_CEXT, "PyTruffle_Set_SulongType", dtcapiType, polyglot_PyDateTime_CAPI_typeid());
75-
73+
extern polyglot_typeid set_PyDateTime_typeids(PyTypeObject* dateType, PyTypeObject* dateTimeType, PyTypeObject* timeType, PyTypeObject* deltaType, PyTypeObject* tzinfoType) {
7674
/* safe native get/set descriptors */
7775
PyGetSetDef* getsets_date= PyDateTime_DateType.tp_getset;
7876
PyGetSetDef* getsets_time = PyDateTime_TimeType.tp_getset;
@@ -91,7 +89,7 @@ extern PyObject* set_PyDateTime_typeids(PyTypeObject* dtcapiType, PyTypeObject*
9189
register_native_slots(&PyDateTime_TimeType, getsets_time, NULL);
9290
register_native_slots(&PyDateTime_DeltaType, NULL, members_delta);
9391

94-
return Py_True;
92+
return polyglot_PyDateTime_CAPI_typeid();
9593
}
9694

9795
BASICSIZE_GETTER(PyDateTime_Date);

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

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,6 @@
130130
import com.oracle.graal.python.builtins.objects.cext.capi.NativeReferenceCacheFactory.ResolveNativeReferenceNodeGen;
131131
import com.oracle.graal.python.builtins.objects.cext.capi.PThreadState;
132132
import com.oracle.graal.python.builtins.objects.cext.capi.PyCFunctionDecorator;
133-
import com.oracle.graal.python.builtins.objects.cext.capi.PyDateTimeCAPIWrapper;
134133
import com.oracle.graal.python.builtins.objects.cext.capi.PyEvalNodes.PyEvalRestoreThread;
135134
import com.oracle.graal.python.builtins.objects.cext.capi.PyEvalNodes.PyEvalSaveThread;
136135
import com.oracle.graal.python.builtins.objects.cext.capi.PyGILStateNodes.PyGILStateEnsure;
@@ -2247,15 +2246,6 @@ int trace(Object ptr, Object classNameObj,
22472246
}
22482247
}
22492248

2250-
@Builtin(name = "wrap_PyDateTime_CAPI", minNumOfPositionalArgs = 1)
2251-
@GenerateNodeFactory
2252-
abstract static class WrapPyDateTimeCAPI extends PythonBuiltinNode {
2253-
@Specialization
2254-
static Object doGeneric(Object object) {
2255-
return new PyDateTimeCAPIWrapper(object);
2256-
}
2257-
}
2258-
22592249
@ImportStatic(CExtContext.class)
22602250
abstract static class NewClassMethodNode extends Node {
22612251

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/NativeCAPISymbol.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -216,6 +216,15 @@ public enum NativeCAPISymbol implements NativeCExtSymbol {
216216
FUN_MEMCPY_BYTES("truffle_memcpy_bytes"),
217217
FUN_UNICODE_SUBTYPE_NEW("unicode_subtype_new"),
218218

219+
/* PyDateTime_CAPI */
220+
221+
FUN_SET_PY_DATETIME_IDS("set_PyDateTime_typeids"),
222+
FUN_CREATE_DATETIME_CAPSULE("truffle_create_datetime_capsule"),
223+
FUN_GET_DATETIME_DATE_BASICSIZE("get_PyDateTime_Date_basicsize"),
224+
FUN_GET_DATETIME_TIME_BASICSIZE("get_PyDateTime_Time_basicsize"),
225+
FUN_GET_DATETIME_DATETIME_BASICSIZE("get_PyDateTime_DateTime_basicsize"),
226+
FUN_GET_DATETIME_DELTA_BASICSIZE("get_PyDateTime_Delta_basicsize"),
227+
219228
// ctypes
220229
FUN_MEMMOVE("memmove"),
221230
FUN_MEMSET("memset"),

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/cext/capi/PyDateTimeCAPIWrapper.java

Lines changed: 353 additions & 45 deletions
Large diffs are not rendered by default.

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/lib/PyObjectGetItem.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2021, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2021, 2022, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* The Universal Permissive License (UPL), Version 1.0
@@ -130,4 +130,8 @@ Object doGeneric(VirtualFrame frame, Object type, Object key,
130130
return PNone.NO_VALUE;
131131
}
132132
}
133+
134+
public static PyObjectGetItem getUncached() {
135+
return PyObjectGetItemNodeGen.getUncached();
136+
}
133137
}

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/PythonContext.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2017, 2021, Oracle and/or its affiliates.
2+
* Copyright (c) 2017, 2022, Oracle and/or its affiliates.
33
* Copyright (c) 2013, Regents of the University of California
44
*
55
* All rights reserved.
@@ -68,14 +68,14 @@
6868

6969
import com.oracle.graal.python.PythonLanguage;
7070
import com.oracle.graal.python.builtins.Python3Core;
71-
import com.oracle.graal.python.builtins.modules.cext.PythonCextBuiltins;
7271
import com.oracle.graal.python.builtins.modules.ctypes.CtypesModuleBuiltins.CtypesThreadState;
7372
import com.oracle.graal.python.builtins.objects.PNone;
7473
import com.oracle.graal.python.builtins.objects.PythonAbstractObject;
7574
import com.oracle.graal.python.builtins.objects.PythonAbstractObjectFactory.PInteropGetAttributeNodeGen;
7675
import com.oracle.graal.python.builtins.objects.cext.PythonNativeClass;
7776
import com.oracle.graal.python.builtins.objects.cext.capi.CApiContext;
7877
import com.oracle.graal.python.builtins.objects.cext.capi.PThreadState;
78+
import com.oracle.graal.python.builtins.objects.cext.capi.PyDateTimeCAPIWrapper;
7979
import com.oracle.graal.python.builtins.objects.cext.capi.PyTruffleObjectFree.ReleaseHandleNode;
8080
import com.oracle.graal.python.builtins.objects.cext.capi.PyTruffleObjectFreeFactory.ReleaseHandleNodeGen;
8181
import com.oracle.graal.python.builtins.objects.cext.capi.PythonNativeNull;
@@ -102,7 +102,6 @@
102102
import com.oracle.graal.python.nodes.SpecialMethodNames;
103103
import com.oracle.graal.python.nodes.attributes.ReadAttributeFromObjectNode;
104104
import com.oracle.graal.python.nodes.call.CallNode;
105-
import com.oracle.graal.python.nodes.call.special.CallUnaryMethodNode;
106105
import com.oracle.graal.python.nodes.object.SetDictNode;
107106
import com.oracle.graal.python.nodes.util.CastToJavaIntLossyNode;
108107
import com.oracle.graal.python.runtime.AsyncHandler.AsyncAction;
@@ -2074,10 +2073,7 @@ public void setCapiWasLoaded(CApiContext capiContext) {
20742073
assert this.cApiContext == null : "tried to create new C API context but it was already created";
20752074
this.cApiContext = capiContext;
20762075

2077-
ReadAttributeFromObjectNode readNode = ReadAttributeFromObjectNode.getUncached();
2078-
PythonModule builtinModule = lookupBuiltinModule(PythonCextBuiltins.PYTHON_CEXT);
2079-
CallUnaryMethodNode callNode = CallUnaryMethodNode.getUncached();
2080-
callNode.executeObject(null, readNode.execute(builtinModule, INITIALIZE_DATETIME_CAPI), capiContext.getLLVMLibrary());
2076+
PyDateTimeCAPIWrapper.initWrapper(capiContext);
20812077

20822078
for (Runnable capiHook : capiHooks) {
20832079
capiHook.run();

graalpython/lib-graalpython/python_cext.py

Lines changed: 0 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -52,58 +52,3 @@ def may_raise(error_result=native_null):
5252
def decorator(fun):
5353
return make_may_raise_wrapper(fun, error_result)
5454
return decorator
55-
56-
##################### C EXT HELPERS
57-
58-
def initialize_datetime_capi(capi_library):
59-
import datetime
60-
61-
class PyDateTime_CAPI:
62-
DateType = datetime.date
63-
DateTimeType = datetime.datetime
64-
TimeType = datetime.time
65-
DeltaType = datetime.timedelta
66-
TZInfoType = datetime.tzinfo
67-
68-
@staticmethod
69-
def Date_FromDate(y, m, d, typ):
70-
return typ(y, month=m, day=d)
71-
72-
@staticmethod
73-
def DateTime_FromDateAndTime(y, mon, d, h, m, s, usec, tzinfo, typ):
74-
return PyDateTime_CAPI.DateTime_FromDateAndTimeAndFold(y, mon, d, h, m, s, usec, tzinfo, 0, typ)
75-
76-
@staticmethod
77-
def Time_FromTime(h, m, s, usec, tzinfo, typ):
78-
return PyDateTime_CAPI.Time_FromTimeAndFold(h, m, s, usec, tzinfo, 0, typ)
79-
80-
@staticmethod
81-
def Delta_FromDelta(d, s, microsec, normalize, typ):
82-
return typ(days=d, seconds=s, microseconds=microsec)
83-
84-
@staticmethod
85-
def DateTime_FromTimestamp(cls, args, kwds):
86-
return cls(*args, **kwds)
87-
88-
@staticmethod
89-
def Date_FromTimestamp(cls, args):
90-
return cls(*args)
91-
92-
@staticmethod
93-
def DateTime_FromDateAndTimeAndFold(y, mon, d, h, m, s, usec, tz, fold, typ):
94-
return typ(y, month=mon, day=d, hour=h, minute=m, second=s, microseconds=usec, tzinfo=tz, fold=fold)
95-
96-
@staticmethod
97-
def Time_FromTimeAndFold(h, m, s, us, tz, fold, typ):
98-
return typ(hour=h, minute=m, second=s, microsecond=us, tzinfo=tz, fold=fold)
99-
100-
import_c_func("set_PyDateTime_typeids", capi_library)(PyDateTime_CAPI, PyDateTime_CAPI.DateType, PyDateTime_CAPI.DateTimeType, PyDateTime_CAPI.TimeType, PyDateTime_CAPI.DeltaType, PyDateTime_CAPI.TZInfoType)
101-
datetime.datetime_CAPI = import_c_func("truffle_create_datetime_capsule", capi_library)(wrap_PyDateTime_CAPI(PyDateTime_CAPI()))
102-
assert datetime.datetime_CAPI is not native_null
103-
datetime.date.__basicsize__ = import_c_func("get_PyDateTime_Date_basicsize", capi_library)()
104-
datetime.time.__basicsize__ = import_c_func("get_PyDateTime_Time_basicsize", capi_library)()
105-
datetime.datetime.__basicsize__ = import_c_func("get_PyDateTime_DateTime_basicsize", capi_library)()
106-
datetime.timedelta.__basicsize__ = import_c_func("get_PyDateTime_Delta_basicsize", capi_library)()
107-
108-
109-

0 commit comments

Comments
 (0)