diff --git a/atom/src/behaviors.h b/atom/src/behaviors.h index 5c82ec83..71df9347 100644 --- a/atom/src/behaviors.h +++ b/atom/src/behaviors.h @@ -205,6 +205,7 @@ enum Mode: uint8_t Property, ObjectMethod_Name, MemberMethod_Object, + Last // sentinel }; } // namespace GetState diff --git a/atom/src/defaultvaluebehavior.cpp b/atom/src/defaultvaluebehavior.cpp index 3e547c48..c29430b8 100644 --- a/atom/src/defaultvaluebehavior.cpp +++ b/atom/src/defaultvaluebehavior.cpp @@ -203,11 +203,10 @@ handlers[] = { object_method_handler, object_method_name_handler, member_method_object_handler, - no_op_handler, - no_op_handler }; -static_assert( sizeof(handlers) / sizeof(handler) == 16, "Must be exactly 16 handlers" ); +static_assert( sizeof(handlers) / sizeof(handler) == DefaultValue::Mode::Last, "Handler missing" ); + } // namespace @@ -215,7 +214,7 @@ static_assert( sizeof(handlers) / sizeof(handler) == 16, "Must be exactly 16 han PyObject* Member::default_value( CAtom* atom ) { - return handlers[ get_default_value_mode() & 0xf ]( this, atom ); + return handlers[ get_default_value_mode() ]( this, atom ); } diff --git a/atom/src/delattrbehavior.cpp b/atom/src/delattrbehavior.cpp index 651850d6..a466c21b 100644 --- a/atom/src/delattrbehavior.cpp +++ b/atom/src/delattrbehavior.cpp @@ -192,7 +192,8 @@ handlers[] = { property_handler }; -static_assert( sizeof(handlers) / sizeof(handler) == 8, "Must be exactly 8 handlers" ); +static_assert( sizeof(handlers) / sizeof(handler) == DelAttr::Mode::Last, "Handler missing" ); + } // namespace @@ -200,7 +201,7 @@ static_assert( sizeof(handlers) / sizeof(handler) == 8, "Must be exactly 8 handl int Member::delattr( CAtom* atom ) { - return handlers[ get_delattr_mode() & 0x7 ]( this, atom ); + return handlers[ get_delattr_mode() ]( this, atom ); } diff --git a/atom/src/getattrbehavior.cpp b/atom/src/getattrbehavior.cpp index e54a0205..1d87a66b 100644 --- a/atom/src/getattrbehavior.cpp +++ b/atom/src/getattrbehavior.cpp @@ -257,13 +257,9 @@ handlers[] = { object_method_handler, object_method_name_handler, member_method_object_handler, - no_op_handler, - no_op_handler, - no_op_handler, - no_op_handler }; -static_assert( sizeof(handlers) / sizeof(handler) == 16, "Must be exactly 16 handlers" ); +static_assert( sizeof(handlers) / sizeof(handler) == GetAttr::Mode::Last, "Handler missing" ); } // namespace @@ -271,7 +267,7 @@ static_assert( sizeof(handlers) / sizeof(handler) == 16, "Must be exactly 16 han PyObject* Member::getattr( CAtom* atom ) { - return handlers[ get_getattr_mode() & 0xf ]( this, atom ); + return handlers[ get_getattr_mode() ]( this, atom ); } } // namespace atom diff --git a/atom/src/getstatebehavior.cpp b/atom/src/getstatebehavior.cpp index b7a17e2c..7727180e 100644 --- a/atom/src/getstatebehavior.cpp +++ b/atom/src/getstatebehavior.cpp @@ -125,11 +125,9 @@ handlers[] = { property_handler, object_method_name_handler, member_method_object_handler, - include_handler, - include_handler }; -static_assert( sizeof(handlers) / sizeof(handler) == 8, "Must be exactly 8 handlers" ); +static_assert( sizeof(handlers) / sizeof(handler) == GetState::Mode::Last, "Handler missing" ); } // namespace @@ -137,7 +135,7 @@ static_assert( sizeof(handlers) / sizeof(handler) == 8, "Must be exactly 8 handl PyObject* Member::should_getstate( CAtom* atom ) { - return handlers[ get_getstate_mode() & 0x7 ]( this, atom ); + return handlers[ get_getstate_mode() ]( this, atom ); } } // namespace atom diff --git a/atom/src/postgetattrbehavior.cpp b/atom/src/postgetattrbehavior.cpp index 919a0998..575d1277 100644 --- a/atom/src/postgetattrbehavior.cpp +++ b/atom/src/postgetattrbehavior.cpp @@ -94,12 +94,9 @@ handlers[] = { object_method_value_handler, object_method_name_value_handler, member_method_object_value_handler, - no_op_handler, - no_op_handler, - no_op_handler, }; -static_assert( sizeof(handlers) / sizeof(handler) == 8, "Must be exactly 8 handlers" ); +static_assert( sizeof(handlers) / sizeof(handler) == PostGetAttr::Mode::Last, "Handler missing" ); } // namespace @@ -107,7 +104,7 @@ static_assert( sizeof(handlers) / sizeof(handler) == 8, "Must be exactly 8 handl PyObject* Member::post_getattr( CAtom* atom, PyObject* value ) { - return handlers[ get_post_getattr_mode() & 0x7 ]( this, atom, value ); + return handlers[ get_post_getattr_mode() ]( this, atom, value ); } diff --git a/atom/src/postsetattrbehavior.cpp b/atom/src/postsetattrbehavior.cpp index c4af2089..d12bb11a 100644 --- a/atom/src/postsetattrbehavior.cpp +++ b/atom/src/postsetattrbehavior.cpp @@ -107,12 +107,9 @@ handlers[] = { object_method_old_new_handler, object_method_name_old_new_handler, member_method_object_old_new_handler, - no_op_handler, - no_op_handler, - no_op_handler }; -static_assert( sizeof(handlers) / sizeof(handler) == 8, "Must be exactly 8 handlers" ); +static_assert( sizeof(handlers) / sizeof(handler) == PostSetAttr::Mode::Last, "Handler missing" ); } // namespace @@ -120,7 +117,7 @@ static_assert( sizeof(handlers) / sizeof(handler) == 8, "Must be exactly 8 handl int Member::post_setattr( CAtom* atom, PyObject* oldvalue, PyObject* newvalue ) { - return handlers[ get_post_setattr_mode() & 0x7 ]( this, atom, oldvalue, newvalue ); + return handlers[ get_post_setattr_mode() ]( this, atom, oldvalue, newvalue ); } diff --git a/atom/src/postvalidatebehavior.cpp b/atom/src/postvalidatebehavior.cpp index 4f0527e2..db9cdfbe 100644 --- a/atom/src/postvalidatebehavior.cpp +++ b/atom/src/postvalidatebehavior.cpp @@ -98,12 +98,9 @@ handlers[] = { object_method_old_new_handler, object_method_name_old_new_handler, member_method_object_old_new_handler, - no_op_handler, - no_op_handler, - no_op_handler }; -static_assert( sizeof(handlers) / sizeof(handler) == 8, "Must be exactly 8 handlers" ); +static_assert( sizeof(handlers) / sizeof(handler) == PostValidate::Mode::Last, "Handler missing" ); } // namespace @@ -111,7 +108,7 @@ static_assert( sizeof(handlers) / sizeof(handler) == 8, "Must be exactly 8 handl PyObject* Member::post_validate( CAtom* atom, PyObject* oldvalue, PyObject* newvalue ) { - return handlers[ get_post_validate_mode() & 0x7 ]( this, atom, oldvalue, newvalue ); + return handlers[ get_post_validate_mode() ]( this, atom, oldvalue, newvalue ); } } // namespace atom diff --git a/atom/src/setattrbehavior.cpp b/atom/src/setattrbehavior.cpp index 0497cf16..be4b8a60 100644 --- a/atom/src/setattrbehavior.cpp +++ b/atom/src/setattrbehavior.cpp @@ -378,12 +378,9 @@ handlers[] = { object_method_value_handler, object_method_name_value_handler, member_method_object_value_handler, - no_op_handler, - no_op_handler, - no_op_handler }; -static_assert( sizeof(handlers) / sizeof(handler) == 16, "Must be exactly 16 handlers" ); +static_assert( sizeof(handlers) / sizeof(handler) == SetAttr::Mode::Last, "Handler missing" ); } // namespace @@ -391,7 +388,7 @@ static_assert( sizeof(handlers) / sizeof(handler) == 16, "Must be exactly 16 han int Member::setattr( CAtom* atom, PyObject* value ) { - return handlers[ get_setattr_mode() & 0xf ]( this, atom, value ); + return handlers[ get_setattr_mode() ]( this, atom, value ); } diff --git a/atom/src/validatebehavior.cpp b/atom/src/validatebehavior.cpp index 4746f5dd..b91c6603 100644 --- a/atom/src/validatebehavior.cpp +++ b/atom/src/validatebehavior.cpp @@ -1000,6 +1000,7 @@ handlers[] = { member_method_object_old_new_handler }; +static_assert( sizeof(handlers) / sizeof(handler) == Validate::Mode::Last, "Handler missing" ); } // namespace @@ -1007,8 +1008,6 @@ handlers[] = { PyObject* Member::validate( CAtom* atom, PyObject* oldvalue, PyObject* newvalue ) { - if( get_validate_mode() >= sizeof( handlers ) / sizeof( handler ) ) - return no_op_handler( this, atom, oldvalue, newvalue ); // LCOV_EXCL_LINE return handlers[ get_validate_mode() ]( this, atom, oldvalue, newvalue ); }