mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-11 16:13:53 +00:00
Merge branch 'master' into sh_merge_master
This commit is contained in:
commit
aff3cf7b65
28
.github/ISSUE_TEMPLATE/bug-report.md
vendored
28
.github/ISSUE_TEMPLATE/bug-report.md
vendored
@ -1,28 +0,0 @@
|
|||||||
---
|
|
||||||
name: Bug Report
|
|
||||||
about: File an issue about a bug
|
|
||||||
title: "[BUG] "
|
|
||||||
---
|
|
||||||
|
|
||||||
|
|
||||||
Make sure you've completed the following steps before submitting your issue -- thank you!
|
|
||||||
|
|
||||||
1. Make sure you've read the [documentation][]. Your issue may be addressed there.
|
|
||||||
2. Search the [issue tracker][] to verify that this hasn't already been reported. +1 or comment there if it has.
|
|
||||||
3. Consider asking first in the [Gitter chat room][].
|
|
||||||
4. Include a self-contained and minimal piece of code that reproduces the problem. If that's not possible, try to make the description as clear as possible.
|
|
||||||
a. If possible, make a PR with a new, failing test to give us a starting point to work on!
|
|
||||||
|
|
||||||
[documentation]: https://pybind11.readthedocs.io
|
|
||||||
[issue tracker]: https://github.com/pybind/pybind11/issues
|
|
||||||
[Gitter chat room]: https://gitter.im/pybind/Lobby
|
|
||||||
|
|
||||||
*After reading, remove this checklist and the template text in parentheses below.*
|
|
||||||
|
|
||||||
## Issue description
|
|
||||||
|
|
||||||
(Provide a short description, state the expected behavior and what actually happens.)
|
|
||||||
|
|
||||||
## Reproducible example code
|
|
||||||
|
|
||||||
(The code should be minimal, have no external dependencies, isolate the function(s) that cause breakage. Submit matched and complete C++ and Python snippets that can be easily compiled and run to diagnose the issue.)
|
|
45
.github/ISSUE_TEMPLATE/bug-report.yml
vendored
Normal file
45
.github/ISSUE_TEMPLATE/bug-report.yml
vendored
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
name: Bug Report
|
||||||
|
description: File an issue about a bug
|
||||||
|
title: "[BUG]: "
|
||||||
|
labels: [triage]
|
||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
Maintainers will only make a best effort to triage PRs. Please do your best to make the issue as easy to act on as possible, and only open if clearly a problem with pybind11 (ask first if unsure).
|
||||||
|
- type: checkboxes
|
||||||
|
id: steps
|
||||||
|
attributes:
|
||||||
|
label: Required prerequisites
|
||||||
|
description: Make sure you've completed the following steps before submitting your issue -- thank you!
|
||||||
|
options:
|
||||||
|
- label: Make sure you've read the [documentation](https://pybind11.readthedocs.io). Your issue may be addressed there.
|
||||||
|
required: true
|
||||||
|
- label: Search the [issue tracker](https://github.com/pybind/pybind11/issues) and [Discussions](https:/pybind/pybind11/discussions) to verify that this hasn't already been reported. +1 or comment there if it has.
|
||||||
|
required: true
|
||||||
|
- label: Consider asking first in the [Gitter chat room](https://gitter.im/pybind/Lobby) or in a [Discussion](https:/pybind/pybind11/discussions/new).
|
||||||
|
required: false
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: description
|
||||||
|
attributes:
|
||||||
|
label: Problem description
|
||||||
|
placeholder: >-
|
||||||
|
Provide a short description, state the expected behavior and what
|
||||||
|
actually happens. Include relevant information like what version of
|
||||||
|
pybind11 you are using, what system you are on, and any useful commands
|
||||||
|
/ output.
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
|
||||||
|
- type: textarea
|
||||||
|
id: code
|
||||||
|
attributes:
|
||||||
|
label: Reproducible example code
|
||||||
|
placeholder: >-
|
||||||
|
The code should be minimal, have no external dependencies, isolate the
|
||||||
|
function(s) that cause breakage. Submit matched and complete C++ and
|
||||||
|
Python snippets that can be easily compiled and run to diagnose the
|
||||||
|
issue. If possible, make a PR with a new, failing test to give us a
|
||||||
|
starting point to work on!
|
||||||
|
render: text
|
3
.github/ISSUE_TEMPLATE/config.yml
vendored
3
.github/ISSUE_TEMPLATE/config.yml
vendored
@ -1,5 +1,8 @@
|
|||||||
blank_issues_enabled: false
|
blank_issues_enabled: false
|
||||||
contact_links:
|
contact_links:
|
||||||
|
- name: Ask a question
|
||||||
|
url: https://github.com/pybind/pybind11/discussions/new
|
||||||
|
about: Please ask and answer questions here, or propose new ideas.
|
||||||
- name: Gitter room
|
- name: Gitter room
|
||||||
url: https://gitter.im/pybind/Lobby
|
url: https://gitter.im/pybind/Lobby
|
||||||
about: A room for discussing pybind11 with an active community
|
about: A room for discussing pybind11 with an active community
|
||||||
|
16
.github/ISSUE_TEMPLATE/feature-request.md
vendored
16
.github/ISSUE_TEMPLATE/feature-request.md
vendored
@ -1,16 +0,0 @@
|
|||||||
---
|
|
||||||
name: Feature Request
|
|
||||||
about: File an issue about adding a feature
|
|
||||||
title: "[FEAT] "
|
|
||||||
---
|
|
||||||
|
|
||||||
|
|
||||||
Make sure you've completed the following steps before submitting your issue -- thank you!
|
|
||||||
|
|
||||||
1. Check if your feature has already been mentioned / rejected / planned in other issues.
|
|
||||||
2. If those resources didn't help, consider asking in the [Gitter chat room][] to see if this is interesting / useful to a larger audience and possible to implement reasonably,
|
|
||||||
4. If you have a useful feature that passes the previous items (or not suitable for chat), please fill in the details below.
|
|
||||||
|
|
||||||
[Gitter chat room]: https://gitter.im/pybind/Lobby
|
|
||||||
|
|
||||||
*After reading, remove this checklist.*
|
|
21
.github/ISSUE_TEMPLATE/question.md
vendored
21
.github/ISSUE_TEMPLATE/question.md
vendored
@ -1,21 +0,0 @@
|
|||||||
---
|
|
||||||
name: Question
|
|
||||||
about: File an issue about unexplained behavior
|
|
||||||
title: "[QUESTION] "
|
|
||||||
---
|
|
||||||
|
|
||||||
If you have a question, please check the following first:
|
|
||||||
|
|
||||||
1. Check if your question has already been answered in the [FAQ][] section.
|
|
||||||
2. Make sure you've read the [documentation][]. Your issue may be addressed there.
|
|
||||||
3. If those resources didn't help and you only have a short question (not a bug report), consider asking in the [Gitter chat room][]
|
|
||||||
4. Search the [issue tracker][], including the closed issues, to see if your question has already been asked/answered. +1 or comment if it has been asked but has no answer.
|
|
||||||
5. If you have a more complex question which is not answered in the previous items (or not suitable for chat), please fill in the details below.
|
|
||||||
6. Include a self-contained and minimal piece of code that illustrates your question. If that's not possible, try to make the description as clear as possible.
|
|
||||||
|
|
||||||
[FAQ]: http://pybind11.readthedocs.io/en/latest/faq.html
|
|
||||||
[documentation]: https://pybind11.readthedocs.io
|
|
||||||
[issue tracker]: https://github.com/pybind/pybind11/issues
|
|
||||||
[Gitter chat room]: https://gitter.im/pybind/Lobby
|
|
||||||
|
|
||||||
*After reading, remove this checklist.*
|
|
31
.github/workflows/ci.yml
vendored
31
.github/workflows/ci.yml
vendored
@ -860,3 +860,34 @@ jobs:
|
|||||||
|
|
||||||
- name: Run all checks
|
- name: Run all checks
|
||||||
run: cmake --build build -t check
|
run: cmake --build build -t check
|
||||||
|
|
||||||
|
mingw:
|
||||||
|
runs-on: windows-latest
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: msys2 {0}
|
||||||
|
steps:
|
||||||
|
- uses: msys2/setup-msys2@v2
|
||||||
|
with:
|
||||||
|
install: >-
|
||||||
|
mingw-w64-x86_64-gcc
|
||||||
|
mingw-w64-x86_64-python-pip
|
||||||
|
mingw-w64-x86_64-cmake
|
||||||
|
mingw-w64-x86_64-make
|
||||||
|
mingw-w64-x86_64-python-pytest
|
||||||
|
mingw-w64-x86_64-eigen3
|
||||||
|
mingw-w64-x86_64-boost
|
||||||
|
mingw-w64-x86_64-catch
|
||||||
|
|
||||||
|
- uses: actions/checkout@v1
|
||||||
|
|
||||||
|
- name: Configure
|
||||||
|
# LTO leads to many undefined reference like
|
||||||
|
# `pybind11::detail::function_call::function_call(pybind11::detail::function_call&&)
|
||||||
|
run: cmake -G "MinGW Makefiles" -S . -B build
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: cmake --build build -j 2
|
||||||
|
|
||||||
|
- name: Python tests
|
||||||
|
run: cmake --build build --target pytest
|
||||||
|
31
.github/workflows/ci_sh_def.yml
vendored
31
.github/workflows/ci_sh_def.yml
vendored
@ -884,3 +884,34 @@ jobs:
|
|||||||
|
|
||||||
- name: Run all checks
|
- name: Run all checks
|
||||||
run: cmake --build build -t check
|
run: cmake --build build -t check
|
||||||
|
|
||||||
|
mingw:
|
||||||
|
runs-on: windows-latest
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: msys2 {0}
|
||||||
|
steps:
|
||||||
|
- uses: msys2/setup-msys2@v2
|
||||||
|
with:
|
||||||
|
install: >-
|
||||||
|
mingw-w64-x86_64-gcc
|
||||||
|
mingw-w64-x86_64-python-pip
|
||||||
|
mingw-w64-x86_64-cmake
|
||||||
|
mingw-w64-x86_64-make
|
||||||
|
mingw-w64-x86_64-python-pytest
|
||||||
|
mingw-w64-x86_64-eigen3
|
||||||
|
mingw-w64-x86_64-boost
|
||||||
|
mingw-w64-x86_64-catch
|
||||||
|
|
||||||
|
- uses: actions/checkout@v1
|
||||||
|
|
||||||
|
- name: Configure
|
||||||
|
# LTO leads to many undefined reference like
|
||||||
|
# `pybind11::detail::function_call::function_call(pybind11::detail::function_call&&)
|
||||||
|
run: cmake -G "MinGW Makefiles" -S . -B build -DCMAKE_CXX_FLAGS="-DPYBIND11_USE_SMART_HOLDER_AS_DEFAULT"
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: cmake --build build -j 2
|
||||||
|
|
||||||
|
- name: Python tests
|
||||||
|
run: cmake --build build --target pytest
|
||||||
|
13
.github/workflows/ci_sh_def.yml.patch
vendored
13
.github/workflows/ci_sh_def.yml.patch
vendored
@ -1,5 +1,5 @@
|
|||||||
--- ci.yml 2021-07-11 00:44:59.934547958 -0700
|
--- ci.yml 2021-07-30 11:29:33.606510028 -0700
|
||||||
+++ ci_sh_def.yml 2021-07-11 00:45:29.964628911 -0700
|
+++ ci_sh_def.yml 2021-07-30 11:36:51.284724775 -0700
|
||||||
@@ -1,4 +1,16 @@
|
@@ -1,4 +1,16 @@
|
||||||
-name: CI-SH-AVL
|
-name: CI-SH-AVL
|
||||||
+# PLEASE KEEP THIS GROUP OF FILES IN SYNC AT ALL TIMES:
|
+# PLEASE KEEP THIS GROUP OF FILES IN SYNC AT ALL TIMES:
|
||||||
@ -132,3 +132,12 @@
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v2
|
- uses: actions/checkout@v2
|
||||||
|
@@ -884,7 +908,7 @@
|
||||||
|
- name: Configure
|
||||||
|
# LTO leads to many undefined reference like
|
||||||
|
# `pybind11::detail::function_call::function_call(pybind11::detail::function_call&&)
|
||||||
|
- run: cmake -G "MinGW Makefiles" -S . -B build
|
||||||
|
+ run: cmake -G "MinGW Makefiles" -S . -B build -DCMAKE_CXX_FLAGS="-DPYBIND11_USE_SMART_HOLDER_AS_DEFAULT"
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: cmake --build build -j 2
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
**pybind11 — Seamless operability between C++11 and Python**
|
**pybind11 — Seamless operability between C++11 and Python**
|
||||||
|
|
||||||
|Latest Documentation Status| |Stable Documentation Status| |Gitter chat| |CI| |Build status|
|
|Latest Documentation Status| |Stable Documentation Status| |Gitter chat| |GitHub Discussions| |CI| |Build status|
|
||||||
|
|
||||||
|Repology| |PyPI package| |Conda-forge| |Python Versions|
|
|Repology| |PyPI package| |Conda-forge| |Python Versions|
|
||||||
|
|
||||||
@ -180,3 +180,5 @@ to the terms and conditions of this license.
|
|||||||
:target: https://repology.org/project/python:pybind11/versions
|
:target: https://repology.org/project/python:pybind11/versions
|
||||||
.. |Python Versions| image:: https://img.shields.io/pypi/pyversions/pybind11.svg
|
.. |Python Versions| image:: https://img.shields.io/pypi/pyversions/pybind11.svg
|
||||||
:target: https://pypi.org/project/pybind11/
|
:target: https://pypi.org/project/pybind11/
|
||||||
|
.. |GitHub Discussions| image:: https://img.shields.io/static/v1?label=Discussions&message=Ask&color=blue&logo=github
|
||||||
|
:target: https://github.com/pybind/pybind11/discussions
|
||||||
|
@ -406,7 +406,11 @@ template <typename StringType, bool IsView = false> struct string_caster {
|
|||||||
|
|
||||||
const auto *buffer = reinterpret_cast<const CharT *>(PYBIND11_BYTES_AS_STRING(utfNbytes.ptr()));
|
const auto *buffer = reinterpret_cast<const CharT *>(PYBIND11_BYTES_AS_STRING(utfNbytes.ptr()));
|
||||||
size_t length = (size_t) PYBIND11_BYTES_SIZE(utfNbytes.ptr()) / sizeof(CharT);
|
size_t length = (size_t) PYBIND11_BYTES_SIZE(utfNbytes.ptr()) / sizeof(CharT);
|
||||||
if (UTF_N > 8) { buffer++; length--; } // Skip BOM for UTF-16/32
|
// Skip BOM for UTF-16/32
|
||||||
|
if (PYBIND11_SILENCE_MSVC_C4127(UTF_N > 8)) {
|
||||||
|
buffer++;
|
||||||
|
length--;
|
||||||
|
}
|
||||||
value = StringType(buffer, length);
|
value = StringType(buffer, length);
|
||||||
|
|
||||||
// If we're loading a string_view we need to keep the encoded Python object alive:
|
// If we're loading a string_view we need to keep the encoded Python object alive:
|
||||||
@ -521,7 +525,7 @@ public:
|
|||||||
// out how long the first encoded character is in bytes to distinguish between these two
|
// out how long the first encoded character is in bytes to distinguish between these two
|
||||||
// errors. We also allow want to allow unicode characters U+0080 through U+00FF, as those
|
// errors. We also allow want to allow unicode characters U+0080 through U+00FF, as those
|
||||||
// can fit into a single char value.
|
// can fit into a single char value.
|
||||||
if (StringCaster::UTF_N == 8 && str_len > 1 && str_len <= 4) {
|
if (PYBIND11_SILENCE_MSVC_C4127(StringCaster::UTF_N == 8) && str_len > 1 && str_len <= 4) {
|
||||||
auto v0 = static_cast<unsigned char>(value[0]);
|
auto v0 = static_cast<unsigned char>(value[0]);
|
||||||
// low bits only: 0-127
|
// low bits only: 0-127
|
||||||
// 0b110xxxxx - start of 2-byte sequence
|
// 0b110xxxxx - start of 2-byte sequence
|
||||||
@ -546,7 +550,7 @@ public:
|
|||||||
// UTF-16 is much easier: we can only have a surrogate pair for values above U+FFFF, thus a
|
// UTF-16 is much easier: we can only have a surrogate pair for values above U+FFFF, thus a
|
||||||
// surrogate pair with total length 2 instantly indicates a range error (but not a "your
|
// surrogate pair with total length 2 instantly indicates a range error (but not a "your
|
||||||
// string was too long" error).
|
// string was too long" error).
|
||||||
else if (StringCaster::UTF_N == 16 && str_len == 2) {
|
else if (PYBIND11_SILENCE_MSVC_C4127(StringCaster::UTF_N == 16) && str_len == 2) {
|
||||||
one_char = static_cast<CharT>(value[0]);
|
one_char = static_cast<CharT>(value[0]);
|
||||||
if (one_char >= 0xD800 && one_char < 0xE000)
|
if (one_char >= 0xD800 && one_char < 0xE000)
|
||||||
throw value_error("Character code point not in range(0x10000)");
|
throw value_error("Character code point not in range(0x10000)");
|
||||||
@ -804,7 +808,7 @@ struct pyobject_caster {
|
|||||||
// For Python 2, without this implicit conversion, Python code would
|
// For Python 2, without this implicit conversion, Python code would
|
||||||
// need to be cluttered with six.ensure_text() or similar, only to be
|
// need to be cluttered with six.ensure_text() or similar, only to be
|
||||||
// un-cluttered later after Python 2 support is dropped.
|
// un-cluttered later after Python 2 support is dropped.
|
||||||
if (std::is_same<T, str>::value && isinstance<bytes>(src)) {
|
if (PYBIND11_SILENCE_MSVC_C4127(std::is_same<T, str>::value) && isinstance<bytes>(src)) {
|
||||||
PyObject *str_from_bytes = PyUnicode_FromEncodedObject(src.ptr(), "utf-8", nullptr);
|
PyObject *str_from_bytes = PyUnicode_FromEncodedObject(src.ptr(), "utf-8", nullptr);
|
||||||
if (!str_from_bytes) throw error_already_set();
|
if (!str_from_bytes) throw error_already_set();
|
||||||
value = reinterpret_steal<type>(str_from_bytes);
|
value = reinterpret_steal<type>(str_from_bytes);
|
||||||
|
@ -89,13 +89,27 @@
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if !defined(PYBIND11_EXPORT_EXCEPTION)
|
||||||
|
# ifdef __MINGW32__
|
||||||
|
// workaround for:
|
||||||
|
// error: 'dllexport' implies default visibility, but xxx has already been declared with a different visibility
|
||||||
|
# define PYBIND11_EXPORT_EXCEPTION
|
||||||
|
# else
|
||||||
|
# define PYBIND11_EXPORT_EXCEPTION PYBIND11_EXPORT
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(_MSC_VER)
|
#if defined(_MSC_VER)
|
||||||
# define PYBIND11_NOINLINE __declspec(noinline)
|
# define PYBIND11_NOINLINE __declspec(noinline)
|
||||||
#else
|
#else
|
||||||
# define PYBIND11_NOINLINE __attribute__ ((noinline))
|
# define PYBIND11_NOINLINE __attribute__ ((noinline))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(PYBIND11_CPP14)
|
#if defined(__MINGW32__)
|
||||||
|
// For unknown reasons all PYBIND11_DEPRECATED member trigger a warning when declared
|
||||||
|
// whether it is used or not
|
||||||
|
# define PYBIND11_DEPRECATED(reason)
|
||||||
|
#elif defined(PYBIND11_CPP14)
|
||||||
# define PYBIND11_DEPRECATED(reason) [[deprecated(reason)]]
|
# define PYBIND11_DEPRECATED(reason) [[deprecated(reason)]]
|
||||||
#else
|
#else
|
||||||
# define PYBIND11_DEPRECATED(reason) __attribute__((deprecated(reason)))
|
# define PYBIND11_DEPRECATED(reason) __attribute__((deprecated(reason)))
|
||||||
@ -121,7 +135,8 @@
|
|||||||
# define HAVE_ROUND 1
|
# define HAVE_ROUND 1
|
||||||
# endif
|
# endif
|
||||||
# pragma warning(push)
|
# pragma warning(push)
|
||||||
# pragma warning(disable: 4510 4610 4512 4005)
|
// C4505: 'PySlice_GetIndicesEx': unreferenced local function has been removed (PyPy only)
|
||||||
|
# pragma warning(disable: 4505)
|
||||||
# if defined(_DEBUG) && !defined(Py_DEBUG)
|
# if defined(_DEBUG) && !defined(Py_DEBUG)
|
||||||
# define PYBIND11_DEBUG_MARKER
|
# define PYBIND11_DEBUG_MARKER
|
||||||
# undef _DEBUG
|
# undef _DEBUG
|
||||||
@ -740,7 +755,7 @@ PYBIND11_NAMESPACE_END(detail)
|
|||||||
# pragma warning(disable: 4275) // warning C4275: An exported class was derived from a class that wasn't exported. Can be ignored when derived from a STL class.
|
# pragma warning(disable: 4275) // warning C4275: An exported class was derived from a class that wasn't exported. Can be ignored when derived from a STL class.
|
||||||
#endif
|
#endif
|
||||||
/// C++ bindings of builtin Python exceptions
|
/// C++ bindings of builtin Python exceptions
|
||||||
class PYBIND11_EXPORT builtin_exception : public std::runtime_error {
|
class PYBIND11_EXPORT_EXCEPTION builtin_exception : public std::runtime_error {
|
||||||
public:
|
public:
|
||||||
using std::runtime_error::runtime_error;
|
using std::runtime_error::runtime_error;
|
||||||
/// Set the error using the Python C API
|
/// Set the error using the Python C API
|
||||||
@ -751,7 +766,7 @@ public:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define PYBIND11_RUNTIME_EXCEPTION(name, type) \
|
#define PYBIND11_RUNTIME_EXCEPTION(name, type) \
|
||||||
class PYBIND11_EXPORT name : public builtin_exception { public: \
|
class PYBIND11_EXPORT_EXCEPTION name : public builtin_exception { public: \
|
||||||
using builtin_exception::builtin_exception; \
|
using builtin_exception::builtin_exception; \
|
||||||
name() : name("") { } \
|
name() : name("") { } \
|
||||||
void set_error() const override { PyErr_SetString(type, what()); } \
|
void set_error() const override { PyErr_SetString(type, what()); } \
|
||||||
@ -926,5 +941,16 @@ inline constexpr void workaround_incorrect_msvc_c4100(Args &&...) {}
|
|||||||
# define PYBIND11_WORKAROUND_INCORRECT_MSVC_C4100(...)
|
# define PYBIND11_WORKAROUND_INCORRECT_MSVC_C4100(...)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(_MSC_VER) // All versions (as of July 2021).
|
||||||
|
|
||||||
|
// warning C4127: Conditional expression is constant
|
||||||
|
constexpr inline bool silence_msvc_c4127(bool cond) { return cond; }
|
||||||
|
|
||||||
|
# define PYBIND11_SILENCE_MSVC_C4127(...) detail::silence_msvc_c4127(__VA_ARGS__)
|
||||||
|
|
||||||
|
#else
|
||||||
|
# define PYBIND11_SILENCE_MSVC_C4127(...) __VA_ARGS__
|
||||||
|
#endif
|
||||||
|
|
||||||
PYBIND11_NAMESPACE_END(detail)
|
PYBIND11_NAMESPACE_END(detail)
|
||||||
PYBIND11_NAMESPACE_END(PYBIND11_NAMESPACE)
|
PYBIND11_NAMESPACE_END(PYBIND11_NAMESPACE)
|
||||||
|
@ -98,7 +98,7 @@ template <typename Class>
|
|||||||
void construct(value_and_holder &v_h, Cpp<Class> *ptr, bool need_alias) {
|
void construct(value_and_holder &v_h, Cpp<Class> *ptr, bool need_alias) {
|
||||||
PYBIND11_WORKAROUND_INCORRECT_MSVC_C4100(need_alias);
|
PYBIND11_WORKAROUND_INCORRECT_MSVC_C4100(need_alias);
|
||||||
no_nullptr(ptr);
|
no_nullptr(ptr);
|
||||||
if (Class::has_alias && need_alias && !is_alias<Class>(ptr)) {
|
if (PYBIND11_SILENCE_MSVC_C4127(Class::has_alias) && need_alias && !is_alias<Class>(ptr)) {
|
||||||
// We're going to try to construct an alias by moving the cpp type. Whether or not
|
// We're going to try to construct an alias by moving the cpp type. Whether or not
|
||||||
// that succeeds, we still need to destroy the original cpp pointer (either the
|
// that succeeds, we still need to destroy the original cpp pointer (either the
|
||||||
// moved away leftover, if the alias construction works, or the value itself if we
|
// moved away leftover, if the alias construction works, or the value itself if we
|
||||||
@ -141,7 +141,7 @@ void construct(value_and_holder &v_h, Holder<Class> holder, bool need_alias) {
|
|||||||
auto *ptr = holder_helper<Holder<Class>>::get(holder);
|
auto *ptr = holder_helper<Holder<Class>>::get(holder);
|
||||||
no_nullptr(ptr);
|
no_nullptr(ptr);
|
||||||
// If we need an alias, check that the held pointer is actually an alias instance
|
// If we need an alias, check that the held pointer is actually an alias instance
|
||||||
if (Class::has_alias && need_alias && !is_alias<Class>(ptr))
|
if (PYBIND11_SILENCE_MSVC_C4127(Class::has_alias) && need_alias && !is_alias<Class>(ptr))
|
||||||
throw type_error("pybind11::init(): construction failed: returned holder-wrapped instance "
|
throw type_error("pybind11::init(): construction failed: returned holder-wrapped instance "
|
||||||
"is not an alias instance");
|
"is not an alias instance");
|
||||||
|
|
||||||
@ -158,7 +158,7 @@ void construct(value_and_holder &v_h, Cpp<Class> &&result, bool need_alias) {
|
|||||||
PYBIND11_WORKAROUND_INCORRECT_MSVC_C4100(need_alias);
|
PYBIND11_WORKAROUND_INCORRECT_MSVC_C4100(need_alias);
|
||||||
static_assert(std::is_move_constructible<Cpp<Class>>::value,
|
static_assert(std::is_move_constructible<Cpp<Class>>::value,
|
||||||
"pybind11::init() return-by-value factory function requires a movable class");
|
"pybind11::init() return-by-value factory function requires a movable class");
|
||||||
if (Class::has_alias && need_alias)
|
if (PYBIND11_SILENCE_MSVC_C4127(Class::has_alias) && need_alias)
|
||||||
construct_alias_from_cpp<Class>(is_alias_constructible<Class>{}, v_h, std::move(result));
|
construct_alias_from_cpp<Class>(is_alias_constructible<Class>{}, v_h, std::move(result));
|
||||||
else
|
else
|
||||||
v_h.value_ptr() = new Cpp<Class>(std::move(result));
|
v_h.value_ptr() = new Cpp<Class>(std::move(result));
|
||||||
@ -183,7 +183,7 @@ void construct(value_and_holder &v_h, std::unique_ptr<Cpp<Class>, D> &&unq_ptr,
|
|||||||
PYBIND11_WORKAROUND_INCORRECT_MSVC_C4100(need_alias);
|
PYBIND11_WORKAROUND_INCORRECT_MSVC_C4100(need_alias);
|
||||||
auto *ptr = unq_ptr.get();
|
auto *ptr = unq_ptr.get();
|
||||||
no_nullptr(ptr);
|
no_nullptr(ptr);
|
||||||
if (Class::has_alias && need_alias && !is_alias<Class>(ptr))
|
if (PYBIND11_SILENCE_MSVC_C4127(Class::has_alias) && need_alias && !is_alias<Class>(ptr))
|
||||||
throw type_error("pybind11::init(): construction failed: returned std::unique_ptr pointee "
|
throw type_error("pybind11::init(): construction failed: returned std::unique_ptr pointee "
|
||||||
"is not an alias instance");
|
"is not an alias instance");
|
||||||
// Here and below: if the new object is a trampoline, the shared_from_this mechanism needs
|
// Here and below: if the new object is a trampoline, the shared_from_this mechanism needs
|
||||||
@ -219,7 +219,7 @@ void construct(value_and_holder &v_h, std::shared_ptr<Cpp<Class>> &&shd_ptr, boo
|
|||||||
PYBIND11_WORKAROUND_INCORRECT_MSVC_C4100(need_alias);
|
PYBIND11_WORKAROUND_INCORRECT_MSVC_C4100(need_alias);
|
||||||
auto *ptr = shd_ptr.get();
|
auto *ptr = shd_ptr.get();
|
||||||
no_nullptr(ptr);
|
no_nullptr(ptr);
|
||||||
if (Class::has_alias && need_alias && !is_alias<Class>(ptr))
|
if (PYBIND11_SILENCE_MSVC_C4127(Class::has_alias) && need_alias && !is_alias<Class>(ptr))
|
||||||
throw type_error("pybind11::init(): construction failed: returned std::shared_ptr pointee "
|
throw type_error("pybind11::init(): construction failed: returned std::shared_ptr pointee "
|
||||||
"is not an alias instance");
|
"is not an alias instance");
|
||||||
auto smhldr = type_caster<Cpp<Class>>::template smart_holder_from_shared_ptr(shd_ptr);
|
auto smhldr = type_caster<Cpp<Class>>::template smart_holder_from_shared_ptr(shd_ptr);
|
||||||
|
@ -1,14 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)
|
#if defined(__GNUG__) && !defined(__clang__) && !defined(__INTEL_COMPILER)
|
||||||
# pragma warning(push)
|
|
||||||
# pragma warning(disable: 4127) // warning C4127: Conditional expression is constant
|
|
||||||
# pragma warning(disable: 4505) // warning C4505: 'PySlice_GetIndicesEx': unreferenced local function has been removed (PyPy only)
|
|
||||||
#elif defined(__GNUG__) && !defined(__clang__) && !defined(__INTEL_COMPILER)
|
|
||||||
# pragma GCC diagnostic push
|
# pragma GCC diagnostic push
|
||||||
# pragma GCC diagnostic ignored "-Wunused-but-set-parameter"
|
# pragma GCC diagnostic ignored "-Wunused-but-set-parameter"
|
||||||
# pragma GCC diagnostic ignored "-Wattributes"
|
# pragma GCC diagnostic ignored "-Wattributes"
|
||||||
# if __GNUC__ >= 7
|
|
||||||
# pragma GCC diagnostic ignored "-Wnoexcept-type"
|
|
||||||
# endif
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -41,6 +41,18 @@
|
|||||||
# include <cxxabi.h>
|
# include <cxxabi.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* https://stackoverflow.com/questions/46798456/handling-gccs-noexcept-type-warning
|
||||||
|
This warning is about ABI compatibility, not code health.
|
||||||
|
It is only actually needed in a couple places, but apparently GCC 7 "generates this warning if
|
||||||
|
and only if the first template instantiation ... involves noexcept" [stackoverflow], therefore
|
||||||
|
it could get triggered from seemingly random places, depending on user code.
|
||||||
|
No other GCC version generates this warning.
|
||||||
|
*/
|
||||||
|
#if defined(__GNUC__) && __GNUC__ == 7
|
||||||
|
# pragma GCC diagnostic push
|
||||||
|
# pragma GCC diagnostic ignored "-Wnoexcept-type"
|
||||||
|
#endif
|
||||||
|
|
||||||
PYBIND11_NAMESPACE_BEGIN(PYBIND11_NAMESPACE)
|
PYBIND11_NAMESPACE_BEGIN(PYBIND11_NAMESPACE)
|
||||||
|
|
||||||
PYBIND11_NAMESPACE_BEGIN(detail)
|
PYBIND11_NAMESPACE_BEGIN(detail)
|
||||||
@ -151,7 +163,7 @@ protected:
|
|||||||
auto rec = unique_rec.get();
|
auto rec = unique_rec.get();
|
||||||
|
|
||||||
/* Store the capture object directly in the function record if there is enough space */
|
/* Store the capture object directly in the function record if there is enough space */
|
||||||
if (sizeof(capture) <= sizeof(rec->data)) {
|
if (PYBIND11_SILENCE_MSVC_C4127(sizeof(capture) <= sizeof(rec->data))) {
|
||||||
/* Without these pragmas, GCC warns that there might not be
|
/* Without these pragmas, GCC warns that there might not be
|
||||||
enough space to use the placement new operator. However, the
|
enough space to use the placement new operator. However, the
|
||||||
'if' statement above ensures that this is the case. */
|
'if' statement above ensures that this is the case. */
|
||||||
@ -2481,8 +2493,10 @@ inline function get_overload(const T *this_ptr, const char *name) {
|
|||||||
|
|
||||||
PYBIND11_NAMESPACE_END(PYBIND11_NAMESPACE)
|
PYBIND11_NAMESPACE_END(PYBIND11_NAMESPACE)
|
||||||
|
|
||||||
#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)
|
#if defined(__GNUC__) && __GNUC__ == 7
|
||||||
# pragma warning(pop)
|
# pragma GCC diagnostic pop // -Wnoexcept-type
|
||||||
#elif defined(__GNUG__) && !defined(__clang__) && !defined(__INTEL_COMPILER)
|
#endif
|
||||||
|
|
||||||
|
#if defined(__GNUG__) && !defined(__clang__) && !defined(__INTEL_COMPILER)
|
||||||
# pragma GCC diagnostic pop
|
# pragma GCC diagnostic pop
|
||||||
#endif
|
#endif
|
||||||
|
@ -327,7 +327,7 @@ PYBIND11_NAMESPACE_END(detail)
|
|||||||
/// thrown to propagate python-side errors back through C++ which can either be caught manually or
|
/// thrown to propagate python-side errors back through C++ which can either be caught manually or
|
||||||
/// else falls back to the function dispatcher (which then raises the captured error back to
|
/// else falls back to the function dispatcher (which then raises the captured error back to
|
||||||
/// python).
|
/// python).
|
||||||
class PYBIND11_EXPORT error_already_set : public std::runtime_error {
|
class PYBIND11_EXPORT_EXCEPTION error_already_set : public std::runtime_error {
|
||||||
public:
|
public:
|
||||||
/// Constructs a new exception from the current Python error indicator, if any. The current
|
/// Constructs a new exception from the current Python error indicator, if any. The current
|
||||||
/// Python error indicator will be cleared.
|
/// Python error indicator will be cleared.
|
||||||
@ -1191,7 +1191,7 @@ PYBIND11_NAMESPACE_BEGIN(detail)
|
|||||||
// unsigned type: (A)-1 != (B)-1 when A and B are unsigned types of different sizes).
|
// unsigned type: (A)-1 != (B)-1 when A and B are unsigned types of different sizes).
|
||||||
template <typename Unsigned>
|
template <typename Unsigned>
|
||||||
Unsigned as_unsigned(PyObject *o) {
|
Unsigned as_unsigned(PyObject *o) {
|
||||||
if (sizeof(Unsigned) <= sizeof(unsigned long)
|
if (PYBIND11_SILENCE_MSVC_C4127(sizeof(Unsigned) <= sizeof(unsigned long))
|
||||||
#if PY_VERSION_HEX < 0x03000000
|
#if PY_VERSION_HEX < 0x03000000
|
||||||
|| PyInt_Check(o)
|
|| PyInt_Check(o)
|
||||||
#endif
|
#endif
|
||||||
@ -1212,7 +1212,7 @@ public:
|
|||||||
template <typename T,
|
template <typename T,
|
||||||
detail::enable_if_t<std::is_integral<T>::value, int> = 0>
|
detail::enable_if_t<std::is_integral<T>::value, int> = 0>
|
||||||
int_(T value) {
|
int_(T value) {
|
||||||
if (sizeof(T) <= sizeof(long)) {
|
if (PYBIND11_SILENCE_MSVC_C4127(sizeof(T) <= sizeof(long))) {
|
||||||
if (std::is_signed<T>::value)
|
if (std::is_signed<T>::value)
|
||||||
m_ptr = PyLong_FromLong((long) value);
|
m_ptr = PyLong_FromLong((long) value);
|
||||||
else
|
else
|
||||||
|
@ -59,8 +59,7 @@ except ImportError:
|
|||||||
import distutils.errors
|
import distutils.errors
|
||||||
import distutils.ccompiler
|
import distutils.ccompiler
|
||||||
|
|
||||||
|
WIN = sys.platform.startswith("win32") and "mingw" not in sysconfig.get_platform()
|
||||||
WIN = sys.platform.startswith("win32") and sysconfig.get_platform() != "mingw"
|
|
||||||
PY2 = sys.version_info[0] < 3
|
PY2 = sys.version_info[0] < 3
|
||||||
MACOS = sys.platform.startswith("darwin")
|
MACOS = sys.platform.startswith("darwin")
|
||||||
STD_TMPL = "/std:c++{}" if WIN else "-std=c++{}"
|
STD_TMPL = "/std:c++{}" if WIN else "-std=c++{}"
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
// shared exceptions for cross_module_tests
|
// shared exceptions for cross_module_tests
|
||||||
|
|
||||||
class PYBIND11_EXPORT shared_exception : public pybind11::builtin_exception {
|
class PYBIND11_EXPORT_EXCEPTION shared_exception : public pybind11::builtin_exception {
|
||||||
public:
|
public:
|
||||||
using builtin_exception::builtin_exception;
|
using builtin_exception::builtin_exception;
|
||||||
explicit shared_exception() : shared_exception("") {}
|
explicit shared_exception() : shared_exception("") {}
|
||||||
|
@ -302,13 +302,18 @@ function(_pybind11_return_if_cxx_and_linker_flags_work result cxxflags linkerfla
|
|||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
function(_pybind11_generate_lto target prefer_thin_lto)
|
function(_pybind11_generate_lto target prefer_thin_lto)
|
||||||
|
if(MINGW)
|
||||||
|
message(STATUS "${target} disabled (problems with undefined symbols for MinGW for now)")
|
||||||
|
return()
|
||||||
|
endif()
|
||||||
|
|
||||||
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
|
if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang")
|
||||||
set(cxx_append "")
|
set(cxx_append "")
|
||||||
set(linker_append "")
|
set(linker_append "")
|
||||||
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND NOT APPLE)
|
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang" AND NOT APPLE)
|
||||||
# Clang Gold plugin does not support -Os; append -O3 to MinSizeRel builds to override it
|
# Clang Gold plugin does not support -Os; append -O3 to MinSizeRel builds to override it
|
||||||
set(linker_append ";$<$<CONFIG:MinSizeRel>:-O3>")
|
set(linker_append ";$<$<CONFIG:MinSizeRel>:-O3>")
|
||||||
elseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU")
|
elseif(CMAKE_CXX_COMPILER_ID MATCHES "GNU" AND NOT MINGW)
|
||||||
set(cxx_append ";-fno-fat-lto-objects")
|
set(cxx_append ";-fno-fat-lto-objects")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user