Skip to content

Commit 3b15dc7

Browse files
committed
[GR-17377] Darwin support for Numpy/Pandas/SKLearn
PullRequest: graalpython/622
2 parents 907ab2f + 522d1ab commit 3b15dc7

File tree

30 files changed

+1041
-54
lines changed

30 files changed

+1041
-54
lines changed

graalpython/com.oracle.graal.python.cext/modules/_memoryview.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -785,8 +785,8 @@ PyMemoryView_FromBuffer(Py_buffer *info)
785785
/* Create a memoryview from an object that implements the buffer protocol.
786786
If the object is a memoryview, the new memoryview must be registered
787787
with the same managed buffer. Otherwise, a new managed buffer is created. */
788-
PyObject *
789-
PyMemoryView_FromObject(PyObject *v)
788+
static PyObject *
789+
_PyMemoryView_FromObject(PyObject *v)
790790
{
791791
_PyManagedBufferObject *mbuf;
792792

@@ -928,7 +928,7 @@ PyMemoryView_GetContiguous(PyObject *obj, int buffertype, char order)
928928
assert(buffertype == PyBUF_READ || buffertype == PyBUF_WRITE);
929929
assert(order == 'C' || order == 'F' || order == 'A');
930930

931-
mv = (PyMemoryViewObject *)PyMemoryView_FromObject(obj);
931+
mv = (PyMemoryViewObject *)_PyMemoryView_FromObject(obj);
932932
if (mv == NULL)
933933
return NULL;
934934

@@ -968,7 +968,7 @@ memory_new(PyTypeObject *subtype, PyObject *args, PyObject *kwds)
968968
return NULL;
969969
}
970970

971-
return polyglot_from_PyMemoryViewObject((PyMemoryViewObject *)PyMemoryView_FromObject(obj));
971+
return polyglot_from_PyMemoryViewObject((PyMemoryViewObject *)_PyMemoryView_FromObject(obj));
972972
}
973973

974974

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

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -311,6 +311,11 @@ int PySequence_SetItem(PyObject *s, Py_ssize_t i, PyObject *o) {
311311
return UPCALL_CEXT_I(_jls_PySequence_SetItem, native_to_java(s), i, native_to_java(o));
312312
}
313313

314+
UPCALL_ID(PySequence_GetSlice);
315+
PyObject* PySequence_GetSlice(PyObject *s, Py_ssize_t i1, Py_ssize_t i2) {
316+
return UPCALL_CEXT_O(_jls_PySequence_GetSlice, native_to_java(s), i1, i2);
317+
}
318+
314319
UPCALL_ID(PySequence_Tuple);
315320
PyObject* PySequence_Tuple(PyObject *v) {
316321
return UPCALL_CEXT_O(_jls_PySequence_Tuple, native_to_java(v));
@@ -519,3 +524,23 @@ Py_ssize_t PyMapping_Size(PyObject *o) {
519524
PyErr_Format(PyExc_TypeError, "object of type '%s' has no len()", Py_TYPE(o)->tp_name);
520525
return -1;
521526
}
527+
528+
UPCALL_ID(PySequence_Repeat);
529+
PyObject* PySequence_Repeat(PyObject *o, Py_ssize_t count) {
530+
return UPCALL_CEXT_O(_jls_PySequence_Repeat, native_to_java(o), count);
531+
}
532+
533+
UPCALL_ID(PySequence_Concat);
534+
PyObject* PySequence_Concat(PyObject *s, PyObject *o) {
535+
return UPCALL_CEXT_O(_jls_PySequence_Concat, native_to_java(s), native_to_java(o));
536+
}
537+
538+
UPCALL_ID(PySequence_InPlaceRepeat);
539+
PyObject* PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count) {
540+
return UPCALL_CEXT_O(_jls_PySequence_Repeat, native_to_java(o), count);
541+
}
542+
543+
UPCALL_ID(PySequence_InPlaceConcat);
544+
PyObject* PySequence_InPlaceConcat(PyObject *s, PyObject *o) {
545+
return UPCALL_CEXT_O(_jls_PySequence_Concat, native_to_java(s), native_to_java(o));
546+
}

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

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,11 @@ void *Py_NoValue;
4747

