Skip to content

Commit e1d622b

Browse files
committed
Cleanup after rebasing.
1 parent bed71f9 commit e1d622b

File tree

5 files changed

+28
-23
lines changed

5 files changed

+28
-23
lines changed

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

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ PyObject * PyNumber_Index(PyObject *o) {
129129
if (o == NULL) {
130130
return null_error();
131131
}
132-
return UPCALL_CEXT_O("PyNumber_Index", to_java(o));
132+
return UPCALL_CEXT_O("PyNumber_Index", native_to_java(o));
133133
}
134134

135135
Py_ssize_t PyNumber_AsSsize_t(PyObject *item, PyObject *err) {
@@ -183,19 +183,11 @@ PyObject * PyNumber_Float(PyObject *o) {
183183
}
184184

185185
PyObject * PyNumber_Absolute(PyObject *o) {
186-
void *result = polyglot_invoke(PY_TRUFFLE_CEXT, "PyNumber_Absolute", to_java(o));
187-
if (result == ERROR_MARKER) {
188-
return NULL;
189-
}
190-
return to_sulong(result);
186+
return UPCALL_CEXT_O("PyNumber_Absolute", native_to_java(o));
191187
}
192188

193189
PyObject * PyNumber_Divmod(PyObject *a, PyObject *b) {
194-
void *result = polyglot_invoke(PY_TRUFFLE_CEXT, "PyNumber_Divmod", to_java(a), to_java(b));
195-
if (result == ERROR_MARKER) {
196-
return NULL;
197-
}
198-
return to_sulong(result);
190+
return UPCALL_CEXT_O("PyNumber_Divmod", native_to_java(a), native_to_java(b));
199191
}
200192

201193

@@ -207,11 +199,11 @@ int PySequence_Check(PyObject *s) {
207199
if (s == NULL) {
208200
return 0;
209201
}
210-
return polyglot_as_i64(polyglot_invoke(PY_TRUFFLE_CEXT, "PySequence_Check", to_java(s)));
202+
return UPCALL_CEXT_I("PySequence_Check", native_to_java(s));
211203
}
212204

213205
Py_ssize_t PySequence_Size(PyObject *s) {
214-
return polyglot_as_i64(polyglot_invoke(PY_TRUFFLE_CEXT, "PyObject_Size", to_java(s)));
206+
return UPCALL_CEXT_L("PyObject_Size", native_to_java(s));
215207
}
216208

217209
// taken from CPython "Objects/abstract.c"

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

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -240,8 +240,22 @@ void* NativeHandle_ForArray(void* jobj, ssize_t element_size) {
240240
return truffle_deref_handle_for_managed(jobj);
241241
}
242242

243-
const char* PyTruffle_StringToCstr(void* o) {
244-
return polyglot_from_string(o, SRC_CS);
243+
const char* PyTruffle_StringToCstr(void* o, int32_t strLen) {
244+
const char *buffer;
245+
const char *str;
246+
uint64_t bufsize = 4 * (strLen + 1) * sizeof(char);
247+
uint64_t written;
248+
249+
// we allocate 4 bytes for a char; this will in all cases be enough
250+
buffer = (const char*) malloc(bufsize);
251+
252+
written = polyglot_as_string(o, buffer, bufsize, SRC_CS) + 1;
253+
254+
str = (const char*) malloc(written * sizeof(char));
255+
memcpy(str, buffer, written * sizeof(char));
256+
free(buffer);
257+
258+
return str;
245259
}
246260

247261
const char* PyTruffle_ByteArrayToNative(const void* jbyteArray, int len) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ extern void* to_java_type(PyTypeObject* cls);
120120
void* native_to_java(PyObject* obj);
121121
extern PyObject* to_sulong(void *o);
122122
extern PyObject* explicit_cast(PyObject* cobj);
123-
#define as_char_pointer(obj) UPCALL_CEXT_O("to_char_pointer", native_to_java(obj))
123+
#define as_char_pointer(obj) ((const char*)UPCALL_CEXT_PTR("to_char_pointer", native_to_java(obj)))
124124
#define as_long(obj) ((long)polyglot_as_i64(polyglot_invoke(PY_TRUFFLE_CEXT, "to_long", to_java(obj))))
125125
#define as_long_long(obj) ((long long)polyglot_as_i64(polyglot_invoke(PY_TRUFFLE_CEXT, "PyLong_AsPrimitive", to_java(obj), 1, sizeof(long long), polyglot_from_string("long long", "utf-8"))))
126126
#define as_unsigned_long_long(obj) ((unsigned long long)polyglot_as_i64(polyglot_invoke(PY_TRUFFLE_CEXT, "PyLong_AsPrimitive", to_java(obj), 0, sizeof(unsigned long long), polyglot_from_string("unsigned long long", "utf-8"))))

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
#include "capi.h"
4040

4141
PyObject* PyImport_ImportModule(const char *name) {
42-
return polyglot_as_PyModuleObject(UPCALL_CEXT_O("PyImport_ImportModule", polyglot_from_string(name, SRC_CS)));
42+
return UPCALL_CEXT_O("PyImport_ImportModule", polyglot_from_string(name, SRC_CS));
4343
}
4444

4545
PyObject* PyImport_GetModuleDict() {

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

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -148,16 +148,15 @@ Object run(Object object,
148148
@GenerateNodeFactory
149149
abstract static class TruffleString_AsString extends NativeBuiltin {
150150

151-
@Specialization
152-
Object run(PythonObjectNativeWrapper str,
153-
@Cached("create()") CExtNodes.AsCharPointer asCharPointerNode,
154-
@Cached("create()") CExtNodes.ToJavaNode toJavaNode) {
155-
return asCharPointerNode.execute(toJavaNode.execute(str));
151+
@Specialization(guards = "isString(str)")
152+
Object run(Object str,
153+
@Cached("create()") CExtNodes.AsCharPointer asCharPointerNode) {
154+
return asCharPointerNode.execute(str);
156155
}
157156

158157
@Fallback
159158
Object run(Object o) {
160-
return raiseNative(PNone.NO_VALUE, PythonErrorType.SystemError, "Cannot convert object of type %p to C string.", o);
159+
return raiseNative(PNone.NO_VALUE, PythonErrorType.SystemError, "Cannot convert object of type %p to C string.", o, o.getClass().getName());
161160
}
162161
}
163162

0 commit comments

Comments
 (0)