@@ -564,30 +564,19 @@ PyGccFunction_TypeObj_get_argument_types(struct PyGccTree * self, void *closure)
564564
565565 /* Get length of chain */
566566 for (size = 0 , iter = head ;
567- iter && iter != error_mark_node ;
567+ iter && iter != error_mark_node && iter != void_list_node ;
568568 iter = TREE_CHAIN (iter ), size ++ ) {
569569 /* empty */
570570 }
571571
572572 /* "size" should now be the length of the chain */
573573
574- /* The last element in the list is a VOID_TYPE; don't add this;
575- see dump_function_declaration() in gcc/tree-pretty-print.c */
576- assert (size > 0 );
577- size -- ;
578-
579574 result = PyTuple_New (size );
580575 if (!result ) {
581576 return NULL ;
582577 }
583578
584- /* Iterate, but don't visit the final element: */
585- for (i = 0 , iter = head ;
586- iter && TREE_CHAIN (iter ) && iter != error_mark_node ;
587- iter = TREE_CHAIN (iter ), i ++ ) {
588-
589- assert (i < size );
590-
579+ for (i = 0 , iter = head ; i < size ; iter = TREE_CHAIN (iter ), i ++ ) {
591580 item = PyGccTree_New (gcc_private_make_tree (TREE_VALUE (iter )));
592581 if (!item ) {
593582 goto error ;
@@ -605,12 +594,36 @@ PyGccFunction_TypeObj_get_argument_types(struct PyGccTree * self, void *closure)
605594 return NULL ;
606595}
607596
597+ PyObject *
598+ PyGccFunction_TypeObj_is_variadic (struct PyGccTree * self , void * closure )
599+ {
600+ tree iter ;
601+ tree head = TYPE_ARG_TYPES (self -> t .inner );
602+
603+ /* Get length of chain */
604+ for (iter = head ;
605+ iter && iter != error_mark_node && iter != void_list_node ;
606+ iter = TREE_CHAIN (iter )) {
607+ /* empty */
608+ }
609+
610+ if (iter == void_list_node )
611+ Py_RETURN_FALSE ;
612+ Py_RETURN_TRUE ;
613+ }
614+
608615PyObject *
609616PyGccMethodType_get_argument_types (struct PyGccTree * self ,void * closure )
610617{
611618 return PyGccFunction_TypeObj_get_argument_types (self , closure );
612619}
613620
621+ PyObject *
622+ PyGccMethodType_is_variadic (struct PyGccTree * self ,void * closure )
623+ {
624+ return PyGccFunction_TypeObj_is_variadic (self , closure );
625+ }
626+
614627PyObject *
615628PyGccConstructor_get_elements (PyObject * self , void * closure )
616629{
0 commit comments