@@ -44,6 +44,7 @@ void *PY_TRUFFLE_CEXT;
4444void * PY_BUILTIN ;
4545void * Py_NoValue ;
4646
47+ void * (* pytruffle_decorate_function )(void * fun0 , void * fun1 );
4748
4849PyObject * (* PY_TRUFFLE_LANDING )(void * rcv , void * name , ...);
4950void * (* PY_TRUFFLE_LANDING_L )(void * rcv , void * name , ...);
@@ -62,6 +63,8 @@ static void initialize_upcall_functions() {
6263 PY_TRUFFLE_CEXT = (void * )polyglot_eval ("python" , "import python_cext\npython_cext" );
6364 PY_BUILTIN = (void * )polyglot_eval ("python" , "import builtins\nbuiltins" );
6465
66+ pytruffle_decorate_function = ((void * (* )(void * fun0 , void * fun1 ))polyglot_get_member (PY_TRUFFLE_CEXT , polyglot_from_string ("PyTruffle_Decorate_Function" , SRC_CS )));
67+
6568 PY_TRUFFLE_LANDING = ((PyObject * (* )(void * rcv , void * name , ...))polyglot_get_member (PY_TRUFFLE_CEXT , polyglot_from_string ("PyTruffle_Upcall" , SRC_CS )));
6669 PY_TRUFFLE_LANDING_L = ((void * (* )(void * rcv , void * name , ...))polyglot_get_member (PY_TRUFFLE_CEXT , polyglot_from_string ("PyTruffle_Upcall_l" , SRC_CS )));
6770 PY_TRUFFLE_LANDING_D = ((void * (* )(void * rcv , void * name , ...))polyglot_get_member (PY_TRUFFLE_CEXT , polyglot_from_string ("PyTruffle_Upcall_d" , SRC_CS )));
@@ -167,6 +170,7 @@ initialize_type(_PyWeakref_ProxyType, ProxyType, PyWeakReference);
167170initialize_type (_PyWeakref_CallableProxyType , CallableProxyType , PyWeakReference );
168171
169172POLYGLOT_DECLARE_TYPE (PyThreadState );
173+ POLYGLOT_DECLARE_TYPE (newfunc );
170174
171175static void initialize_globals () {
172176 // register native NULL
@@ -260,7 +264,7 @@ PyObject* to_sulong(void *o) {
260264
261265/** to be used from Java code only; reads native 'ob_type' field */
262266PyTypeObject * get_ob_type (PyObject * obj ) {
263- return polyglot_from__typeobject ( native_type_to_java (obj -> ob_type ) );
267+ return native_type_to_java (obj -> ob_type );
264268}
265269
266270/** to be used from Java code only; reads native 'tp_dict' field */
@@ -328,6 +332,11 @@ polyglot_typeid get_thread_state_typeid() {
328332 return polyglot_PyThreadState_typeid ();
329333}
330334
335+ /** to be used from Java code only; returns the type ID newfunc */
336+ polyglot_typeid get_newfunc_typeid () {
337+ return polyglot_newfunc_typeid ();
338+ }
339+
331340typedef struct PyObjectHandle {
332341 PyObject_HEAD
333342} PyObjectHandle ;
@@ -613,135 +622,8 @@ int PyTruffle_Debug(void *arg) {
613622 return 0 ;
614623}
615624
616- typedef PyObject * (* f0 )();
617- typedef PyObject * (* f1 )(PyObject * );
618- typedef PyObject * (* f2 )(PyObject * , PyObject * );
619- typedef PyObject * (* f3 )(PyObject * , PyObject * , PyObject * );
620- typedef PyObject * (* f4 )(PyObject * , PyObject * , PyObject * , PyObject * );
621- typedef PyObject * (* f5 )(PyObject * , PyObject * , PyObject * , PyObject * , PyObject * );
622- typedef PyObject * (* f6 )(PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * );
623- typedef PyObject * (* f7 )(PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * );
624- typedef PyObject * (* f8 )(PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * );
625- typedef PyObject * (* f9 )(PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * );
626- typedef PyObject * (* f10 )(PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * );
627- typedef PyObject * (* f11 )(PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * );
628- typedef PyObject * (* f12 )(PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * );
629- typedef PyObject * (* f13 )(PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * );
630- typedef PyObject * (* f14 )(PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * );
631- typedef PyObject * (* f15 )(PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * );
632- typedef PyObject * (* f16 )(PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * );
633- typedef PyObject * (* f17 )(PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * );
634- typedef PyObject * (* f18 )(PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * );
635- typedef PyObject * (* f19 )(PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * );
636- typedef PyObject * (* f20 )(PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * , PyObject * );
637-
638- #define _PICK_FUN_CAST (DUMMY , _0 , _1 , _2 , _3 , _4 , _5 , _6 , _7 , _8 , _9 , _10 , _11 , _12 , _13 , _14 , _15 , _16 , _17 , _18 , _19 , NAME , ...) NAME
639- #define _CALL_ARITY (FUN , ...) ( (_PICK_FUN_CAST(NULL, ##__VA_ARGS__, f20, f19, f18, f17, f16, f15, f14, f13, f12, f11, f10, f9, f8, f7, f6, f5, f4, f3, f2, f1, f0))(FUN))(__VA_ARGS__)
640625#define ARG (__n ) ((PyObject*)polyglot_get_arg((__n)))
641626
642- NO_INLINE
643- int wrap_setter (PyCFunction fun , PyObject * self , PyObject * value , void * closure ) {
644- return _CALL_ARITY (fun , ARG (1 ), ARG (2 ), ARG (3 ));
645- }
646-
647- NO_INLINE
648- void * wrap_direct (PyCFunction fun , ...) {
649- PyObject * res = NULL ;
650- switch (polyglot_get_arg_count ()- 1 ) {
651- case 0 :
652- res = _CALL_ARITY (fun );
653- break ;
654- case 1 :
655- res = _CALL_ARITY (fun , ARG (1 ));
656- break ;
657- case 2 :
658- res = _CALL_ARITY (fun , ARG (1 ), ARG (2 ));
659- break ;
660- case 3 :
661- res = _CALL_ARITY (fun , ARG (1 ), ARG (2 ), ARG (3 ));
662- break ;
663- case 4 :
664- res = _CALL_ARITY (fun , ARG (1 ), ARG (2 ), ARG (3 ), ARG (4 ));
665- break ;
666- case 5 :
667- res = _CALL_ARITY (fun , ARG (1 ), ARG (2 ), ARG (3 ), ARG (4 ), ARG (5 ));
668- break ;
669- case 6 :
670- res = _CALL_ARITY (fun , ARG (1 ), ARG (2 ), ARG (3 ), ARG (4 ), ARG (5 ), ARG (6 ));
671- break ;
672- case 7 :
673- res = _CALL_ARITY (fun , ARG (1 ), ARG (2 ), ARG (3 ), ARG (4 ), ARG (5 ), ARG (6 ), ARG (7 ));
674- break ;
675- case 8 :
676- res = _CALL_ARITY (fun , ARG (1 ), ARG (2 ), ARG (3 ), ARG (4 ), ARG (5 ), ARG (6 ), ARG (7 ), ARG (8 ));
677- break ;
678- case 9 :
679- res = _CALL_ARITY (fun , ARG (1 ), ARG (2 ), ARG (3 ), ARG (4 ), ARG (5 ), ARG (6 ), ARG (7 ), ARG (8 ), ARG (9 ));
680- break ;
681- case 10 :
682- res = _CALL_ARITY (fun , ARG (1 ), ARG (2 ), ARG (3 ), ARG (4 ), ARG (5 ), ARG (6 ), ARG (7 ), ARG (8 ), ARG (9 ), ARG (10 ));
683- break ;
684- case 11 :
685- res = _CALL_ARITY (fun , ARG (1 ), ARG (2 ), ARG (3 ), ARG (4 ), ARG (5 ), ARG (6 ), ARG (7 ), ARG (8 ), ARG (9 ), ARG (10 ), ARG (11 ));
686- break ;
687- case 12 :
688- res = _CALL_ARITY (fun , ARG (1 ), ARG (2 ), ARG (3 ), ARG (4 ), ARG (5 ), ARG (6 ), ARG (7 ), ARG (8 ), ARG (9 ), ARG (10 ), ARG (11 ), ARG (12 ));
689- break ;
690- case 13 :
691- res = _CALL_ARITY (fun , ARG (1 ), ARG (2 ), ARG (3 ), ARG (4 ), ARG (5 ), ARG (6 ), ARG (7 ), ARG (8 ), ARG (9 ), ARG (10 ), ARG (11 ), ARG (12 ), ARG (13 ));
692- break ;
693- case 14 :
694- res = _CALL_ARITY (fun , ARG (1 ), ARG (2 ), ARG (3 ), ARG (4 ), ARG (5 ), ARG (6 ), ARG (7 ), ARG (8 ), ARG (9 ), ARG (10 ), ARG (11 ), ARG (12 ), ARG (13 ), ARG (14 ));
695- break ;
696- case 15 :
697- res = _CALL_ARITY (fun , ARG (1 ), ARG (2 ), ARG (3 ), ARG (4 ), ARG (5 ), ARG (6 ), ARG (7 ), ARG (8 ), ARG (9 ), ARG (10 ), ARG (11 ), ARG (12 ), ARG (13 ), ARG (14 ), ARG (15 ));
698- break ;
699- case 16 :
700- res = _CALL_ARITY (fun , ARG (1 ), ARG (2 ), ARG (3 ), ARG (4 ), ARG (5 ), ARG (6 ), ARG (7 ), ARG (8 ), ARG (9 ), ARG (10 ), ARG (11 ), ARG (12 ), ARG (13 ), ARG (14 ), ARG (15 ), ARG (16 ));
701- break ;
702- case 17 :
703- res = _CALL_ARITY (fun , ARG (1 ), ARG (2 ), ARG (3 ), ARG (4 ), ARG (5 ), ARG (6 ), ARG (7 ), ARG (8 ), ARG (9 ), ARG (10 ), ARG (11 ), ARG (12 ), ARG (13 ), ARG (14 ), ARG (15 ), ARG (16 ), ARG (17 ));
704- break ;
705- case 18 :
706- res = _CALL_ARITY (fun , ARG (1 ), ARG (2 ), ARG (3 ), ARG (4 ), ARG (5 ), ARG (6 ), ARG (7 ), ARG (8 ), ARG (9 ), ARG (10 ), ARG (11 ), ARG (12 ), ARG (13 ), ARG (14 ), ARG (15 ), ARG (16 ), ARG (17 ), ARG (18 ));
707- break ;
708- case 19 :
709- res = _CALL_ARITY (fun , ARG (1 ), ARG (2 ), ARG (3 ), ARG (4 ), ARG (5 ), ARG (6 ), ARG (7 ), ARG (8 ), ARG (9 ), ARG (10 ), ARG (11 ), ARG (12 ), ARG (13 ), ARG (14 ), ARG (15 ), ARG (16 ), ARG (17 ), ARG (18 ), ARG (19 ));
710- break ;
711- case 20 :
712- res = _CALL_ARITY (fun , ARG (1 ), ARG (2 ), ARG (3 ), ARG (4 ), ARG (5 ), ARG (6 ), ARG (7 ), ARG (8 ), ARG (9 ), ARG (10 ), ARG (11 ), ARG (12 ), ARG (13 ), ARG (14 ), ARG (15 ), ARG (16 ), ARG (17 ), ARG (18 ), ARG (19 ), ARG (20 ));
713- break ;
714- default :
715- _PyErr_BadInternalCall (__FILE__ , __LINE__ );
716- res = NULL ;
717- }
718- return native_to_java (res );
719- }
720-
721- void * wrap_varargs (PyCFunction fun , PyObject * module , PyObject * varargs ) {
722- return native_to_java (fun (module , varargs ));
723- }
724-
725- void * wrap_keywords (PyCFunctionWithKeywords fun , PyObject * module , PyObject * varargs , PyObject * kwargs ) {
726- return native_to_java (fun (module , varargs , kwargs ));
727- }
728-
729- void * wrap_noargs (PyCFunction fun , PyObject * module , PyObject * pnone ) {
730- return native_to_java (fun (module , pnone ));
731- }
732-
733- void * wrap_fastcall (_PyCFunctionFast fun , PyObject * self , PyObject * * args , PyObject * nargs ) {
734- return native_to_java (fun (self , PySequence_Fast_ITEMS ((PyObject * )args ), PyLong_AsSsize_t (nargs )));
735- }
736-
737- void * wrap_fastcall_with_keywords (_PyCFunctionFastWithKeywords fun , PyObject * self , PyObject * * args , PyObject * nargs , PyObject * kwnames ) {
738- return native_to_java (fun (self , PySequence_Fast_ITEMS ((PyObject * )args ), PyLong_AsSsize_t (nargs ), kwnames ));
739- }
740-
741- void * wrap_unsupported (void * fun , ...) {
742- return NULL ;
743- }
744-
745627int truffle_ptr_compare (void * x , void * y , int op ) {
746628 switch (op ) {
747629 case Py_LT :
0 commit comments