4848
PyObject*(*PY_TRUFFLE_LANDING)(void *rcv, void* name, ...);
4949
void*(*PY_TRUFFLE_LANDING_L)(void *rcv, void* name, ...);
50-
double(*PY_TRUFFLE_LANDING_D)(void *rcv, void* name, ...);
50+
void*(*PY_TRUFFLE_LANDING_D)(void *rcv, void* name, ...);
5151
void*(*PY_TRUFFLE_LANDING_PTR)(void *rcv, void* name, ...);
5252
PyObject*(*PY_TRUFFLE_CEXT_LANDING)(void* name, ...);
5353
void* (*PY_TRUFFLE_CEXT_LANDING_L)(void* name, ...);
54-
double (*PY_TRUFFLE_CEXT_LANDING_D)(void* name, ...);
54+
void* (*PY_TRUFFLE_CEXT_LANDING_D)(void* name, ...);
5555
void* (*PY_TRUFFLE_CEXT_LANDING_PTR)(void* name, ...);
5656

5757

@@ -64,12 +64,12 @@ static void initialize_upcall_functions() {
6464

6565
PY_TRUFFLE_LANDING = ((PyObject*(*)(void *rcv, void* name, ...))polyglot_get_member(PY_TRUFFLE_CEXT, polyglot_from_string("PyTruffle_Upcall", SRC_CS)));
6666
PY_TRUFFLE_LANDING_L = ((void*(*)(void *rcv, void* name, ...))polyglot_get_member(PY_TRUFFLE_CEXT, polyglot_from_string("PyTruffle_Upcall_l", SRC_CS)));
67-
PY_TRUFFLE_LANDING_D = ((double(*)(void *rcv, void* name, ...))polyglot_get_member(PY_TRUFFLE_CEXT, polyglot_from_string("PyTruffle_Upcall_d", SRC_CS)));
67+
PY_TRUFFLE_LANDING_D = ((void*(*)(void *rcv, void* name, ...))polyglot_get_member(PY_TRUFFLE_CEXT, polyglot_from_string("PyTruffle_Upcall_d", SRC_CS)));
6868
PY_TRUFFLE_LANDING_PTR = ((void*(*)(void *rcv, void* name, ...))polyglot_get_member(PY_TRUFFLE_CEXT, polyglot_from_string("PyTruffle_Upcall_ptr", SRC_CS)));
6969
PY_TRUFFLE_CEXT_LANDING = ((PyObject*(*)(void* name, ...))polyglot_get_member(PY_TRUFFLE_CEXT, polyglot_from_string("PyTruffle_Cext_Upcall", SRC_CS)));
70-
PY_TRUFFLE_CEXT_LANDING_L = ((void* (*)(void* name, ...))polyglot_get_member(PY_TRUFFLE_CEXT, polyglot_from_string("PyTruffle_Cext_Upcall_l", SRC_CS)));
71-
PY_TRUFFLE_CEXT_LANDING_D = ((double (*)(void* name, ...))polyglot_get_member(PY_TRUFFLE_CEXT, polyglot_from_string("PyTruffle_Cext_Upcall_d", SRC_CS)));
72-
PY_TRUFFLE_CEXT_LANDING_PTR = ((void* (*)(void* name, ...))polyglot_get_member(PY_TRUFFLE_CEXT, polyglot_from_string("PyTruffle_Cext_Upcall_ptr", SRC_CS)));
70+
PY_TRUFFLE_CEXT_LANDING_L = ((void*(*)(void* name, ...))polyglot_get_member(PY_TRUFFLE_CEXT, polyglot_from_string("PyTruffle_Cext_Upcall_l", SRC_CS)));
71+
PY_TRUFFLE_CEXT_LANDING_D = ((void*(*)(void* name, ...))polyglot_get_member(PY_TRUFFLE_CEXT, polyglot_from_string("PyTruffle_Cext_Upcall_d", SRC_CS)));
72+
PY_TRUFFLE_CEXT_LANDING_PTR = ((void*(*)(void* name, ...))polyglot_get_member(PY_TRUFFLE_CEXT, polyglot_from_string("PyTruffle_Cext_Upcall_ptr", SRC_CS)));
7373

7474
Py_NoValue = UPCALL_CEXT_O(polyglot_from_string("Py_NoValue", SRC_CS));
7575
}

