diff --git a/include/pybind11/functional.h b/include/pybind11/functional.h index ed269b9bf..013b27592 100644 --- a/include/pybind11/functional.h +++ b/include/pybind11/functional.h @@ -27,25 +27,23 @@ public: if (!src_ || !PyCallable_Check(src_.ptr())) return false; - { - /* - When passing a C++ function as an argument to another C++ - function via Python, every function call would normally involve - a full C++ -> Python -> C++ roundtrip, which can be prohibitive. - Here, we try to at least detect the case where the function is - stateless (i.e. function pointer or lambda function without - captured variables), in which case the roundtrip can be avoided. - */ - if (PyCFunction_Check(src_.ptr())) { - capsule c(PyCFunction_GetSelf(src_.ptr()), true); - auto rec = (function_record *) c; - using FunctionType = Return (*) (Args...); + /* + When passing a C++ function as an argument to another C++ + function via Python, every function call would normally involve + a full C++ -> Python -> C++ roundtrip, which can be prohibitive. + Here, we try to at least detect the case where the function is + stateless (i.e. function pointer or lambda function without + captured variables), in which case the roundtrip can be avoided. + */ + if (PyCFunction_Check(src_.ptr())) { + capsule c(PyCFunction_GetSelf(src_.ptr()), true); + auto rec = (function_record *) c; + using FunctionType = Return (*) (Args...); - if (rec && rec->is_stateless && rec->data[1] == &typeid(FunctionType)) { - struct capture { FunctionType f; }; - value = ((capture *) &rec->data)->f; - return true; - } + if (rec && rec->is_stateless && rec->data[1] == &typeid(FunctionType)) { + struct capture { FunctionType f; }; + value = ((capture *) &rec->data)->f; + return true; } } diff --git a/include/pybind11/numpy.h b/include/pybind11/numpy.h index af465a17d..4120f2826 100644 --- a/include/pybind11/numpy.h +++ b/include/pybind11/numpy.h @@ -693,8 +693,8 @@ struct field_descriptor { inline PYBIND11_NOINLINE void register_structured_dtype( const std::initializer_list& fields, const std::type_info& tinfo, size_t itemsize, - bool (*direct_converter)(PyObject *, void *&)) -{ + bool (*direct_converter)(PyObject *, void *&)) { + auto& numpy_internals = get_numpy_internals(); if (numpy_internals.get_type_info(tinfo, false)) pybind11_fail("NumPy: dtype is already registered"); diff --git a/tools/check-style.sh b/tools/check-style.sh index bc52dc863..73909f503 100755 --- a/tools/check-style.sh +++ b/tools/check-style.sh @@ -39,6 +39,19 @@ while read -u 3 f; do echo " $f" done +found= +# The mt=41 sets a red background for matched tabs: +exec 3< <(GREP_COLORS='mt=41' grep '^\s*{\s*$' include/ docs/*.rst -rn --color=always) +while read -u 3 f; do + if [ -z "$found" ]; then + echo -e '\e[31m\e[01mError: braces should occur on the same line as the if/while/.. statement. Found issues in the following files: \e[0m' + found=1 + errors=1 + fi + + echo " $f" +done + found= exec 3< <(grep '\<\(if\|for\|while\)(\|){' include/ tests/*.{cpp,py,h} -rn --color=always) while read -u 3 line; do