#define SOMETHING1 STMT_START { assert( something ); if(some_complex_condition) wrapped_function1( aTHX_, ... ); assert(something_else ) } STMT_END #define SOMETHING2 STMT_START { assert( something ); if(some_complex_condition) wrapped_function2( aTHX_, ... ); assert(something_else ) } STMT_END #define SOMETHING3 STMT_START { assert( something ); if(some_complex_condition) wrapped_function3( aTHX_, ... ); assert(something_else ) } STMT_END int someFunction( aTHX_ ... ) { dATHX; ...; SOMETHING1( ... ); ...; SOMETHING2( ... ); ...; SOMETHING3( ... ); RETURN; }