graalpython/com.oracle.graal.python.cext/src/capi.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -110,11 +110,11 @@ double polyglot_ensure_double(void *obj) {
110110
/* upcall functions for calling into Python */
111111
extern PyObject*(*PY_TRUFFLE_LANDING)(void *rcv, void* name, ...);
112112
extern void*(*PY_TRUFFLE_LANDING_L)(void *rcv, void* name, ...);
113-
extern double(*PY_TRUFFLE_LANDING_D)(void *rcv, void* name, ...);
113+
extern void*(*PY_TRUFFLE_LANDING_D)(void *rcv, void* name, ...);
114114
extern void*(*PY_TRUFFLE_LANDING_PTR)(void *rcv, void* name, ...);
115115
extern PyObject*(*PY_TRUFFLE_CEXT_LANDING)(void* name, ...);
116116
extern void* (*PY_TRUFFLE_CEXT_LANDING_L)(void* name, ...);
117-
extern double (*PY_TRUFFLE_CEXT_LANDING_D)(void* name, ...);
117+
extern void* (*PY_TRUFFLE_CEXT_LANDING_D)(void* name, ...);
118118
extern void* (*PY_TRUFFLE_CEXT_LANDING_PTR)(void* name, ...);
119119

120120
/* Call function with return type 'PyObject *'; does polyglot cast and error handling */
@@ -139,7 +139,7 @@ extern void* (*PY_TRUFFLE_CEXT_LANDING_PTR)(void* name, ...);
139139
#define UPCALL_CEXT_O(__name__, ...) PY_TRUFFLE_CEXT_LANDING(__name__, ##__VA_ARGS__)
140140

141141
/* Call void function of 'python_cext' module; no polyglot cast and no error handling */
142-
#define UPCALL_CEXT_VOID(__name__, ...) (PY_TRUFFLE_CEXT_LANDING(__name__, ##__VA_ARGS__))
142+
#define UPCALL_CEXT_VOID(__name__, ...) ((void)PY_TRUFFLE_CEXT_LANDING(__name__, ##__VA_ARGS__))
143143

144144
/* Call function of 'python_cext' module with return type 'PyObject*'; no polyglot cast but error handling */
145145
#define UPCALL_CEXT_NOCAST(__name__, ...) PY_TRUFFLE_CEXT_LANDING(__name__, ##__VA_ARGS__)
@@ -331,6 +331,7 @@ extern PyObject* wrapped_null;
331331

332332
/* STR */
333333
__attribute__((always_inline)) PyObject* PyTruffle_Unicode_FromFormat(const char *fmt, va_list va, void **args, int argc);
334+
__attribute__((always_inline)) PyObject* PyTruffle_Tuple_Pack(int dummy, va_list va, void **args, int argc);
334335

335336
/* BYTES, BYTEARRAY */
336337
int bytes_buffer_getbuffer(PyBytesObject *self, Py_buffer *view, int flags);
@@ -361,7 +362,7 @@ int bufferdecorator_getbuffer(PyBufferDecorator *self, Py_buffer *view, int flag
361362
for (int i = off; i < __poly_argc; i++) { \
362363
__poly_args[i - off] = polyglot_get_arg(i); \
363364
} \
364-
result = function(__VA_ARGS__, __va_list, __poly_args, 0)
365+
result = function(__VA_ARGS__, __va_list, __poly_args, __poly_argc)
365366
#else
366367
/*
367368
* (tfel): Just skip the optimization with using a managed malloc and use

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

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2018, 2019, 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
@@ -57,6 +57,11 @@ void* PyCapsule_GetContext(PyObject *o) {
5757
return result;
5858
}
5959

60+
UPCALL_ID(PyCapsule_SetContext);
61+
int PyCapsule_SetContext(PyObject *o, void *context) {
62+
return UPCALL_CEXT_I(_jls_PyCapsule_SetContext, native_to_java(o), (uint64_t)context);
63+
}
64+
6065
UPCALL_ID(PyCapsule_GetPointer);
6166
void* PyCapsule_GetPointer(PyObject *o, const char *name) {
6267
void* result = UPCALL_CEXT_PTR(_jls_PyCapsule_GetPointer, native_to_java(o), name ? polyglot_from_string(name, SRC_CS) : native_to_java(Py_None));
@@ -77,3 +82,10 @@ UPCALL_ID(PyCapsule_IsValid);
7782
int PyCapsule_IsValid(PyObject *o, const char *name) {
7883
return o != NULL && UPCALL_CEXT_I(_jls_PyCapsule_IsValid, native_to_java(o), name ? polyglot_from_string(name, SRC_CS) : native_to_java(Py_None));
7984
}
85+
86+
UPCALL_ID(PyCapsule_GetName);
87+
const char * PyCapsule_GetName(PyObject *o) {
88+
return as_char_pointer(UPCALL_CEXT_O(_jls_PyCapsule_GetName, native_to_java(o)));
89+
}
90+
91+

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,11 @@ PyThreadState* PyEval_SaveThread() {
6565
void PyEval_RestoreThread(PyThreadState *ptr) {
6666
}
6767

68+
UPCALL_ID(PyEval_GetBuiltins);
69+
PyObject* PyEval_GetBuiltins() {
70+
return UPCALL_CEXT_O(_jls_PyEval_GetBuiltins);
71+
}
72+
6873
UPCALL_ID(PyThread_allocate_lock);
6974
void* PyThread_allocate_lock() {
7075
return UPCALL_CEXT_O(_jls_PyThread_allocate_lock);

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

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,3 +224,22 @@ _Py_c_abs(Py_complex z)
224224
errno = 0;
225225
return result;
226226
}
227+
228+
UPCALL_ID(PyComplex_RealAsDouble);
229+
double PyComplex_RealAsDouble(PyObject *op) {
230+
return UPCALL_CEXT_D(_jls_PyComplex_RealAsDouble, native_to_java(op));
231+
}
232+
233+
UPCALL_ID(PyComplex_ImagAsDouble);
234+
double PyComplex_ImagAsDouble(PyObject *op) {
235+
return UPCALL_CEXT_D(_jls_PyComplex_ImagAsDouble, native_to_java(op));
236+
}
237+
238+
UPCALL_ID(PyComplex_FromDoubles);
239+
PyObject * PyComplex_FromDoubles(double real, double imag) {
240+
return UPCALL_CEXT_O(_jls_PyComplex_FromDoubles, real, imag);
241+
}
242+
243+
PyObject * PyComplex_FromCComplex(Py_complex cval) {
244+
return UPCALL_CEXT_O(_jls_PyComplex_FromDoubles, cval.real, cval.imag);
245+
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,3 +192,8 @@ PyObject** _PyObject_GetDictPtr(PyObject* obj) {
192192
void PyDict_Clear(PyObject *obj) {
193193
(void) UPCALL_O(to_java(obj), polyglot_from_string("clear", SRC_CS));
194194
}
195+
196+
UPCALL_ID(PyDict_Merge);
197+
int PyDict_Merge(PyObject *a, PyObject *b, int override) {
198+
return UPCALL_CEXT_I(_jls_PyDict_Merge, native_to_java(a), native_to_java(b), override);
199+
}

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

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,3 +139,18 @@ int PyException_SetTraceback(PyObject *self, PyObject *tb) {
139139
return 0;
140140
}
141141
}
142+
143+
UPCALL_ID(PyException_SetCause);
144+
void PyException_SetCause(PyObject *self, PyObject *cause) {
145+
UPCALL_CEXT_VOID(_jls_PyException_SetCause, native_to_java(self), native_to_java(cause));
146+
}
147+
148+
UPCALL_ID(PyException_GetContext);
149+
PyObject * PyException_GetContext(PyObject *self) {
150+
return UPCALL_CEXT_O(_jls_PyException_GetContext, native_to_java(self));
151+
}
152+
153+
UPCALL_ID(PyException_SetContext);
154+
void PyException_SetContext(PyObject *self, PyObject *context) {
155+
UPCALL_CEXT_VOID(_jls_PyException_SetContext, native_to_java(self), native_to_java(context));
156+
}

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2018, 2019, 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
@@ -94,3 +94,8 @@ UPCALL_ID(PyList_Sort);
9494
int PyList_Sort(PyObject *l) {
9595
return UPCALL_CEXT_I(_jls_PyList_Sort, native_to_java(l));
9696
}
97+
98+
UPCALL_ID(PyList_Insert);
99+
int PyList_Insert(PyObject *op, Py_ssize_t where, PyObject *newitem) {
100+
return UPCALL_CEXT_I(_jls_PyList_Insert, native_to_java(op), where, native_to_java(newitem));
101+
}

0 commit comments

Comments
 (0)