@@ -454,18 +454,18 @@ Member_set_index( Member* self, PyObject* value )
454454}
455455
456456
457- // 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 )
457+ template <typename T> bool
458+ parse_mode_and_context ( PyObject*const *args, Py_ssize_t n, PyObject** context, T& mode )
460459{
461460
462461 if ( n != 2 )
463- return 0 ;
462+ return false ;
464463 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 ];
464+ return false ;
465+ *context = args[1 ];
466+ if ( !Member::check_context ( mode, *context ) )
467+ return false ;
468+ return true ;
469469}
470470
471471
@@ -489,8 +489,8 @@ PyObject*
489489Member_set_getattr_mode ( Member* self, PyObject*const *args, Py_ssize_t n )
490490{
491491 GetAttr::Mode mode;
492- PyObject* context = parse_mode_and_context ( args, n, mode ) ;
493- if ( !context )
492+ PyObject* context;
493+ if ( !parse_mode_and_context ( args, n, & context, mode ) )
494494 return 0 ;
495495 self->set_getattr_mode ( mode );
496496 cppy::replace ( &self->getattr_context , context );
@@ -518,8 +518,8 @@ PyObject*
518518Member_set_setattr_mode ( Member* self, PyObject*const *args, Py_ssize_t n )
519519{
520520 SetAttr::Mode mode;
521- PyObject* context = parse_mode_and_context ( args, n, mode ) ;
522- if ( !context )
521+ PyObject* context;
522+ if ( !parse_mode_and_context ( args, n, & context, mode ) )
523523 return 0 ;
524524 self->set_setattr_mode ( mode );
525525 cppy::replace ( &self->setattr_context , context );
@@ -547,8 +547,8 @@ PyObject*
547547Member_set_delattr_mode ( Member* self, PyObject*const *args, Py_ssize_t n )
548548{
549549 DelAttr::Mode mode;
550- PyObject* context = parse_mode_and_context ( args, n, mode ) ;
551- if ( !context )
550+ PyObject* context;
551+ if ( !parse_mode_and_context ( args, n, & context, mode ) )
552552 return 0 ;
553553 self->set_delattr_mode ( mode );
554554 cppy::replace ( &self->delattr_context , context );
@@ -576,8 +576,8 @@ PyObject*
576576Member_set_post_getattr_mode ( Member* self, PyObject*const *args, Py_ssize_t n )
577577{
578578 PostGetAttr::Mode mode;
579- PyObject* context = parse_mode_and_context ( args, n, mode ) ;
580- if ( !context )
579+ PyObject* context;
580+ if ( !parse_mode_and_context ( args, n, & context, mode ) )
581581 return 0 ;
582582 self->set_post_getattr_mode ( mode );
583583 cppy::replace (&self->post_getattr_context , context);
@@ -605,8 +605,8 @@ PyObject*
605605Member_set_post_setattr_mode ( Member* self, PyObject*const *args, Py_ssize_t n )
606606{
607607 PostSetAttr::Mode mode;
608- PyObject* context = parse_mode_and_context ( args, n, mode ) ;
609- if ( !context )
608+ PyObject* context;
609+ if ( !parse_mode_and_context ( args, n, & context, mode ) )
610610 return 0 ;
611611 self->set_post_setattr_mode ( mode );
612612 cppy::replace ( &self->post_setattr_context , context );
@@ -634,8 +634,8 @@ PyObject*
634634Member_set_default_value_mode ( Member* self, PyObject*const *args, Py_ssize_t n )
635635{
636636 DefaultValue::Mode mode;
637- PyObject* context = parse_mode_and_context ( args, n, mode ) ;
638- if ( !context )
637+ PyObject* context;
638+ if ( !parse_mode_and_context ( args, n, & context, mode ) )
639639 return 0 ;
640640 self->set_default_value_mode ( mode );
641641 cppy::replace ( &self->default_value_context , context );
@@ -663,8 +663,8 @@ PyObject*
663663Member_set_validate_mode ( Member* self, PyObject*const *args, Py_ssize_t n )
664664{
665665 Validate::Mode mode;
666- PyObject* context = parse_mode_and_context ( args, n, mode ) ;
667- if ( !context )
666+ PyObject* context;
667+ if ( !parse_mode_and_context ( args, n, & context, mode ) )
668668 return 0 ;
669669 self->set_validate_mode ( mode );
670670 cppy::replace ( &self->validate_context , context );
@@ -692,8 +692,8 @@ PyObject*
692692Member_set_post_validate_mode ( Member* self, PyObject*const *args, Py_ssize_t n )
693693{
694694 PostValidate::Mode mode;
695- PyObject* context = parse_mode_and_context ( args, n, mode ) ;
696- if ( !context )
695+ PyObject* context;
696+ if ( !parse_mode_and_context ( args, n, & context, mode ) )
697697 return 0 ;
698698 self->set_post_validate_mode ( mode );
699699 cppy::replace ( &self->post_validate_context , context );
@@ -721,8 +721,8 @@ PyObject*
721721Member_set_getstate_mode ( Member* self, PyObject*const *args, Py_ssize_t n )
722722{
723723 GetState::Mode mode;
724- PyObject* context = parse_mode_and_context ( args, n, mode ) ;
725- if ( !context )
724+ PyObject* context;
725+ if ( !parse_mode_and_context ( args, n, & context, mode ) )
726726 return 0 ;
727727 self->set_getstate_mode ( mode );
728728 cppy::replace ( &self->getstate_context , context );
0 commit comments