@@ -94,6 +94,14 @@ void initialize_exceptions();
94
94
// defined in 'pyhash.c'
95
95
void initialize_hashes ();
96
96
97
+ // prototype of C landing function
98
+ PyObject * wrap_direct (PyCFunction fun , ...);
99
+ PyObject * wrap_varargs (PyCFunction fun , PyObject * module , PyObject * varargs );
100
+ PyObject * wrap_keywords (PyCFunctionWithKeywords fun , PyObject * module , PyObject * varargs , PyObject * kwargs );
101
+ PyObject * wrap_noargs (PyCFunction fun , PyObject * module , PyObject * pnone );
102
+ PyObject * wrap_fastcall (_PyCFunctionFast fun , PyObject * self , PyObject * * args , Py_ssize_t nargs , PyObject * kwnames );
103
+ PyObject * wrap_unsupported (void * fun , ...);
104
+
97
105
#define write_struct_field (object , struct , fieldname , value ) \
98
106
truffle_write(to_java(object), \
99
107
#fieldname , \
@@ -119,6 +127,21 @@ void initialize_hashes();
119
127
truffle_read(PY_TRUFFLE_CEXT, "METH_FASTCALL") : \
120
128
truffle_read(PY_TRUFFLE_CEXT, "METH_UNSUPPORTED")))))))
121
129
130
+ #define get_method_flags_cwrapper (flags ) \
131
+ (void*)((((flags) < 0) ? \
132
+ wrap_direct : \
133
+ (((flags) & METH_KEYWORDS) ? \
134
+ wrap_keywords : \
135
+ (((flags) & METH_VARARGS) ? \
136
+ wrap_varargs : \
137
+ (((flags) & METH_NOARGS) ? \
138
+ wrap_noargs : \
139
+ (((flags) & METH_O) ? \
140
+ wrap_direct : \
141
+ (((flags) & METH_FASTCALL) ? \
142
+ wrap_fastcall : \
143
+ wrap_unsupported)))))))
144
+
122
145
123
146
#define PY_TRUFFLE_TYPE (__TYPE_NAME__ , __SUPER_TYPE__ , __FLAGS__ ) {\
124
147
PyVarObject_HEAD_INIT((__SUPER_TYPE__), 0)\
@@ -167,43 +190,43 @@ void initialize_hashes();
167
190
int PyTruffle_Debug (void * arg );
168
191
PyTypeObject * PyObjectHandle_ForJavaType (void * jobj );
169
192
170
- extern short ReadShortMember (PyObject * object , int offset );
171
- extern int ReadIntMember (PyObject * object , int offset );
172
- extern long ReadLongMember (PyObject * object , int offset );
173
- extern float ReadFloatMember (PyObject * object , int offset );
174
- extern double ReadDoubleMember (PyObject * object , int offset );
175
- extern void * ReadStringMember (PyObject * object , int offset );
176
- extern PyObject * ReadObjectMember (PyObject * object , int offset );
177
- extern char ReadCharMember (PyObject * object , int offset );
178
- extern char ReadByteMember (PyObject * object , int offset );
179
- extern unsigned char ReadUByteMember (PyObject * object , int offset );
180
- extern unsigned short ReadUShortMember (PyObject * object , int offset );
181
- extern unsigned int ReadUIntMember (PyObject * object , int offset );
182
- extern unsigned long ReadULongMember (PyObject * object , int offset );
183
- extern char ReadBoolMember (PyObject * object , int offset );
184
- extern PyObject * ReadObjectExMember (PyObject * object , int offset );
185
- extern long long ReadLongLongMember (PyObject * object , int offset );
186
- extern unsigned long long ReadULongLongMember (PyObject * object , int offset );
187
- extern Py_ssize_t ReadPySSizeT (PyObject * object , int offset );
188
-
189
- extern void WriteShortMember (PyObject * object , int offset , short value );
190
- extern void WriteIntMember (PyObject * object , int offset , int value );
191
- extern void WriteLongMember (PyObject * object , int offset , long value );
192
- extern void WriteFloatMember (PyObject * object , int offset , float value );
193
- extern void WriteDoubleMember (PyObject * object , int offset , double value );
194
- extern void WriteStringMember (PyObject * object , int offset , PyObject * value );
195
- extern void WriteObjectMember (PyObject * object , int offset , PyObject * value );
196
- extern void WriteCharMember (PyObject * object , int offset , PyObject * value );
197
- extern void WriteByteMember (PyObject * object , int offset , PyObject * value );
198
- extern void WriteUByteMember (PyObject * object , int offset , PyObject * value );
199
- extern void WriteUShortMember (PyObject * object , int offset , unsigned short value );
200
- extern void WriteUIntMember (PyObject * object , int offset , unsigned int value );
201
- extern void WriteULongMember (PyObject * object , int offset , unsigned long value );
202
- extern void WriteBoolMember (PyObject * object , int offset , PyObject * value );
203
- extern void WriteObjectExMember (PyObject * object , int offset , PyObject * value );
204
- extern void WriteLongLongMember (PyObject * object , int offset , long long value );
205
- extern void WriteULongLongMember (PyObject * object , int offset , unsigned long long value );
206
- extern void WritePySSizeT (PyObject * object , int offset , Py_ssize_t value );
193
+ extern PyObject * ReadShortMember (PyObject * object , PyObject * offset );
194
+ extern PyObject * ReadIntMember (PyObject * object , PyObject * offset );
195
+ extern PyObject * ReadLongMember (PyObject * object , PyObject * offset );
196
+ extern PyObject * ReadFloatMember (PyObject * object , PyObject * offset );
197
+ extern PyObject * ReadDoubleMember (PyObject * object , PyObject * offset );
198
+ extern PyObject * ReadStringMember (PyObject * object , PyObject * offset );
199
+ extern PyObject * ReadObjectMember (PyObject * object , PyObject * offset );
200
+ extern PyObject * ReadCharMember (PyObject * object , PyObject * offset );
201
+ extern PyObject * ReadByteMember (PyObject * object , PyObject * offset );
202
+ extern PyObject * ReadUByteMember (PyObject * object , PyObject * offset );
203
+ extern PyObject * ReadUShortMember (PyObject * object , PyObject * offset );
204
+ extern PyObject * ReadUIntMember (PyObject * object , PyObject * offset );
205
+ extern PyObject * ReadULongMember (PyObject * object , PyObject * offset );
206
+ extern PyObject * ReadBoolMember (PyObject * object , PyObject * offset );
207
+ extern PyObject * ReadObjectExMember (PyObject * object , PyObject * offset );
208
+ extern PyObject * ReadLongLongMember (PyObject * object , PyObject * offset );
209
+ extern PyObject * ReadULongLongMember (PyObject * object , PyObject * offset );
210
+ extern PyObject * ReadPySSizeT (PyObject * object , PyObject * offset );
211
+
212
+ extern PyObject * WriteShortMember (PyObject * object , PyObject * offset , PyObject * value );
213
+ extern PyObject * WriteIntMember (PyObject * object , PyObject * offset , PyObject * value );
214
+ extern PyObject * WriteLongMember (PyObject * object , PyObject * offset , PyObject * value );
215
+ extern PyObject * WriteFloatMember (PyObject * object , PyObject * offset , PyObject * value );
216
+ extern PyObject * WriteDoubleMember (PyObject * object , PyObject * offset , PyObject * value );
217
+ extern PyObject * WriteStringMember (PyObject * object , PyObject * offset , PyObject * value );
218
+ extern PyObject * WriteObjectMember (PyObject * object , PyObject * offset , PyObject * value );
219
+ extern PyObject * WriteCharMember (PyObject * object , PyObject * offset , PyObject * value );
220
+ extern PyObject * WriteByteMember (PyObject * object , PyObject * offset , PyObject * value );
221
+ extern PyObject * WriteUByteMember (PyObject * object , PyObject * offset , PyObject * value );
222
+ extern PyObject * WriteUShortMember (PyObject * object , PyObject * offset , PyObject * value );
223
+ extern PyObject * WriteUIntMember (PyObject * object , PyObject * offset , PyObject * value );
224
+ extern PyObject * WriteULongMember (PyObject * object , PyObject * offset , PyObject * value );
225
+ extern PyObject * WriteBoolMember (PyObject * object , PyObject * offset , PyObject * value );
226
+ extern PyObject * WriteObjectExMember (PyObject * object , PyObject * offset , PyObject * value );
227
+ extern PyObject * WriteLongLongMember (PyObject * object , PyObject * offset , PyObject * value );
228
+ extern PyObject * WriteULongLongMember (PyObject * object , PyObject * offset , PyObject * value );
229
+ extern PyObject * WritePySSizeT (PyObject * object , PyObject * offset , PyObject * value );
207
230
208
231
extern PyObject marker_struct ;
209
232
#define ERROR_MARKER &marker_struct
0 commit comments