@@ -44,6 +44,7 @@ void *PY_TRUFFLE_CEXT;
44
44
void * PY_BUILTIN ;
45
45
void * Py_NoValue ;
46
46
47
+ void * (* pytruffle_decorate_function )(void * fun0 , void * fun1 );
47
48
48
49
PyObject * (* PY_TRUFFLE_LANDING )(void * rcv , void * name , ...);
49
50
void * (* PY_TRUFFLE_LANDING_L )(void * rcv , void * name , ...);
@@ -62,6 +63,8 @@ static void initialize_upcall_functions() {
62
63
PY_TRUFFLE_CEXT = (void * )polyglot_eval ("python" , "import python_cext\npython_cext" );
63
64
PY_BUILTIN = (void * )polyglot_eval ("python" , "import builtins\nbuiltins" );
64
65
66
+ pytruffle_decorate_function = ((void * (* )(void * fun0 , void * fun1 ))polyglot_get_member (PY_TRUFFLE_CEXT , polyglot_from_string ("PyTruffle_Decorate_Function" , SRC_CS )));
67
+
65
68
PY_TRUFFLE_LANDING = ((PyObject * (* )(void * rcv , void * name , ...))polyglot_get_member (PY_TRUFFLE_CEXT , polyglot_from_string ("PyTruffle_Upcall" , SRC_CS )));
66
69
PY_TRUFFLE_LANDING_L = ((void * (* )(void * rcv , void * name , ...))polyglot_get_member (PY_TRUFFLE_CEXT , polyglot_from_string ("PyTruffle_Upcall_l" , SRC_CS )));
67
70
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);
167
170
initialize_type (_PyWeakref_CallableProxyType , CallableProxyType , PyWeakReference );
168
171
169
172
POLYGLOT_DECLARE_TYPE (PyThreadState );
173
+ POLYGLOT_DECLARE_TYPE (newfunc );
170
174
171
175
static void initialize_globals () {
172
176
// register native NULL
@@ -260,7 +264,7 @@ PyObject* to_sulong(void *o) {
260
264
261
265
/** to be used from Java code only; reads native 'ob_type' field */
262
266
PyTypeObject * 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 );
264
268
}
265
269
266
270
/** to be used from Java code only; reads native 'tp_dict' field */
@@ -328,6 +332,11 @@ polyglot_typeid get_thread_state_typeid() {
328
332
return polyglot_PyThreadState_typeid ();
329
333
}
330
334
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
+
331
340
typedef struct PyObjectHandle {
332
341
PyObject_HEAD
333
342
} PyObjectHandle ;
@@ -613,135 +622,8 @@ int PyTruffle_Debug(void *arg) {
613
622
return 0 ;
614
623
}
615
624
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__)
640
625
#define ARG (__n ) ((PyObject*)polyglot_get_arg((__n)))
641
626
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
-
745
627
int truffle_ptr_compare (void * x , void * y , int op ) {
746
628
switch (op ) {
747
629
case Py_LT :
0 commit comments