@@ -455,17 +455,18 @@ Member_set_index( Member* self, PyObject* value )
455455
456456
457457// Returns borrowed reference to context or null
458- template <typename T> PyObject*
459- parse_mode_and_context ( PyObject*const *args, Py_ssize_t n, T& mode )
458+ template <typename T> bool
459+ parse_mode_and_context ( PyObject*const *args, Py_ssize_t n, PyObject** context, T& mode )
460460{
461461
462462 if ( n != 2 )
463- return 0 ;
463+ return false ;
464464 if ( !EnumTypes::from_py_enum ( args[0 ], mode ) )
465- return 0 ;
466- if ( !Member::check_context ( mode, args[1 ] ) )
467- return 0 ;
468- return args[1 ];
465+ return false ;
466+ *context = args[1 ];
467+ if ( !Member::check_context ( mode, *context ) )
468+ return false ;
469+ return true ;
469470}
470471
471472
@@ -489,8 +490,8 @@ PyObject*
489490Member_set_getattr_mode ( Member* self, PyObject*const *args, Py_ssize_t n )
490491{
491492 GetAttr::Mode mode;
492- PyObject* context = parse_mode_and_context ( args, n, mode ) ;
493- if ( !context )
493+ PyObject* context;
494+ if ( !parse_mode_and_context ( args, n, & context, mode ) )
494495 return 0 ;
495496 self->set_getattr_mode ( mode );
496497 cppy::replace ( &self->getattr_context , context );
@@ -518,8 +519,8 @@ PyObject*
518519Member_set_setattr_mode ( Member* self, PyObject*const *args, Py_ssize_t n )
519520{
520521 SetAttr::Mode mode;
521- PyObject* context = parse_mode_and_context ( args, n, mode ) ;
522- if ( !context )
522+ PyObject* context;
523+ if ( !parse_mode_and_context ( args, n, & context, mode ) )
523524 return 0 ;
524525 self->set_setattr_mode ( mode );
525526 cppy::replace ( &self->setattr_context , context );
@@ -547,8 +548,8 @@ PyObject*
547548Member_set_delattr_mode ( Member* self, PyObject*const *args, Py_ssize_t n )
548549{
549550 DelAttr::Mode mode;
550- PyObject* context = parse_mode_and_context ( args, n, mode ) ;
551- if ( !context )
551+ PyObject* context;
552+ if ( !parse_mode_and_context ( args, n, & context, mode ) )
552553 return 0 ;
553554 self->set_delattr_mode ( mode );
554555 cppy::replace ( &self->delattr_context , context );
@@ -576,8 +577,8 @@ PyObject*
576577Member_set_post_getattr_mode ( Member* self, PyObject*const *args, Py_ssize_t n )
577578{
578579 PostGetAttr::Mode mode;
579- PyObject* context = parse_mode_and_context ( args, n, mode ) ;
580- if ( !context )
580+ PyObject* context;
581+ if ( !parse_mode_and_context ( args, n, & context, mode ) )
581582 return 0 ;
582583 self->set_post_getattr_mode ( mode );
583584 cppy::replace (&self->post_getattr_context , context);
@@ -605,8 +606,8 @@ PyObject*
605606Member_set_post_setattr_mode ( Member* self, PyObject*const *args, Py_ssize_t n )
606607{
607608 PostSetAttr::Mode mode;
608- PyObject* context = parse_mode_and_context ( args, n, mode ) ;
609- if ( !context )
609+ PyObject* context;
610+ if ( !parse_mode_and_context ( args, n, & context, mode ) )
610611 return 0 ;
611612 self->set_post_setattr_mode ( mode );
612613 cppy::replace ( &self->post_setattr_context , context );
@@ -634,8 +635,8 @@ PyObject*
634635Member_set_default_value_mode ( Member* self, PyObject*const *args, Py_ssize_t n )
635636{
636637 DefaultValue::Mode mode;
637- PyObject* context = parse_mode_and_context ( args, n, mode ) ;
638- if ( !context )
638+ PyObject* context;
639+ if ( !parse_mode_and_context ( args, n, & context, mode ) )
639640 return 0 ;
640641 self->set_default_value_mode ( mode );
641642 cppy::replace ( &self->default_value_context , context );
@@ -663,8 +664,8 @@ PyObject*
663664Member_set_validate_mode ( Member* self, PyObject*const *args, Py_ssize_t n )
664665{
665666 Validate::Mode mode;
666- PyObject* context = parse_mode_and_context ( args, n, mode ) ;
667- if ( !context )
667+ PyObject* context;
668+ if ( !parse_mode_and_context ( args, n, & context, mode ) )
668669 return 0 ;
669670 self->set_validate_mode ( mode );
670671 cppy::replace ( &self->validate_context , context );
@@ -692,8 +693,8 @@ PyObject*
692693Member_set_post_validate_mode ( Member* self, PyObject*const *args, Py_ssize_t n )
693694{
694695 PostValidate::Mode mode;
695- PyObject* context = parse_mode_and_context ( args, n, mode ) ;
696- if ( !context )
696+ PyObject* context;
697+ if ( !parse_mode_and_context ( args, n, & context, mode ) )
697698 return 0 ;
698699 self->set_post_validate_mode ( mode );
699700 cppy::replace ( &self->post_validate_context , context );
@@ -721,8 +722,8 @@ PyObject*
721722Member_set_getstate_mode ( Member* self, PyObject*const *args, Py_ssize_t n )
722723{
723724 GetState::Mode mode;
724- PyObject* context = parse_mode_and_context ( args, n, mode ) ;
725- if ( !context )
725+ PyObject* context;
726+ if ( !parse_mode_and_context ( args, n, & context, mode ) )
726727 return 0 ;
727728 self->set_getstate_mode ( mode );
728729 cppy::replace ( &self->getstate_context , context );
0 commit comments