pybind11.h 106 KB
Newer Older
Wenzel Jakob's avatar
Wenzel Jakob committed
1
/*
Wenzel Jakob's avatar
Wenzel Jakob committed
2
3
    pybind11/pybind11.h: Main header file of the C++11 python
    binding generator library
Wenzel Jakob's avatar
Wenzel Jakob committed
4

5
    Copyright (c) 2016 Wenzel Jakob <wenzel.jakob@epfl.ch>
Wenzel Jakob's avatar
Wenzel Jakob committed
6
7
8
9
10

    All rights reserved. Use of this source code is governed by a
    BSD-style license that can be found in the LICENSE file.
*/

11
#pragma once
Wenzel Jakob's avatar
Wenzel Jakob committed
12

13
14
15
16
17
18
19
20
21
22
23
#if defined(__INTEL_COMPILER)
#  pragma warning push
#  pragma warning disable 68    // integer conversion resulted in a change of sign
#  pragma warning disable 186   // pointless comparison of unsigned integer with zero
#  pragma warning disable 878   // incompatible exception specifications
#  pragma warning disable 1334  // the "template" keyword used for syntactic disambiguation may only be used within a template
#  pragma warning disable 1682  // implicit conversion of a 64-bit integral type to a smaller integral type (potential portability problem)
#  pragma warning disable 1786  // function "strdup" was declared deprecated
#  pragma warning disable 1875  // offsetof applied to non-POD (Plain Old Data) types is nonstandard
#  pragma warning disable 2196  // warning #2196: routine is both "inline" and "noinline"
#elif defined(_MSC_VER)
Wenzel Jakob's avatar
Wenzel Jakob committed
24
#  pragma warning(push)
25
#  pragma warning(disable: 4100) // warning C4100: Unreferenced formal parameter
Wenzel Jakob's avatar
Wenzel Jakob committed
26
#  pragma warning(disable: 4127) // warning C4127: Conditional expression is constant
27
#  pragma warning(disable: 4512) // warning C4512: Assignment operator was implicitly defined as deleted
Wenzel Jakob's avatar
Wenzel Jakob committed
28
29
#  pragma warning(disable: 4800) // warning C4800: 'int': forcing value to bool 'true' or 'false' (performance warning)
#  pragma warning(disable: 4996) // warning C4996: The POSIX name for this item is deprecated. Instead, use the ISO C and C++ conformant name
Wenzel Jakob's avatar
Wenzel Jakob committed
30
#  pragma warning(disable: 4702) // warning C4702: unreachable code
31
#  pragma warning(disable: 4522) // warning C4522: multiple assignment operators specified
Henry Schreiner's avatar
Henry Schreiner committed
32
#  pragma warning(disable: 4505) // warning C4505: 'PySlice_GetIndicesEx': unreferenced local function has been removed (PyPy only)
33
#elif defined(__GNUG__) && !defined(__clang__)
Wenzel Jakob's avatar
Wenzel Jakob committed
34
35
36
37
#  pragma GCC diagnostic push
#  pragma GCC diagnostic ignored "-Wunused-but-set-parameter"
#  pragma GCC diagnostic ignored "-Wunused-but-set-variable"
#  pragma GCC diagnostic ignored "-Wmissing-field-initializers"
Wenzel Jakob's avatar
Wenzel Jakob committed
38
39
#  pragma GCC diagnostic ignored "-Wstrict-aliasing"
#  pragma GCC diagnostic ignored "-Wattributes"
40
41
42
#  if __GNUC__ >= 7
#    pragma GCC diagnostic ignored "-Wnoexcept-type"
#  endif
Wenzel Jakob's avatar
Wenzel Jakob committed
43
44
#endif

Wenzel Jakob's avatar
Wenzel Jakob committed
45
#include "attr.h"
46
#include "options.h"
47
#include "detail/class.h"
48
#include "detail/init.h"
Wenzel Jakob's avatar
Wenzel Jakob committed
49

50
51
52
53
54
#include <memory>
#include <vector>
#include <string>
#include <utility>

55
56
57
58
#if defined(__GNUG__) && !defined(__clang__)
#  include <cxxabi.h>
#endif

59
PYBIND11_NAMESPACE_BEGIN(PYBIND11_NAMESPACE)
Wenzel Jakob's avatar
Wenzel Jakob committed
60

Wenzel Jakob's avatar
Wenzel Jakob committed
61
/// Wraps an arbitrary C++ function/method/lambda function/.. into a callable Python object
62
class cpp_function : public function {
Wenzel Jakob's avatar
Wenzel Jakob committed
63
public:
64
    cpp_function() = default;
65
    cpp_function(std::nullptr_t) { }
Wenzel Jakob's avatar
Wenzel Jakob committed
66

67
    /// Construct a cpp_function from a vanilla function pointer
68
69
    template <typename Return, typename... Args, typename... Extra>
    cpp_function(Return (*f)(Args...), const Extra&... extra) {
70
        initialize(f, f, extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
71
72
    }

73
    /// Construct a cpp_function from a lambda function (possibly with internal state)
74
75
    template <typename Func, typename... Extra,
              typename = detail::enable_if_t<detail::is_lambda<Func>::value>>
76
    cpp_function(Func &&f, const Extra&... extra) {
77
        initialize(std::forward<Func>(f),
78
                   (detail::function_signature_t<Func> *) nullptr, extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
79
80
    }

81
    /// Construct a cpp_function from a class method (non-const, no ref-qualifier)
82
83
    template <typename Return, typename Class, typename... Arg, typename... Extra>
    cpp_function(Return (Class::*f)(Arg...), const Extra&... extra) {
84
        initialize([f](Class *c, Arg... args) -> Return { return (c->*f)(std::forward<Arg>(args)...); },
85
                   (Return (*) (Class *, Arg...)) nullptr, extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
86
    }
Wenzel Jakob's avatar
Wenzel Jakob committed
87

88
89
90
91
92
93
94
95
96
97
    /// Construct a cpp_function from a class method (non-const, lvalue ref-qualifier)
    /// A copy of the overload for non-const functions without explicit ref-qualifier
    /// but with an added `&`.
    template <typename Return, typename Class, typename... Arg, typename... Extra>
    cpp_function(Return (Class::*f)(Arg...)&, const Extra&... extra) {
        initialize([f](Class *c, Arg... args) -> Return { return (c->*f)(args...); },
                   (Return (*) (Class *, Arg...)) nullptr, extra...);
    }

    /// Construct a cpp_function from a class method (const, no ref-qualifier)
98
99
    template <typename Return, typename Class, typename... Arg, typename... Extra>
    cpp_function(Return (Class::*f)(Arg...) const, const Extra&... extra) {
100
        initialize([f](const Class *c, Arg... args) -> Return { return (c->*f)(std::forward<Arg>(args)...); },
101
                   (Return (*)(const Class *, Arg ...)) nullptr, extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
102
103
    }

104
105
106
107
108
109
110
111
112
    /// Construct a cpp_function from a class method (const, lvalue ref-qualifier)
    /// A copy of the overload for const functions without explicit ref-qualifier
    /// but with an added `&`.
    template <typename Return, typename Class, typename... Arg, typename... Extra>
    cpp_function(Return (Class::*f)(Arg...) const&, const Extra&... extra) {
        initialize([f](const Class *c, Arg... args) -> Return { return (c->*f)(args...); },
                   (Return (*)(const Class *, Arg ...)) nullptr, extra...);
    }

113
    /// Return the function name
Wenzel Jakob's avatar
Wenzel Jakob committed
114
    object name() const { return attr("__name__"); }
115

116
protected:
117
118
119
120
121
    /// Space optimization: don't inline this frequently instantiated fragment
    PYBIND11_NOINLINE detail::function_record *make_function_record() {
        return new detail::function_record();
    }

122
    /// Special internal constructor for functors, lambda functions, etc.
123
124
    template <typename Func, typename Return, typename... Args, typename... Extra>
    void initialize(Func &&f, Return (*)(Args...), const Extra&... extra) {
125
        using namespace detail;
126
        struct capture { remove_reference_t<Func> f; };
Wenzel Jakob's avatar
Wenzel Jakob committed
127

128
        /* Store the function including any extra state it might have (e.g. a lambda capture object) */
129
        auto rec = make_function_record();
130

131
132
        /* Store the capture object directly in the function record if there is enough space */
        if (sizeof(capture) <= sizeof(rec->data)) {
133
134
135
            /* Without these pragmas, GCC warns that there might not be
               enough space to use the placement new operator. However, the
               'if' statement above ensures that this is the case. */
136
#if defined(__GNUG__) && !defined(__clang__) && __GNUC__ >= 6
137
138
139
#  pragma GCC diagnostic push
#  pragma GCC diagnostic ignored "-Wplacement-new"
#endif
140
            new ((capture *) &rec->data) capture { std::forward<Func>(f) };
141
#if defined(__GNUG__) && !defined(__clang__) && __GNUC__ >= 6
142
143
#  pragma GCC diagnostic pop
#endif
144
            if (!std::is_trivially_destructible<Func>::value)
145
                rec->free_data = [](function_record *r) { ((capture *) &r->data)->~capture(); };
146
147
        } else {
            rec->data[0] = new capture { std::forward<Func>(f) };
148
            rec->free_data = [](function_record *r) { delete ((capture *) r->data[0]); };
149
        }
150

151
        /* Type casters for the function arguments and return value */
152
153
154
        using cast_in = argument_loader<Args...>;
        using cast_out = make_caster<
            conditional_t<std::is_void<Return>::value, void_type, Return>
155
        >;
Wenzel Jakob's avatar
Wenzel Jakob committed
156

157
        static_assert(expected_num_args<Extra...>(sizeof...(Args), cast_in::has_args, cast_in::has_kwargs),
158
                      "The number of argument annotations does not match the number of function arguments");
159

160
        /* Dispatch code which converts function arguments and performs the actual function call */
161
        rec->impl = [](function_call &call) -> handle {
162
            cast_in args_converter;
163
164

            /* Try to cast the function arguments into the C++ domain */
165
            if (!args_converter.load_args(call))
166
167
                return PYBIND11_TRY_NEXT_OVERLOAD;

Wenzel Jakob's avatar
Wenzel Jakob committed
168
            /* Invoke call policy pre-call hook */
169
            process_attributes<Extra...>::precall(call);
170
171

            /* Get a pointer to the capture object */
172
173
            auto data = (sizeof(capture) <= sizeof(call.func.data)
                         ? &call.func.data : call.func.data[0]);
174
            auto *cap = const_cast<capture *>(reinterpret_cast<const capture *>(data));
175

176
            /* Override policy for rvalues -- usually to enforce rvp::move on an rvalue */
177
            return_value_policy policy = return_value_policy_override<Return>::policy(call.func.policy);
178

Dean Moldovan's avatar
Dean Moldovan committed
179
            /* Function scope guard -- defaults to the compile-to-nothing `void_type` */
180
            using Guard = extract_guard_t<Extra...>;
Dean Moldovan's avatar
Dean Moldovan committed
181

182
            /* Perform the function call */
183
184
            handle result = cast_out::cast(
                std::move(args_converter).template call<Return, Guard>(cap->f), policy, call.parent);
Wenzel Jakob's avatar
Wenzel Jakob committed
185
186

            /* Invoke call policy post-call hook */
187
            process_attributes<Extra...>::postcall(call, result);
188

189
            return result;
Wenzel Jakob's avatar
Wenzel Jakob committed
190
191
        };

Wenzel Jakob's avatar
Wenzel Jakob committed
192
        /* Process any user-provided function attributes */
193
        process_attributes<Extra...>::init(extra..., rec);
194

195
        {
Henry Schreiner's avatar
Henry Schreiner committed
196
197
            constexpr bool has_kw_only_args = any_of<std::is_same<kw_only, Extra>...>::value,
                           has_pos_only_args = any_of<std::is_same<pos_only, Extra>...>::value,
198
199
                           has_args = any_of<std::is_same<args, Args>...>::value,
                           has_arg_annotations = any_of<is_keyword<Extra>...>::value;
Henry Schreiner's avatar
Henry Schreiner committed
200
201
202
            static_assert(has_arg_annotations || !has_kw_only_args, "py::kw_only requires the use of argument annotations");
            static_assert(has_arg_annotations || !has_pos_only_args, "py::pos_only requires the use of argument annotations (for docstrings and aligning the annotations to the argument)");
            static_assert(!(has_args && has_kw_only_args), "py::kw_only cannot be combined with a py::args argument");
203
204
        }

205
        /* Generate a readable signature describing the function's arguments and return value types */
206
207
        static constexpr auto signature = _("(") + cast_in::arg_names + _(") -> ") + cast_out::name;
        PYBIND11_DESCR_CONSTEXPR auto types = decltype(signature)::types();
208
209

        /* Register the function with Python from generic (non-templated) code */
210
        initialize_generic(rec, signature.text, types.data(), sizeof...(Args));
211
212
213

        if (cast_in::has_args) rec->has_args = true;
        if (cast_in::has_kwargs) rec->has_kwargs = true;
214
215

        /* Stash some additional information used by an important optimization in 'functional.h' */
216
        using FunctionType = Return (*)(Args...);
217
218
219
220
221
        constexpr bool is_function_ptr =
            std::is_convertible<Func, FunctionType>::value &&
            sizeof(capture) == sizeof(void *);
        if (is_function_ptr) {
            rec->is_stateless = true;
222
            rec->data[1] = const_cast<void *>(reinterpret_cast<const void *>(&typeid(FunctionType)));
223
        }
224
225
    }

226
    /// Register a function call with Python (generic non-templated code goes here)
227
    void initialize_generic(detail::function_record *rec, const char *text,
228
                            const std::type_info *const *types, size_t args) {
Wenzel Jakob's avatar
Wenzel Jakob committed
229

230
        /* Create copies of all referenced C-style strings */
Wenzel Jakob's avatar
Wenzel Jakob committed
231
232
233
        rec->name = strdup(rec->name ? rec->name : "");
        if (rec->doc) rec->doc = strdup(rec->doc);
        for (auto &a: rec->args) {
234
235
236
237
238
            if (a.name)
                a.name = strdup(a.name);
            if (a.descr)
                a.descr = strdup(a.descr);
            else if (a.value)
239
                a.descr = strdup(repr(a.value).cast<std::string>().c_str());
240
        }
241

242
243
        rec->is_constructor = !strcmp(rec->name, "__init__") || !strcmp(rec->name, "__setstate__");

244
245
#if !defined(NDEBUG) && !defined(PYBIND11_DISABLE_NEW_STYLE_INIT_WARNING)
        if (rec->is_constructor && !rec->is_new_style_constructor) {
246
            const auto class_name = detail::get_fully_qualified_tp_name((PyTypeObject *) rec->scope.ptr());
247
248
249
250
251
252
253
254
255
256
257
            const auto func_name = std::string(rec->name);
            PyErr_WarnEx(
                PyExc_FutureWarning,
                ("pybind11-bound class '" + class_name + "' is using an old-style "
                 "placement-new '" + func_name + "' which has been deprecated. See "
                 "the upgrade guide in pybind11's docs. This message is only visible "
                 "when compiled in debug mode.").c_str(), 0
            );
        }
#endif

258
259
        /* Generate a proper function signature */
        std::string signature;
260
261
262
        size_t type_index = 0, arg_index = 0;
        for (auto *pc = text; *pc != '\0'; ++pc) {
            const auto c = *pc;
263
264

            if (c == '{') {
265
266
267
                // Write arg name for everything except *args and **kwargs.
                if (*(pc + 1) == '*')
                    continue;
Henry Schreiner's avatar
Henry Schreiner committed
268
269
270
271
                // Separator for keyword-only arguments, placed before the kw
                // arguments start
                if (rec->nargs_kw_only > 0 && arg_index + rec->nargs_kw_only == args)
                    signature += "*, ";
272
273
274
275
276
277
                if (arg_index < rec->args.size() && rec->args[arg_index].name) {
                    signature += rec->args[arg_index].name;
                } else if (arg_index == 0 && rec->is_method) {
                    signature += "self";
                } else {
                    signature += "arg" + std::to_string(arg_index - (rec->is_method ? 1 : 0));
278
                }
279
                signature += ": ";
280
            } else if (c == '}') {
281
282
                // Write default value if available.
                if (arg_index < rec->args.size() && rec->args[arg_index].descr) {
283
                    signature += " = ";
284
                    signature += rec->args[arg_index].descr;
285
                }
Henry Schreiner's avatar
Henry Schreiner committed
286
287
288
289
                // Separator for positional-only arguments (placed after the
                // argument, rather than before like *
                if (rec->nargs_pos_only > 0 && (arg_index + 1) == rec->nargs_pos_only)
                    signature += ", /";
290
                arg_index++;
291
292
            } else if (c == '%') {
                const std::type_info *t = types[type_index++];
293
                if (!t)
294
                    pybind11_fail("Internal error while parsing type signature (1)");
295
                if (auto tinfo = detail::get_type_info(*t)) {
296
297
298
299
                    handle th((PyObject *) tinfo->type);
                    signature +=
                        th.attr("__module__").cast<std::string>() + "." +
                        th.attr("__qualname__").cast<std::string>(); // Python 3.3+, but we backport it to earlier versions
300
301
302
                } else if (rec->is_new_style_constructor && arg_index == 0) {
                    // A new-style `__init__` takes `self` as `value_and_holder`.
                    // Rewrite it to the proper class type.
303
304
305
                    signature +=
                        rec->scope.attr("__module__").cast<std::string>() + "." +
                        rec->scope.attr("__qualname__").cast<std::string>();
306
307
308
309
310
311
312
313
314
                } else {
                    std::string tname(t->name());
                    detail::clean_type_id(tname);
                    signature += tname;
                }
            } else {
                signature += c;
            }
        }
Henry Schreiner's avatar
Henry Schreiner committed
315

316
        if (arg_index != args || types[type_index] != nullptr)
317
            pybind11_fail("Internal error while parsing type signature (2)");
318

319
#if PY_MAJOR_VERSION < 3
Wenzel Jakob's avatar
Wenzel Jakob committed
320
321
322
        if (strcmp(rec->name, "__next__") == 0) {
            std::free(rec->name);
            rec->name = strdup("next");
323
324
325
        } else if (strcmp(rec->name, "__bool__") == 0) {
            std::free(rec->name);
            rec->name = strdup("__nonzero__");
326
        }
327
#endif
Wenzel Jakob's avatar
Wenzel Jakob committed
328
329
        rec->signature = strdup(signature.c_str());
        rec->args.shrink_to_fit();
330
        rec->nargs = (std::uint16_t) args;
331

332
333
        if (rec->sibling && PYBIND11_INSTANCE_METHOD_CHECK(rec->sibling.ptr()))
            rec->sibling = PYBIND11_INSTANCE_METHOD_GET_FUNCTION(rec->sibling.ptr());
334

Wenzel Jakob's avatar
Wenzel Jakob committed
335
        detail::function_record *chain = nullptr, *chain_start = rec;
336
337
        if (rec->sibling) {
            if (PyCFunction_Check(rec->sibling.ptr())) {
Wenzel Jakob's avatar
Wenzel Jakob committed
338
                auto rec_capsule = reinterpret_borrow<capsule>(PyCFunction_GET_SELF(rec->sibling.ptr()));
339
340
341
                chain = (detail::function_record *) rec_capsule;
                /* Never append a method to an overload chain of a parent class;
                   instead, hide the parent's overloads in this case */
342
                if (!chain->scope.is(rec->scope))
343
344
345
346
347
348
                    chain = nullptr;
            }
            // Don't trigger for things like the default __init__, which are wrapper_descriptors that we are intentionally replacing
            else if (!rec->sibling.is_none() && rec->name[0] != '_')
                pybind11_fail("Cannot overload existing non-function object \"" + std::string(rec->name) +
                        "\" with a function of the same name");
349
350
        }

Wenzel Jakob's avatar
Wenzel Jakob committed
351
        if (!chain) {
352
            /* No existing overload was found, create a new function object */
Wenzel Jakob's avatar
Wenzel Jakob committed
353
            rec->def = new PyMethodDef();
354
            std::memset(rec->def, 0, sizeof(PyMethodDef));
Wenzel Jakob's avatar
Wenzel Jakob committed
355
            rec->def->ml_name = rec->name;
356
            rec->def->ml_meth = reinterpret_cast<PyCFunction>(reinterpret_cast<void (*) (void)>(*dispatcher));
Wenzel Jakob's avatar
Wenzel Jakob committed
357
            rec->def->ml_flags = METH_VARARGS | METH_KEYWORDS;
358

359
360
            capsule rec_capsule(rec, [](void *ptr) {
                destruct((detail::function_record *) ptr);
361
            });
362
363
364

            object scope_module;
            if (rec->scope) {
365
366
367
368
369
                if (hasattr(rec->scope, "__module__")) {
                    scope_module = rec->scope.attr("__module__");
                } else if (hasattr(rec->scope, "__name__")) {
                    scope_module = rec->scope.attr("__name__");
                }
370
371
372
            }

            m_ptr = PyCFunction_NewEx(rec->def, rec_capsule.ptr(), scope_module.ptr());
Wenzel Jakob's avatar
Wenzel Jakob committed
373
            if (!m_ptr)
374
                pybind11_fail("cpp_function::cpp_function(): Could not allocate function object");
Wenzel Jakob's avatar
Wenzel Jakob committed
375
        } else {
376
            /* Append at the beginning or end of the overload chain */
Wenzel Jakob's avatar
Wenzel Jakob committed
377
            m_ptr = rec->sibling.ptr();
Wenzel Jakob's avatar
Wenzel Jakob committed
378
            inc_ref();
379
380
381
382
383
384
385
386
387
            if (chain->is_method != rec->is_method)
                pybind11_fail("overloading a method with both static and instance methods is not supported; "
                    #if defined(NDEBUG)
                        "compile in debug mode for more details"
                    #else
                        "error while attempting to bind " + std::string(rec->is_method ? "instance" : "static") + " method " +
                        std::string(pybind11::str(rec->scope.attr("__name__"))) + "." + std::string(rec->name) + signature
                    #endif
                );
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403

            if (rec->prepend) {
                // Beginning of chain; we need to replace the capsule's current head-of-the-chain
                // pointer with this one, then make this one point to the previous head of the
                // chain.
                chain_start = rec;
                rec->next = chain;
                auto rec_capsule = reinterpret_borrow<capsule>(((PyCFunctionObject *) m_ptr)->m_self);
                rec_capsule.set_pointer(rec);
            } else {
                // Or end of chain (normal behavior)
                chain_start = chain;
                while (chain->next)
                    chain = chain->next;
                chain->next = rec;
            }
Wenzel Jakob's avatar
Wenzel Jakob committed
404
        }
405

Wenzel Jakob's avatar
Wenzel Jakob committed
406
        std::string signatures;
407
        int index = 0;
Wenzel Jakob's avatar
Wenzel Jakob committed
408
        /* Create a nice pydoc rec including all signatures and
409
           docstrings of the functions in the overload chain */
410
        if (chain && options::show_function_signatures()) {
411
412
413
414
415
416
            // First a generic signature
            signatures += rec->name;
            signatures += "(*args, **kwargs)\n";
            signatures += "Overloaded function.\n\n";
        }
        // Then specific overload signatures
417
        bool first_user_def = true;
Wenzel Jakob's avatar
Wenzel Jakob committed
418
        for (auto it = chain_start; it != nullptr; it = it->next) {
419
            if (options::show_function_signatures()) {
420
                if (index > 0) signatures += "\n";
421
422
423
424
                if (chain)
                    signatures += std::to_string(++index) + ". ";
                signatures += rec->name;
                signatures += it->signature;
425
                signatures += "\n";
426
427
            }
            if (it->doc && strlen(it->doc) > 0 && options::show_user_defined_docstrings()) {
428
429
430
431
432
433
                // If we're appending another docstring, and aren't printing function signatures, we
                // need to append a newline first:
                if (!options::show_function_signatures()) {
                    if (first_user_def) first_user_def = false;
                    else signatures += "\n";
                }
434
                if (options::show_function_signatures()) signatures += "\n";
435
                signatures += it->doc;
436
                if (options::show_function_signatures()) signatures += "\n";
437
            }
Wenzel Jakob's avatar
Wenzel Jakob committed
438
        }
Wenzel Jakob's avatar
Wenzel Jakob committed
439
440

        /* Install docstring */
441
        auto *func = (PyCFunctionObject *) m_ptr;
442
443
444
        std::free(const_cast<char *>(func->m_ml->ml_doc));
        // Install docstring if it's non-empty (when at least one option is enabled)
        func->m_ml->ml_doc = signatures.empty() ? nullptr : strdup(signatures.c_str());
Wenzel Jakob's avatar
Wenzel Jakob committed
445

446
447
        if (rec->is_method) {
            m_ptr = PYBIND11_INSTANCE_METHOD_NEW(m_ptr, rec->scope.ptr());
Wenzel Jakob's avatar
Wenzel Jakob committed
448
            if (!m_ptr)
449
                pybind11_fail("cpp_function::cpp_function(): Could not allocate instance method object");
Wenzel Jakob's avatar
Wenzel Jakob committed
450
451
452
            Py_DECREF(func);
        }
    }
Wenzel Jakob's avatar
Wenzel Jakob committed
453
454
455

    /// When a cpp_function is GCed, release any memory allocated by pybind11
    static void destruct(detail::function_record *rec) {
456
457
458
459
460
461
        // If on Python 3.9, check the interpreter "MICRO" (patch) version.
        // If this is running on 3.9.0, we have to work around a bug.
        #if !defined(PYPY_VERSION) && PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION == 9
            static bool is_zero = Py_GetVersion()[4] == '0';
        #endif

Wenzel Jakob's avatar
Wenzel Jakob committed
462
463
464
        while (rec) {
            detail::function_record *next = rec->next;
            if (rec->free_data)
465
                rec->free_data(rec);
Wenzel Jakob's avatar
Wenzel Jakob committed
466
467
468
469
            std::free((char *) rec->name);
            std::free((char *) rec->doc);
            std::free((char *) rec->signature);
            for (auto &arg: rec->args) {
470
471
                std::free(const_cast<char *>(arg.name));
                std::free(const_cast<char *>(arg.descr));
Wenzel Jakob's avatar
Wenzel Jakob committed
472
473
474
                arg.value.dec_ref();
            }
            if (rec->def) {
475
                std::free(const_cast<char *>(rec->def->ml_doc));
476
477
478
479
480
481
482
483
484
                // Python 3.9.0 decref's these in the wrong order; rec->def
                // If loaded on 3.9.0, let these leak (use Python 3.9.1 at runtime to fix)
                // See https://github.com/python/cpython/pull/22670
                #if !defined(PYPY_VERSION) && PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION == 9
                    if (!is_zero)
                        delete rec->def;
                #else
                    delete rec->def;
                #endif
Wenzel Jakob's avatar
Wenzel Jakob committed
485
486
487
488
489
490
491
            }
            delete rec;
            rec = next;
        }
    }

    /// Main dispatch logic for calls to functions bound using pybind11
492
    static PyObject *dispatcher(PyObject *self, PyObject *args_in, PyObject *kwargs_in) {
493
494
        using namespace detail;

Wenzel Jakob's avatar
Wenzel Jakob committed
495
        /* Iterator over the list of potentially admissible overloads */
496
497
        const function_record *overloads = (function_record *) PyCapsule_GetPointer(self, nullptr),
                              *it = overloads;
Wenzel Jakob's avatar
Wenzel Jakob committed
498
499

        /* Need to know how many arguments + keyword arguments there are to pick the right overload */
500
        const auto n_args_in = (size_t) PyTuple_GET_SIZE(args_in);
Wenzel Jakob's avatar
Wenzel Jakob committed
501

502
        handle parent = n_args_in > 0 ? PyTuple_GET_ITEM(args_in, 0) : nullptr,
Wenzel Jakob's avatar
Wenzel Jakob committed
503
               result = PYBIND11_TRY_NEXT_OVERLOAD;
504

505
506
        auto self_value_and_holder = value_and_holder();
        if (overloads->is_constructor) {
507
            if (!PyObject_TypeCheck(parent.ptr(), (PyTypeObject *) overloads->scope.ptr())) {
508
509
510
511
                PyErr_SetString(PyExc_TypeError, "__init__(self, ...) called with invalid `self` argument");
                return nullptr;
            }

512
513
514
515
            const auto tinfo = get_type_info((PyTypeObject *) overloads->scope.ptr());
            const auto pi = reinterpret_cast<instance *>(parent.ptr());
            self_value_and_holder = pi->get_value_and_holder(tinfo, true);

516
517
518
519
520
521
            // If this value is already registered it must mean __init__ is invoked multiple times;
            // we really can't support that in C++, so just ignore the second __init__.
            if (self_value_and_holder.instance_registered())
                return none().release().ptr();
        }

Wenzel Jakob's avatar
Wenzel Jakob committed
522
        try {
523
524
525
526
527
528
529
530
531
            // We do this in two passes: in the first pass, we load arguments with `convert=false`;
            // in the second, we allow conversion (except for arguments with an explicit
            // py::arg().noconvert()).  This lets us prefer calls without conversion, with
            // conversion as a fallback.
            std::vector<function_call> second_pass;

            // However, if there are no overloads, we can just skip the no-convert pass entirely
            const bool overloaded = it != nullptr && it->next != nullptr;

Wenzel Jakob's avatar
Wenzel Jakob committed
532
            for (; it != nullptr; it = it->next) {
533

Wenzel Jakob's avatar
Wenzel Jakob committed
534
                /* For each overload:
535
536
                   1. Copy all positional arguments we were given, also checking to make sure that
                      named positional arguments weren't *also* specified via kwarg.
537
                   2. If we weren't given enough, try to make up the omitted ones by checking
538
539
540
541
542
543
544
545
546
547
548
549
550
                      whether they were provided by a kwarg matching the `py::arg("name")` name.  If
                      so, use it (and remove it from kwargs; if not, see if the function binding
                      provided a default that we can use.
                   3. Ensure that either all keyword arguments were "consumed", or that the function
                      takes a kwargs argument to accept unconsumed kwargs.
                   4. Any positional arguments still left get put into a tuple (for args), and any
                      leftover kwargs get put into a dict.
                   5. Pack everything into a vector; if we have py::args or py::kwargs, they are an
                      extra tuple or dict at the end of the positional arguments.
                   6. Call the function call dispatcher (function_record::impl)

                   If one of these fail, move on to the next overload and keep trying until we get a
                   result other than PYBIND11_TRY_NEXT_OVERLOAD.
Wenzel Jakob's avatar
Wenzel Jakob committed
551
552
                 */

553
                const function_record &func = *it;
554
555
556
                size_t num_args = func.nargs;    // Number of positional arguments that we need
                if (func.has_args) --num_args;   // (but don't count py::args
                if (func.has_kwargs) --num_args; //  or py::kwargs)
Henry Schreiner's avatar
Henry Schreiner committed
557
                size_t pos_args = num_args - func.nargs_kw_only;
Wenzel Jakob's avatar
Wenzel Jakob committed
558

559
                if (!func.has_args && n_args_in > pos_args)
560
                    continue; // Too many positional arguments for this overload
561

562
                if (n_args_in < pos_args && func.args.size() < pos_args)
563
                    continue; // Not enough positional arguments given, and not enough defaults to fill in the blanks
564

565
                function_call call(func, parent);
Wenzel Jakob's avatar
Wenzel Jakob committed
566

567
                size_t args_to_copy = (std::min)(pos_args, n_args_in); // Protect std::min with parentheses
568
569
                size_t args_copied = 0;

570
571
572
573
574
575
576
                // 0. Inject new-style `self` argument
                if (func.is_new_style_constructor) {
                    // The `value` may have been preallocated by an old-style `__init__`
                    // if it was a preceding candidate for overload resolution.
                    if (self_value_and_holder)
                        self_value_and_holder.type->dealloc(self_value_and_holder);

577
                    call.init_self = PyTuple_GET_ITEM(args_in, 0);
578
                    call.args.emplace_back(reinterpret_cast<PyObject *>(&self_value_and_holder));
579
580
581
582
                    call.args_convert.push_back(false);
                    ++args_copied;
                }

583
                // 1. Copy any position arguments given.
584
                bool bad_arg = false;
585
                for (; args_copied < args_to_copy; ++args_copied) {
586
                    const argument_record *arg_rec = args_copied < func.args.size() ? &func.args[args_copied] : nullptr;
587
588
                    if (kwargs_in && arg_rec && arg_rec->name && PyDict_GetItemString(kwargs_in, arg_rec->name)) {
                        bad_arg = true;
589
                        break;
590
591
                    }

592
593
594
595
596
597
598
                    handle arg(PyTuple_GET_ITEM(args_in, args_copied));
                    if (arg_rec && !arg_rec->none && arg.is_none()) {
                        bad_arg = true;
                        break;
                    }
                    call.args.push_back(arg);
                    call.args_convert.push_back(arg_rec ? arg_rec->convert : true);
599
                }
600
                if (bad_arg)
601
                    continue; // Maybe it was meant for another overload (issue #688)
602
603
604
605

                // We'll need to copy this if we steal some kwargs for defaults
                dict kwargs = reinterpret_borrow<dict>(kwargs_in);

Henry Schreiner's avatar
Henry Schreiner committed
606
607
608
                // 1.5. Fill in any missing pos_only args from defaults if they exist
                if (args_copied < func.nargs_pos_only) {
                    for (; args_copied < func.nargs_pos_only; ++args_copied) {
609
                        const auto &arg_rec = func.args[args_copied];
Henry Schreiner's avatar
Henry Schreiner committed
610
611
                        handle value;

612
613
                        if (arg_rec.value) {
                            value = arg_rec.value;
Henry Schreiner's avatar
Henry Schreiner committed
614
615
616
                        }
                        if (value) {
                            call.args.push_back(value);
617
                            call.args_convert.push_back(arg_rec.convert);
Henry Schreiner's avatar
Henry Schreiner committed
618
619
620
621
622
623
624
625
                        } else
                            break;
                    }

                    if (args_copied < func.nargs_pos_only)
                        continue; // Not enough defaults to fill the positional arguments
                }

626
                // 2. Check kwargs and, failing that, defaults that may help complete the list
627
                if (args_copied < num_args) {
628
629
                    bool copied_kwargs = false;

630
                    for (; args_copied < num_args; ++args_copied) {
631
                        const auto &arg_rec = func.args[args_copied];
632
633

                        handle value;
634
635
                        if (kwargs_in && arg_rec.name)
                            value = PyDict_GetItemString(kwargs.ptr(), arg_rec.name);
Wenzel Jakob's avatar
Wenzel Jakob committed
636
637

                        if (value) {
638
639
640
641
642
                            // Consume a kwargs value
                            if (!copied_kwargs) {
                                kwargs = reinterpret_steal<dict>(PyDict_Copy(kwargs.ptr()));
                                copied_kwargs = true;
                            }
643
644
645
646
647
648
649
                            PyDict_DelItemString(kwargs.ptr(), arg_rec.name);
                        } else if (arg_rec.value) {
                            value = arg_rec.value;
                        }

                        if (!arg_rec.none && value.is_none()) {
                            break;
650
651
                        }

652
                        if (value) {
653
                            call.args.push_back(value);
654
                            call.args_convert.push_back(arg_rec.convert);
655
                        }
656
                        else
Wenzel Jakob's avatar
Wenzel Jakob committed
657
                            break;
658
659
                    }

660
                    if (args_copied < num_args)
661
662
663
664
                        continue; // Not enough arguments, defaults, or kwargs to fill the positional arguments
                }

                // 3. Check everything was consumed (unless we have a kwargs arg)
665
                if (kwargs && !kwargs.empty() && !func.has_kwargs)
666
667
668
                    continue; // Unconsumed kwargs, but no py::kwargs argument to accept them

                // 4a. If we have a py::args argument, create a new tuple with leftovers
669
                if (func.has_args) {
670
                    tuple extra_args;
671
672
673
674
                    if (args_to_copy == 0) {
                        // We didn't copy out any position arguments from the args_in tuple, so we
                        // can reuse it directly without copying:
                        extra_args = reinterpret_borrow<tuple>(args_in);
675
                    } else if (args_copied >= n_args_in) {
676
                        extra_args = tuple(0);
677
                    } else {
678
679
680
                        size_t args_size = n_args_in - args_copied;
                        extra_args = tuple(args_size);
                        for (size_t i = 0; i < args_size; ++i) {
Jason Rhinelander's avatar
Jason Rhinelander committed
681
                            extra_args[i] = PyTuple_GET_ITEM(args_in, args_copied + i);
Wenzel Jakob's avatar
Wenzel Jakob committed
682
683
                        }
                    }
684
                    call.args.push_back(extra_args);
685
                    call.args_convert.push_back(false);
686
                    call.args_ref = std::move(extra_args);
Wenzel Jakob's avatar
Wenzel Jakob committed
687
                }
688

689
                // 4b. If we have a py::kwargs, pass on any remaining kwargs
690
                if (func.has_kwargs) {
691
692
                    if (!kwargs.ptr())
                        kwargs = dict(); // If we didn't get one, send an empty one
693
                    call.args.push_back(kwargs);
694
                    call.args_convert.push_back(false);
695
                    call.kwargs_ref = std::move(kwargs);
696
697
                }

698
699
700
                // 5. Put everything in a vector.  Not technically step 5, we've been building it
                // in `call.args` all along.
                #if !defined(NDEBUG)
701
                if (call.args.size() != func.nargs || call.args_convert.size() != func.nargs)
702
703
                    pybind11_fail("Internal error: function call dispatcher inserted wrong number of arguments!");
                #endif
704

705
706
707
708
709
710
711
712
713
                std::vector<bool> second_pass_convert;
                if (overloaded) {
                    // We're in the first no-convert pass, so swap out the conversion flags for a
                    // set of all-false flags.  If the call fails, we'll swap the flags back in for
                    // the conversion-allowed call below.
                    second_pass_convert.resize(func.nargs, false);
                    call.args_convert.swap(second_pass_convert);
                }

714
                // 6. Call the function.
715
                try {
716
                    loader_life_support guard{};
717
                    result = func.impl(call);
718
                } catch (reference_cast_error &) {
719
720
                    result = PYBIND11_TRY_NEXT_OVERLOAD;
                }
Wenzel Jakob's avatar
Wenzel Jakob committed
721
722
723

                if (result.ptr() != PYBIND11_TRY_NEXT_OVERLOAD)
                    break;
724

725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
                if (overloaded) {
                    // The (overloaded) call failed; if the call has at least one argument that
                    // permits conversion (i.e. it hasn't been explicitly specified `.noconvert()`)
                    // then add this call to the list of second pass overloads to try.
                    for (size_t i = func.is_method ? 1 : 0; i < pos_args; i++) {
                        if (second_pass_convert[i]) {
                            // Found one: swap the converting flags back in and store the call for
                            // the second pass.
                            call.args_convert.swap(second_pass_convert);
                            second_pass.push_back(std::move(call));
                            break;
                        }
                    }
                }
            }

            if (overloaded && !second_pass.empty() && result.ptr() == PYBIND11_TRY_NEXT_OVERLOAD) {
                // The no-conversion pass finished without success, try again with conversion allowed
                for (auto &call : second_pass) {
                    try {
745
                        loader_life_support guard{};
746
747
748
749
750
                        result = call.func.impl(call);
                    } catch (reference_cast_error &) {
                        result = PYBIND11_TRY_NEXT_OVERLOAD;
                    }

751
752
753
754
755
                    if (result.ptr() != PYBIND11_TRY_NEXT_OVERLOAD) {
                        // The error reporting logic below expects 'it' to be valid, as it would be
                        // if we'd encountered this failure in the first-pass loop.
                        if (!result)
                            it = &call.func;
756
                        break;
757
                    }
758
                }
Wenzel Jakob's avatar
Wenzel Jakob committed
759
            }
760
761
        } catch (error_already_set &e) {
            e.restore();
762
            return nullptr;
763
#ifdef __GLIBCXX__
764
765
766
        } catch ( abi::__forced_unwind& ) {
            throw;
#endif
Wenzel Jakob's avatar
Wenzel Jakob committed
767
        } catch (...) {
768
769
770
            /* When an exception is caught, give each registered exception
               translator a chance to translate it to a Python exception
               in reverse order of registration.
771

772
               A translator may choose to do one of the following:
773

774
775
776
777
778
                - catch the exception and call PyErr_SetString or PyErr_SetObject
                  to set a standard (or custom) Python exception, or
                - do nothing and let the exception fall through to the next translator, or
                - delegate translation to the next translator by throwing a new type of exception. */

779
            auto last_exception = std::current_exception();
780
            auto &registered_exception_translators = get_internals().registered_exception_translators;
781
782
783
784
785
786
787
788
789
790
            for (auto& translator : registered_exception_translators) {
                try {
                    translator(last_exception);
                } catch (...) {
                    last_exception = std::current_exception();
                    continue;
                }
                return nullptr;
            }
            PyErr_SetString(PyExc_SystemError, "Exception escaped from default exception translator!");
Wenzel Jakob's avatar
Wenzel Jakob committed
791
792
793
            return nullptr;
        }

794
795
796
797
798
799
800
801
802
803
        auto append_note_if_missing_header_is_suspected = [](std::string &msg) {
            if (msg.find("std::") != std::string::npos) {
                msg += "\n\n"
                       "Did you forget to `#include <pybind11/stl.h>`? Or <pybind11/complex.h>,\n"
                       "<pybind11/functional.h>, <pybind11/chrono.h>, etc. Some automatic\n"
                       "conversions are optional and require extra headers to be included\n"
                       "when compiling your pybind11 module.";
            }
        };

Wenzel Jakob's avatar
Wenzel Jakob committed
804
        if (result.ptr() == PYBIND11_TRY_NEXT_OVERLOAD) {
805
806
807
            if (overloads->is_operator)
                return handle(Py_NotImplemented).inc_ref().ptr();

808
809
810
811
            std::string msg = std::string(overloads->name) + "(): incompatible " +
                std::string(overloads->is_constructor ? "constructor" : "function") +
                " arguments. The following argument types are supported:\n";

Wenzel Jakob's avatar
Wenzel Jakob committed
812
            int ctr = 0;
813
            for (const function_record *it2 = overloads; it2 != nullptr; it2 = it2->next) {
Wenzel Jakob's avatar
Wenzel Jakob committed
814
                msg += "    "+ std::to_string(++ctr) + ". ";
815
816
817

                bool wrote_sig = false;
                if (overloads->is_constructor) {
818
                    // For a constructor, rewrite `(self: Object, arg0, ...) -> NoneType` as `Object(arg0, ...)`
819
                    std::string sig = it2->signature;
820
                    size_t start = sig.find('(') + 7; // skip "(self: "
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
                    if (start < sig.size()) {
                        // End at the , for the next argument
                        size_t end = sig.find(", "), next = end + 2;
                        size_t ret = sig.rfind(" -> ");
                        // Or the ), if there is no comma:
                        if (end >= sig.size()) next = end = sig.find(')');
                        if (start < end && next < sig.size()) {
                            msg.append(sig, start, end - start);
                            msg += '(';
                            msg.append(sig, next, ret - next);
                            wrote_sig = true;
                        }
                    }
                }
                if (!wrote_sig) msg += it2->signature;

Wenzel Jakob's avatar
Wenzel Jakob committed
837
838
                msg += "\n";
            }
839
            msg += "\nInvoked with: ";
840
            auto args_ = reinterpret_borrow<tuple>(args_in);
841
            bool some_args = false;
842
            for (size_t ti = overloads->is_constructor ? 1 : 0; ti < args_.size(); ++ti) {
843
844
                if (!some_args) some_args = true;
                else msg += ", ";
845
846
847
848
849
                try {
                    msg += pybind11::repr(args_[ti]);
                } catch (const error_already_set&) {
                    msg += "<repr raised Error>";
                }
850
            }
851
852
            if (kwargs_in) {
                auto kwargs = reinterpret_borrow<dict>(kwargs_in);
853
                if (!kwargs.empty()) {
854
855
856
857
858
859
                    if (some_args) msg += "; ";
                    msg += "kwargs: ";
                    bool first = true;
                    for (auto kwarg : kwargs) {
                        if (first) first = false;
                        else msg += ", ";
860
861
862
863
864
865
                        msg += pybind11::str("{}=").format(kwarg.first);
                        try {
                            msg += pybind11::repr(kwarg.second);
                        } catch (const error_already_set&) {
                            msg += "<repr raised Error>";
                        }
866
867
868
869
                    }
                }
            }

870
            append_note_if_missing_header_is_suspected(msg);
Wenzel Jakob's avatar
Wenzel Jakob committed
871
872
873
874
875
876
            PyErr_SetString(PyExc_TypeError, msg.c_str());
            return nullptr;
        } else if (!result) {
            std::string msg = "Unable to convert function return value to a "
                              "Python type! The signature was\n\t";
            msg += it->signature;
877
            append_note_if_missing_header_is_suspected(msg);
Wenzel Jakob's avatar
Wenzel Jakob committed
878
879
880
            PyErr_SetString(PyExc_TypeError, msg.c_str());
            return nullptr;
        } else {
881
            if (overloads->is_constructor && !self_value_and_holder.holder_constructed()) {
882
                auto *pi = reinterpret_cast<instance *>(parent.ptr());
883
                self_value_and_holder.type->init_instance(pi, nullptr);
Wenzel Jakob's avatar
Wenzel Jakob committed
884
885
886
887
            }
            return result.ptr();
        }
    }
Wenzel Jakob's avatar
Wenzel Jakob committed
888
889
};

890
/// Wrapper for Python extension modules
891
class module_ : public object {
Wenzel Jakob's avatar
Wenzel Jakob committed
892
public:
893
    PYBIND11_OBJECT_DEFAULT(module_, object, PyModule_Check)
Wenzel Jakob's avatar
Wenzel Jakob committed
894

895
    /// Create a new top-level Python module with the given name and docstring
896
897
    PYBIND11_DEPRECATED("Use PYBIND11_MODULE or module_::create_extension_module instead")
    explicit module_(const char *name, const char *doc = nullptr) {
898
#if PY_MAJOR_VERSION >= 3
899
        *this = create_extension_module(name, doc, new PyModuleDef());
900
#else
901
        *this = create_extension_module(name, doc, nullptr);
902
#endif
903
    }
Wenzel Jakob's avatar
Wenzel Jakob committed
904

905
906
907
908
909
    /** \rst
        Create Python binding for a new function within the module scope. ``Func``
        can be a plain C++ function, a function pointer, or a lambda function. For
        details on the ``Extra&& ... extra`` argument, see section :ref:`extras`.
    \endrst */
910
    template <typename Func, typename... Extra>
911
    module_ &def(const char *name_, Func &&f, const Extra& ... extra) {
912
913
        cpp_function func(std::forward<Func>(f), name(name_), scope(*this),
                          sibling(getattr(*this, name_, none())), extra...);
914
915
916
        // NB: allow overwriting here because cpp_function sets up a chain with the intention of
        // overwriting (and has already checked internally that it isn't overwriting non-functions).
        add_object(name_, func, true /* overwrite */);
Wenzel Jakob's avatar
Wenzel Jakob committed
917
918
919
        return *this;
    }

920
921
922
923
924
925
    /** \rst
        Create and return a new Python submodule with the given name and docstring.
        This also works recursively, i.e.

        .. code-block:: cpp

926
927
928
            py::module_ m("example", "pybind11 example plugin");
            py::module_ m2 = m.def_submodule("sub", "A submodule of 'example'");
            py::module_ m3 = m2.def_submodule("subsub", "A submodule of 'example.sub'");
929
    \endrst */
930
    module_ def_submodule(const char *name, const char *doc = nullptr) {
Wenzel Jakob's avatar
Wenzel Jakob committed
931
932
        std::string full_name = std::string(PyModule_GetName(m_ptr))
            + std::string(".") + std::string(name);
933
        auto result = reinterpret_borrow<module_>(PyImport_AddModule(full_name.c_str()));
934
        if (doc && options::show_user_defined_docstrings())
935
            result.attr("__doc__") = pybind11::str(doc);
Wenzel Jakob's avatar
Wenzel Jakob committed
936
937
938
        attr(name) = result;
        return result;
    }
Wenzel Jakob's avatar
Wenzel Jakob committed
939

940
    /// Import and return a module or throws `error_already_set`.
941
    static module_ import(const char *name) {
942
943
        PyObject *obj = PyImport_ImportModule(name);
        if (!obj)
944
            throw error_already_set();
945
        return reinterpret_steal<module_>(obj);
Wenzel Jakob's avatar
Wenzel Jakob committed
946
    }
947

948
949
950
951
952
    /// Reload the module or throws `error_already_set`.
    void reload() {
        PyObject *obj = PyImport_ReloadModule(ptr());
        if (!obj)
            throw error_already_set();
953
        *this = reinterpret_steal<module_>(obj);
954
955
    }

956
957
958
959
960
961
962
    /** \rst
        Adds an object to the module using the given name.  Throws if an object with the given name
        already exists.

        ``overwrite`` should almost always be false: attempting to overwrite objects that pybind11 has
        established will, in most cases, break things.
    \endrst */
963
    PYBIND11_NOINLINE void add_object(const char *name, handle obj, bool overwrite = false) {
964
965
966
967
        if (!overwrite && hasattr(*this, name))
            pybind11_fail("Error during initialization: multiple incompatible definitions with name \"" +
                    std::string(name) + "\"");

968
        PyModule_AddObject(ptr(), name, obj.inc_ref().ptr() /* steals a reference */);
969
    }
970
971

#if PY_MAJOR_VERSION >= 3
972
973
974
975
    using module_def = PyModuleDef;
#else
    struct module_def {};
#endif
976

977
978
979
980
981
982
983
984
985
    /** \rst
        Create a new top-level module that can be used as the main module of a C extension.

        For Python 3, ``def`` should point to a staticly allocated module_def.
        For Python 2, ``def`` can be a nullptr and is completely ignored.
    \endrst */
    static module_ create_extension_module(const char *name, const char *doc, module_def *def) {
#if PY_MAJOR_VERSION >= 3
        // module_def is PyModuleDef
986
987
988
989
990
991
992
993
994
995
996
        def = new (def) PyModuleDef {  // Placement new (not an allocation).
            /* m_base */     PyModuleDef_HEAD_INIT,
            /* m_name */     name,
            /* m_doc */      options::show_user_defined_docstrings() ? doc : nullptr,
            /* m_size */     -1,
            /* m_methods */  nullptr,
            /* m_slots */    nullptr,
            /* m_traverse */ nullptr,
            /* m_clear */    nullptr,
            /* m_free */     nullptr
        };
997
998
999
1000
1001
        auto m = PyModule_Create(def);
#else
        // Ignore module_def *def; only necessary for Python 3
        (void) def;
        auto m = Py_InitModule3(name, nullptr, options::show_user_defined_docstrings() ? doc : nullptr);
1002
#endif
1003
1004
1005
1006
1007
1008
1009
1010
1011
        if (m == nullptr) {
            if (PyErr_Occurred())
                throw error_already_set();
            pybind11_fail("Internal error in module_::create_extension_module()");
        }
        // TODO: Sould be reinterpret_steal for Python 3, but Python also steals it again when returned from PyInit_...
        //       For Python 2, reinterpret_borrow is correct.
        return reinterpret_borrow<module_>(m);
    }
Wenzel Jakob's avatar
Wenzel Jakob committed
1012
1013
};

1014
1015
1016
// When inside a namespace (or anywhere as long as it's not the first item on a line),
// C++20 allows "module" to be used. This is provided for backward compatibility, and for
// simplicity, if someone wants to use py::module for example, that is perfectly safe.
1017
1018
using module = module_;

1019
/// \ingroup python_builtins
1020
1021
1022
1023
/// Return a dictionary representing the global variables in the current execution frame,
/// or ``__main__.__dict__`` if there is no frame (usually when the interpreter is embedded).
inline dict globals() {
    PyObject *p = PyEval_GetGlobals();
1024
    return reinterpret_borrow<dict>(p ? p : module_::import("__main__").attr("__dict__").ptr());
1025
}
1026

1027
PYBIND11_NAMESPACE_BEGIN(detail)
Wenzel Jakob's avatar
Wenzel Jakob committed
1028
/// Generic support for creating new Python heap types
1029
class generic_type : public object {
Wenzel Jakob's avatar
Wenzel Jakob committed
1030
public:
1031
    PYBIND11_OBJECT_DEFAULT(generic_type, object, PyType_Check)
Wenzel Jakob's avatar
Wenzel Jakob committed
1032
protected:
1033
    void initialize(const type_record &rec) {
1034
        if (rec.scope && hasattr(rec.scope, "__dict__") && rec.scope.attr("__dict__").contains(rec.name))
1035
1036
            pybind11_fail("generic_type: cannot initialize type \"" + std::string(rec.name) +
                          "\": an object with that name is already defined");
1037

1038
        if (rec.module_local ? get_local_type_info(*rec.type) : get_global_type_info(*rec.type))
1039
            pybind11_fail("generic_type: type \"" + std::string(rec.name) +
1040
1041
                          "\" is already registered!");

1042
        m_ptr = make_new_python_type(rec);
1043
1044

        /* Register supplemental type information in C++ dict */
1045
1046
        auto *tinfo = new detail::type_info();
        tinfo->type = (PyTypeObject *) m_ptr;
1047
        tinfo->cpptype = rec.type;
1048
        tinfo->type_size = rec.type_size;
1049
        tinfo->type_align = rec.type_align;
1050
        tinfo->operator_new = rec.operator_new;
1051
        tinfo->holder_size_in_ptrs = size_in_ptrs(rec.holder_size);
1052
        tinfo->init_instance = rec.init_instance;
1053
        tinfo->dealloc = rec.dealloc;
1054
1055
        tinfo->simple_type = true;
        tinfo->simple_ancestors = true;
1056
1057
        tinfo->default_holder = rec.default_holder;
        tinfo->module_local = rec.module_local;
1058
1059
1060

        auto &internals = get_internals();
        auto tindex = std::type_index(*rec.type);
1061
        tinfo->direct_conversions = &internals.direct_conversions[tindex];
1062
1063
1064
1065
        if (rec.module_local)
            registered_local_types_cpp()[tindex] = tinfo;
        else
            internals.registered_types_cpp[tindex] = tinfo;
1066
        internals.registered_types_py[(PyTypeObject *) m_ptr] = { tinfo };
Wenzel Jakob's avatar
Wenzel Jakob committed
1067

1068
        if (rec.bases.size() > 1 || rec.multiple_inheritance) {
1069
            mark_parents_nonsimple(tinfo->type);
1070
1071
1072
1073
1074
1075
            tinfo->simple_ancestors = false;
        }
        else if (rec.bases.size() == 1) {
            auto parent_tinfo = get_type_info((PyTypeObject *) rec.bases[0].ptr());
            tinfo->simple_ancestors = parent_tinfo->simple_ancestors;
        }
1076
1077
1078
1079

        if (rec.module_local) {
            // Stash the local typeinfo and loader so that external modules can access it.
            tinfo->module_local_load = &type_caster_generic::local_load;
1080
            setattr(m_ptr, PYBIND11_MODULE_LOCAL_ID, capsule(tinfo));
1081
        }
Wenzel Jakob's avatar
Wenzel Jakob committed
1082
1083
    }

Wenzel Jakob's avatar
Wenzel Jakob committed
1084
1085
    /// Helper function which tags all parents of a type using mult. inheritance
    void mark_parents_nonsimple(PyTypeObject *value) {
1086
        auto t = reinterpret_borrow<tuple>(value->tp_bases);
Wenzel Jakob's avatar
Wenzel Jakob committed
1087
1088
1089
1090
1091
1092
1093
1094
        for (handle h : t) {
            auto tinfo2 = get_type_info((PyTypeObject *) h.ptr());
            if (tinfo2)
                tinfo2->simple_type = false;
            mark_parents_nonsimple((PyTypeObject *) h.ptr());
        }
    }

Wenzel Jakob's avatar
Wenzel Jakob committed
1095
1096
1097
    void install_buffer_funcs(
            buffer_info *(*get_buffer)(PyObject *, void *),
            void *get_buffer_data) {
1098
        auto *type = (PyHeapTypeObject*) m_ptr;
1099
        auto tinfo = detail::get_type_info(&type->ht_type);
Wenzel Jakob's avatar
Wenzel Jakob committed
1100
1101
1102
1103

        if (!type->ht_type.tp_as_buffer)
            pybind11_fail(
                "To be able to register buffer protocol support for the type '" +
1104
                get_fully_qualified_tp_name(tinfo->type) +
Wenzel Jakob's avatar
Wenzel Jakob committed
1105
1106
1107
                "' the associated class<>(..) invocation must "
                "include the pybind11::buffer_protocol() annotation!");

1108
1109
        tinfo->get_buffer = get_buffer;
        tinfo->get_buffer_data = get_buffer_data;
Wenzel Jakob's avatar
Wenzel Jakob committed
1110
1111
    }

1112
    // rec_func must be set for either fget or fset.
Wenzel Jakob's avatar
Wenzel Jakob committed
1113
1114
    void def_property_static_impl(const char *name,
                                  handle fget, handle fset,
1115
1116
1117
                                  detail::function_record *rec_func) {
        const auto is_static = rec_func && !(rec_func->is_method && rec_func->scope);
        const auto has_doc = rec_func && rec_func->doc && pybind11::options::show_user_defined_docstrings();
1118
1119
1120
1121
1122
        auto property = handle((PyObject *) (is_static ? get_internals().static_property_type
                                                       : &PyProperty_Type));
        attr(name) = property(fget.ptr() ? fget : none(),
                              fset.ptr() ? fset : none(),
                              /*deleter*/none(),
1123
                              pybind11::str(has_doc ? rec_func->doc : ""));
Wenzel Jakob's avatar
Wenzel Jakob committed
1124
    }
Wenzel Jakob's avatar
Wenzel Jakob committed
1125
};
1126

1127
1128
1129
1130
1131
1132
/// Set the pointer to operator new if it exists. The cast is needed because it can be overloaded.
template <typename T, typename = void_t<decltype(static_cast<void *(*)(size_t)>(T::operator new))>>
void set_operator_new(type_record *r) { r->operator_new = &T::operator new; }

template <typename> void set_operator_new(...) { }

1133
1134
1135
1136
1137
1138
template <typename T, typename SFINAE = void> struct has_operator_delete : std::false_type { };
template <typename T> struct has_operator_delete<T, void_t<decltype(static_cast<void (*)(void *)>(T::operator delete))>>
    : std::true_type { };
template <typename T, typename SFINAE = void> struct has_operator_delete_size : std::false_type { };
template <typename T> struct has_operator_delete_size<T, void_t<decltype(static_cast<void (*)(void *, size_t)>(T::operator delete))>>
    : std::true_type { };
1139
/// Call class-specific delete if it exists or global otherwise. Can also be an overload set.
1140
template <typename T, enable_if_t<has_operator_delete<T>::value, int> = 0>
1141
void call_operator_delete(T *p, size_t, size_t) { T::operator delete(p); }
1142
template <typename T, enable_if_t<!has_operator_delete<T>::value && has_operator_delete_size<T>::value, int> = 0>
1143
1144
1145
1146
void call_operator_delete(T *p, size_t s, size_t) { T::operator delete(p, s); }

inline void call_operator_delete(void *p, size_t s, size_t a) {
    (void)s; (void)a;
1147
    #if defined(__cpp_aligned_new) && (!defined(_MSC_VER) || _MSC_VER >= 1912)
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
        if (a > __STDCPP_DEFAULT_NEW_ALIGNMENT__) {
            #ifdef __cpp_sized_deallocation
                ::operator delete(p, s, std::align_val_t(a));
            #else
                ::operator delete(p, std::align_val_t(a));
            #endif
            return;
        }
    #endif
    #ifdef __cpp_sized_deallocation
1158
        ::operator delete(p, s);
1159
1160
1161
    #else
        ::operator delete(p);
    #endif
1162
}
1163

1164
1165
1166
1167
1168
1169
1170
inline void add_class_method(object& cls, const char *name_, const cpp_function &cf) {
    cls.attr(cf.name()) = cf;
    if (strcmp(name_, "__eq__") == 0 && !cls.attr("__dict__").contains("__hash__")) {
      cls.attr("__hash__") = none();
    }
}

1171
PYBIND11_NAMESPACE_END(detail)
Wenzel Jakob's avatar
Wenzel Jakob committed
1172

1173
1174
1175
1176
1177
1178
/// Given a pointer to a member function, cast it to its `Derived` version.
/// Forward everything else unchanged.
template <typename /*Derived*/, typename F>
auto method_adaptor(F &&f) -> decltype(std::forward<F>(f)) { return std::forward<F>(f); }

template <typename Derived, typename Return, typename Class, typename... Args>
1179
1180
1181
1182
1183
auto method_adaptor(Return (Class::*pmf)(Args...)) -> Return (Derived::*)(Args...) {
    static_assert(detail::is_accessible_base_of<Class, Derived>::value,
        "Cannot bind an inaccessible base class method; use a lambda definition instead");
    return pmf;
}
1184
1185

template <typename Derived, typename Return, typename Class, typename... Args>
1186
1187
1188
1189
1190
auto method_adaptor(Return (Class::*pmf)(Args...) const) -> Return (Derived::*)(Args...) const {
    static_assert(detail::is_accessible_base_of<Class, Derived>::value,
        "Cannot bind an inaccessible base class method; use a lambda definition instead");
    return pmf;
}
1191

1192
template <typename type_, typename... options>
Wenzel Jakob's avatar
Wenzel Jakob committed
1193
class class_ : public detail::generic_type {
1194
    template <typename T> using is_holder = detail::is_holder_type<type_, T>;
1195
1196
    template <typename T> using is_subtype = detail::is_strict_base_of<type_, T>;
    template <typename T> using is_base = detail::is_strict_base_of<T, type_>;
1197
1198
1199
    // struct instead of using here to help MSVC:
    template <typename T> struct is_valid_class_option :
        detail::any_of<is_holder<T>, is_subtype<T>, is_base<T>> {};
1200

Wenzel Jakob's avatar
Wenzel Jakob committed
1201
public:
1202
    using type = type_;
1203
    using type_alias = detail::exactly_one_t<is_subtype, void, options...>;
1204
    constexpr static bool has_alias = !std::is_void<type_alias>::value;
1205
    using holder_type = detail::exactly_one_t<is_holder, std::unique_ptr<type>, options...>;
1206

1207
    static_assert(detail::all_of<is_valid_class_option<options>...>::value,
1208
            "Unknown/invalid class_ template parameters provided");
Wenzel Jakob's avatar
Wenzel Jakob committed
1209

1210
1211
1212
    static_assert(!has_alias || std::is_polymorphic<type>::value,
            "Cannot use an alias class with a non-polymorphic type");

1213
    PYBIND11_OBJECT(class_, generic_type, PyType_Check)
Wenzel Jakob's avatar
Wenzel Jakob committed
1214

Wenzel Jakob's avatar
Wenzel Jakob committed
1215
1216
    template <typename... Extra>
    class_(handle scope, const char *name, const Extra &... extra) {
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
        using namespace detail;

        // MI can only be specified via class_ template options, not constructor parameters
        static_assert(
            none_of<is_pyobject<Extra>...>::value || // no base class arguments, or:
            (   constexpr_sum(is_pyobject<Extra>::value...) == 1 && // Exactly one base
                constexpr_sum(is_base<options>::value...)   == 0 && // no template option bases
                none_of<std::is_same<multiple_inheritance, Extra>...>::value), // no multiple_inheritance attr
            "Error: multiple inheritance bases must be specified via class_ template options");

        type_record record;
Wenzel Jakob's avatar
Wenzel Jakob committed
1228
1229
1230
        record.scope = scope;
        record.name = name;
        record.type = &typeid(type);
1231
        record.type_size = sizeof(conditional_t<has_alias, type_alias, type>);
1232
        record.type_align = alignof(conditional_t<has_alias, type_alias, type>&);
1233
        record.holder_size = sizeof(holder_type);
1234
        record.init_instance = init_instance;
Wenzel Jakob's avatar
Wenzel Jakob committed
1235
        record.dealloc = dealloc;
1236
        record.default_holder = detail::is_instantiation<std::unique_ptr, holder_type>::value;
Wenzel Jakob's avatar
Wenzel Jakob committed
1237

1238
1239
        set_operator_new<type>(&record);

Wenzel Jakob's avatar
Wenzel Jakob committed
1240
        /* Register base classes specified via template arguments to class_, if any */
1241
        PYBIND11_EXPAND_SIDE_EFFECTS(add_base<options>(record));
1242

Wenzel Jakob's avatar
Wenzel Jakob committed
1243
        /* Process optional arguments, if any */
1244
        process_attributes<Extra...>::init(extra..., &record);
Wenzel Jakob's avatar
Wenzel Jakob committed
1245

1246
        generic_type::initialize(record);
1247

1248
        if (has_alias) {
1249
            auto &instances = record.module_local ? registered_local_types_cpp() : get_internals().registered_types_cpp;
1250
1251
            instances[std::type_index(typeid(type_alias))] = instances[std::type_index(typeid(type))];
        }
Wenzel Jakob's avatar
Wenzel Jakob committed
1252
    }
Wenzel Jakob's avatar
Wenzel Jakob committed
1253

1254
    template <typename Base, detail::enable_if_t<is_base<Base>::value, int> = 0>
Wenzel Jakob's avatar
Wenzel Jakob committed
1255
    static void add_base(detail::type_record &rec) {
1256
        rec.add_base(typeid(Base), [](void *src) -> void * {
Wenzel Jakob's avatar
Wenzel Jakob committed
1257
1258
1259
1260
            return static_cast<Base *>(reinterpret_cast<type *>(src));
        });
    }

1261
    template <typename Base, detail::enable_if_t<!is_base<Base>::value, int> = 0>
Wenzel Jakob's avatar
Wenzel Jakob committed
1262
1263
    static void add_base(detail::type_record &) { }

1264
    template <typename Func, typename... Extra>
Wenzel Jakob's avatar
Wenzel Jakob committed
1265
    class_ &def(const char *name_, Func&& f, const Extra&... extra) {
1266
        cpp_function cf(method_adaptor<type>(std::forward<Func>(f)), name(name_), is_method(*this),
1267
                        sibling(getattr(*this, name_, none())), extra...);
1268
        add_class_method(*this, name_, cf);
Wenzel Jakob's avatar
Wenzel Jakob committed
1269
1270
1271
        return *this;
    }

1272
    template <typename Func, typename... Extra> class_ &
1273
1274
1275
    def_static(const char *name_, Func &&f, const Extra&... extra) {
        static_assert(!std::is_member_function_pointer<Func>::value,
                "def_static(...) called with a non-static member function pointer");
1276
1277
        cpp_function cf(std::forward<Func>(f), name(name_), scope(*this),
                        sibling(getattr(*this, name_, none())), extra...);
1278
        attr(cf.name()) = staticmethod(cf);
Wenzel Jakob's avatar
Wenzel Jakob committed
1279
1280
1281
        return *this;
    }

1282
    template <detail::op_id id, detail::op_type ot, typename L, typename R, typename... Extra>
Wenzel Jakob's avatar
Wenzel Jakob committed
1283
    class_ &def(const detail::op_<id, ot, L, R> &op, const Extra&... extra) {
1284
        op.execute(*this, extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
1285
1286
1287
        return *this;
    }

1288
    template <detail::op_id id, detail::op_type ot, typename L, typename R, typename... Extra>
Wenzel Jakob's avatar
Wenzel Jakob committed
1289
    class_ & def_cast(const detail::op_<id, ot, L, R> &op, const Extra&... extra) {
1290
        op.execute_cast(*this, extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
1291
1292
1293
        return *this;
    }

1294
    template <typename... Args, typename... Extra>
1295
    class_ &def(const detail::initimpl::constructor<Args...> &init, const Extra&... extra) {
1296
        init.execute(*this, extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
1297
1298
1299
        return *this;
    }

1300
    template <typename... Args, typename... Extra>
1301
    class_ &def(const detail::initimpl::alias_constructor<Args...> &init, const Extra&... extra) {
1302
        init.execute(*this, extra...);
1303
1304
1305
        return *this;
    }

1306
1307
1308
1309
1310
1311
    template <typename... Args, typename... Extra>
    class_ &def(detail::initimpl::factory<Args...> &&init, const Extra&... extra) {
        std::move(init).execute(*this, extra...);
        return *this;
    }

1312
1313
1314
1315
1316
1317
    template <typename... Args, typename... Extra>
    class_ &def(detail::initimpl::pickle_factory<Args...> &&pf, const Extra &...extra) {
        std::move(pf).execute(*this, extra...);
        return *this;
    }

1318
1319
    template <typename Func>
    class_& def_buffer(Func &&func) {
Wenzel Jakob's avatar
Wenzel Jakob committed
1320
        struct capture { Func func; };
1321
        auto *ptr = new capture { std::forward<Func>(func) };
Wenzel Jakob's avatar
Wenzel Jakob committed
1322
        install_buffer_funcs([](PyObject *obj, void *ptr) -> buffer_info* {
1323
            detail::make_caster<type> caster;
Wenzel Jakob's avatar
Wenzel Jakob committed
1324
1325
            if (!caster.load(obj, false))
                return nullptr;
Wenzel Jakob's avatar
Wenzel Jakob committed
1326
1327
            return new buffer_info(((capture *) ptr)->func(caster));
        }, ptr);
1328
1329
1330
1331
        weakref(m_ptr, cpp_function([ptr](handle wr) {
            delete ptr;
            wr.dec_ref();
        })).release();
Wenzel Jakob's avatar
Wenzel Jakob committed
1332
1333
1334
        return *this;
    }

1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
    template <typename Return, typename Class, typename... Args>
    class_ &def_buffer(Return (Class::*func)(Args...)) {
        return def_buffer([func] (type &obj) { return (obj.*func)(); });
    }

    template <typename Return, typename Class, typename... Args>
    class_ &def_buffer(Return (Class::*func)(Args...) const) {
        return def_buffer([func] (const type &obj) { return (obj.*func)(); });
    }

1345
    template <typename C, typename D, typename... Extra>
Wenzel Jakob's avatar
Wenzel Jakob committed
1346
    class_ &def_readwrite(const char *name, D C::*pm, const Extra&... extra) {
1347
        static_assert(std::is_same<C, type>::value || std::is_base_of<C, type>::value, "def_readwrite() requires a class member (or base class member)");
1348
1349
        cpp_function fget([pm](const type &c) -> const D &{ return c.*pm; }, is_method(*this)),
                     fset([pm](type &c, const D &value) { c.*pm = value; }, is_method(*this));
1350
        def_property(name, fget, fset, return_value_policy::reference_internal, extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
1351
1352
1353
        return *this;
    }

1354
    template <typename C, typename D, typename... Extra>
Wenzel Jakob's avatar
Wenzel Jakob committed
1355
    class_ &def_readonly(const char *name, const D C::*pm, const Extra& ...extra) {
1356
        static_assert(std::is_same<C, type>::value || std::is_base_of<C, type>::value, "def_readonly() requires a class member (or base class member)");
1357
        cpp_function fget([pm](const type &c) -> const D &{ return c.*pm; }, is_method(*this));
1358
        def_property_readonly(name, fget, return_value_policy::reference_internal, extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
1359
1360
1361
        return *this;
    }

1362
    template <typename D, typename... Extra>
Wenzel Jakob's avatar
Wenzel Jakob committed
1363
    class_ &def_readwrite_static(const char *name, D *pm, const Extra& ...extra) {
1364
1365
1366
        cpp_function fget([pm](object) -> const D &{ return *pm; }, scope(*this)),
                     fset([pm](object, const D &value) { *pm = value; }, scope(*this));
        def_property_static(name, fget, fset, return_value_policy::reference, extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
1367
1368
1369
        return *this;
    }

1370
    template <typename D, typename... Extra>
Wenzel Jakob's avatar
Wenzel Jakob committed
1371
    class_ &def_readonly_static(const char *name, const D *pm, const Extra& ...extra) {
1372
1373
        cpp_function fget([pm](object) -> const D &{ return *pm; }, scope(*this));
        def_property_readonly_static(name, fget, return_value_policy::reference, extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
1374
1375
1376
        return *this;
    }

1377
1378
1379
    /// Uses return_value_policy::reference_internal by default
    template <typename Getter, typename... Extra>
    class_ &def_property_readonly(const char *name, const Getter &fget, const Extra& ...extra) {
1380
1381
        return def_property_readonly(name, cpp_function(method_adaptor<type>(fget)),
                                     return_value_policy::reference_internal, extra...);
1382
1383
1384
    }

    /// Uses cpp_function's return_value_policy by default
1385
1386
    template <typename... Extra>
    class_ &def_property_readonly(const char *name, const cpp_function &fget, const Extra& ...extra) {
1387
        return def_property(name, fget, nullptr, extra...);
1388
1389
1390
1391
1392
1393
    }

    /// Uses return_value_policy::reference by default
    template <typename Getter, typename... Extra>
    class_ &def_property_readonly_static(const char *name, const Getter &fget, const Extra& ...extra) {
        return def_property_readonly_static(name, cpp_function(fget), return_value_policy::reference, extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
1394
1395
    }

1396
    /// Uses cpp_function's return_value_policy by default
1397
1398
    template <typename... Extra>
    class_ &def_property_readonly_static(const char *name, const cpp_function &fget, const Extra& ...extra) {
1399
        return def_property_static(name, fget, nullptr, extra...);
1400
1401
1402
    }

    /// Uses return_value_policy::reference_internal by default
1403
1404
1405
1406
    template <typename Getter, typename Setter, typename... Extra>
    class_ &def_property(const char *name, const Getter &fget, const Setter &fset, const Extra& ...extra) {
        return def_property(name, fget, cpp_function(method_adaptor<type>(fset)), extra...);
    }
1407
1408
    template <typename Getter, typename... Extra>
    class_ &def_property(const char *name, const Getter &fget, const cpp_function &fset, const Extra& ...extra) {
1409
1410
        return def_property(name, cpp_function(method_adaptor<type>(fget)), fset,
                            return_value_policy::reference_internal, extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
1411
1412
    }

1413
    /// Uses cpp_function's return_value_policy by default
1414
1415
    template <typename... Extra>
    class_ &def_property(const char *name, const cpp_function &fget, const cpp_function &fset, const Extra& ...extra) {
1416
        return def_property_static(name, fget, fset, is_method(*this), extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
1417
1418
    }

1419
1420
1421
1422
1423
1424
1425
    /// Uses return_value_policy::reference by default
    template <typename Getter, typename... Extra>
    class_ &def_property_static(const char *name, const Getter &fget, const cpp_function &fset, const Extra& ...extra) {
        return def_property_static(name, cpp_function(fget), fset, return_value_policy::reference, extra...);
    }

    /// Uses cpp_function's return_value_policy by default
1426
1427
    template <typename... Extra>
    class_ &def_property_static(const char *name, const cpp_function &fget, const cpp_function &fset, const Extra& ...extra) {
1428
1429
        static_assert( 0 == detail::constexpr_sum(std::is_base_of<arg, Extra>::value...),
                      "Argument annotations are not allowed for properties");
1430
        auto rec_fget = get_function_record(fget), rec_fset = get_function_record(fset);
1431
1432
1433
1434
1435
1436
1437
1438
        auto *rec_active = rec_fget;
        if (rec_fget) {
           char *doc_prev = rec_fget->doc; /* 'extra' field may include a property-specific documentation string */
           detail::process_attributes<Extra...>::init(extra..., rec_fget);
           if (rec_fget->doc && rec_fget->doc != doc_prev) {
              free(doc_prev);
              rec_fget->doc = strdup(rec_fget->doc);
           }
1439
1440
        }
        if (rec_fset) {
1441
            char *doc_prev = rec_fset->doc;
1442
            detail::process_attributes<Extra...>::init(extra..., rec_fset);
1443
1444
1445
1446
            if (rec_fset->doc && rec_fset->doc != doc_prev) {
                free(doc_prev);
                rec_fset->doc = strdup(rec_fset->doc);
            }
1447
            if (! rec_active) rec_active = rec_fset;
1448
        }
1449
        def_property_static_impl(name, fget, fset, rec_active);
Wenzel Jakob's avatar
Wenzel Jakob committed
1450
1451
        return *this;
    }
1452

Wenzel Jakob's avatar
Wenzel Jakob committed
1453
private:
1454
1455
    /// Initialize holder object, variant 1: object derives from enable_shared_from_this
    template <typename T>
1456
    static void init_holder(detail::instance *inst, detail::value_and_holder &v_h,
1457
            const holder_type * /* unused */, const std::enable_shared_from_this<T> * /* dummy */) {
1458
        try {
1459
1460
            auto sh = std::dynamic_pointer_cast<typename holder_type::element_type>(
                    v_h.value_ptr<type>()->shared_from_this());
1461
            if (sh) {
1462
                new (std::addressof(v_h.holder<holder_type>())) holder_type(std::move(sh));
1463
                v_h.set_holder_constructed();
1464
            }
1465
        } catch (const std::bad_weak_ptr &) {}
1466
1467

        if (!v_h.holder_constructed() && inst->owned) {
1468
            new (std::addressof(v_h.holder<holder_type>())) holder_type(v_h.value_ptr<type>());
1469
            v_h.set_holder_constructed();
1470
        }
1471
1472
    }

1473
1474
    static void init_holder_from_existing(const detail::value_and_holder &v_h,
            const holder_type *holder_ptr, std::true_type /*is_copy_constructible*/) {
1475
        new (std::addressof(v_h.holder<holder_type>())) holder_type(*reinterpret_cast<const holder_type *>(holder_ptr));
1476
1477
    }

1478
1479
    static void init_holder_from_existing(const detail::value_and_holder &v_h,
            const holder_type *holder_ptr, std::false_type /*is_copy_constructible*/) {
1480
        new (std::addressof(v_h.holder<holder_type>())) holder_type(std::move(*const_cast<holder_type *>(holder_ptr)));
1481
1482
    }

1483
    /// Initialize holder object, variant 2: try to construct from existing holder object, if possible
1484
    static void init_holder(detail::instance *inst, detail::value_and_holder &v_h,
1485
            const holder_type *holder_ptr, const void * /* dummy -- not enable_shared_from_this<T>) */) {
1486
        if (holder_ptr) {
1487
1488
            init_holder_from_existing(v_h, holder_ptr, std::is_copy_constructible<holder_type>());
            v_h.set_holder_constructed();
1489
        } else if (inst->owned || detail::always_construct_holder<holder_type>::value) {
1490
            new (std::addressof(v_h.holder<holder_type>())) holder_type(v_h.value_ptr<type>());
1491
            v_h.set_holder_constructed();
1492
        }
1493
1494
    }

1495
1496
1497
1498
1499
    /// Performs instance initialization including constructing a holder and registering the known
    /// instance.  Should be called as soon as the `type` value_ptr is set for an instance.  Takes an
    /// optional pointer to an existing holder to use; if not specified and the instance is
    /// `.owned`, a new holder will be constructed to manage the value pointer.
    static void init_instance(detail::instance *inst, const void *holder_ptr) {
1500
        auto v_h = inst->get_value_and_holder(detail::get_type_info(typeid(type)));
1501
1502
1503
1504
        if (!v_h.instance_registered()) {
            register_instance(inst, v_h.value_ptr(), v_h.type);
            v_h.set_instance_registered();
        }
1505
        init_holder(inst, v_h, (const holder_type *) holder_ptr, v_h.value_ptr<type>());
1506
1507
    }

1508
    /// Deallocates an instance; via holder, if constructed; otherwise via operator delete.
1509
    static void dealloc(detail::value_and_holder &v_h) {
1510
1511
1512
1513
1514
1515
1516
        // We could be deallocating because we are cleaning up after a Python exception.
        // If so, the Python error indicator will be set. We need to clear that before
        // running the destructor, in case the destructor code calls more Python.
        // If we don't, the Python API will exit with an exception, and pybind11 will
        // throw error_already_set from the C++ destructor which is forbidden and triggers
        // std::terminate().
        error_scope scope;
1517
        if (v_h.holder_constructed()) {
1518
            v_h.holder<holder_type>().~holder_type();
1519
1520
1521
            v_h.set_holder_constructed(false);
        }
        else {
1522
1523
1524
1525
            detail::call_operator_delete(v_h.value_ptr<type>(),
                v_h.type->type_size,
                v_h.type->type_align
            );
1526
1527
        }
        v_h.value_ptr() = nullptr;
Wenzel Jakob's avatar
Wenzel Jakob committed
1528
    }
1529
1530
1531

    static detail::function_record *get_function_record(handle h) {
        h = detail::get_function(h);
Wenzel Jakob's avatar
Wenzel Jakob committed
1532
        return h ? (detail::function_record *) reinterpret_borrow<capsule>(PyCFunction_GET_SELF(h.ptr()))
1533
                 : nullptr;
1534
    }
Wenzel Jakob's avatar
Wenzel Jakob committed
1535
1536
};

1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
/// Binds an existing constructor taking arguments Args...
template <typename... Args> detail::initimpl::constructor<Args...> init() { return {}; }
/// Like `init<Args...>()`, but the instance is always constructed through the alias class (even
/// when not inheriting on the Python side).
template <typename... Args> detail::initimpl::alias_constructor<Args...> init_alias() { return {}; }

/// Binds a factory function as a constructor
template <typename Func, typename Ret = detail::initimpl::factory<Func>>
Ret init(Func &&f) { return {std::forward<Func>(f)}; }

/// Dual-argument factory function: the first function is called when no alias is needed, the second
/// when an alias is needed (i.e. due to python-side inheritance).  Arguments must be identical.
template <typename CFunc, typename AFunc, typename Ret = detail::initimpl::factory<CFunc, AFunc>>
Ret init(CFunc &&c, AFunc &&a) {
    return {std::forward<CFunc>(c), std::forward<AFunc>(a)};
}

/// Binds pickling functions `__getstate__` and `__setstate__` and ensures that the type
/// returned by `__getstate__` is the same as the argument accepted by `__setstate__`.
template <typename GetState, typename SetState>
detail::initimpl::pickle_factory<GetState, SetState> pickle(GetState &&g, SetState &&s) {
    return {std::forward<GetState>(g), std::forward<SetState>(s)};
Marcin Wojdyr's avatar
Marcin Wojdyr committed
1559
}
1560

1561
PYBIND11_NAMESPACE_BEGIN(detail)
David Vo's avatar
David Vo committed
1562
1563
1564

inline str enum_name(handle arg) {
    dict entries = arg.get_type().attr("__entries");
1565
    for (auto kv : entries) {
David Vo's avatar
David Vo committed
1566
1567
1568
1569
1570
1571
        if (handle(kv.second[int_(0)]).equal(arg))
            return pybind11::str(kv.first);
    }
    return "???";
}

1572
1573
1574
1575
1576
1577
1578
1579
1580
struct enum_base {
    enum_base(handle base, handle parent) : m_base(base), m_parent(parent) { }

    PYBIND11_NOINLINE void init(bool is_arithmetic, bool is_convertible) {
        m_base.attr("__entries") = dict();
        auto property = handle((PyObject *) &PyProperty_Type);
        auto static_property = handle((PyObject *) get_internals().static_property_type);

        m_base.attr("__repr__") = cpp_function(
David Vo's avatar
David Vo committed
1581
            [](object arg) -> str {
1582
                handle type = type::handle_of(arg);
1583
                object type_name = type.attr("__name__");
David Vo's avatar
David Vo committed
1584
                return pybind11::str("<{}.{}: {}>").format(type_name, enum_name(arg), int_(arg));
1585
            }, name("__repr__"), is_method(m_base)
1586
1587
        );

David Vo's avatar
David Vo committed
1588
1589
1590
        m_base.attr("name") = property(cpp_function(&enum_name, name("name"), is_method(m_base)));

        m_base.attr("__str__") = cpp_function(
1591
            [](handle arg) -> str {
David Vo's avatar
David Vo committed
1592
1593
                object type_name = type::handle_of(arg).attr("__name__");
                return pybind11::str("{}.{}").format(type_name, enum_name(arg));
1594
            }, name("name"), is_method(m_base)
David Vo's avatar
David Vo committed
1595
        );
1596
1597
1598
1599
1600
1601
1602
1603

        m_base.attr("__doc__") = static_property(cpp_function(
            [](handle arg) -> std::string {
                std::string docstring;
                dict entries = arg.attr("__entries");
                if (((PyTypeObject *) arg.ptr())->tp_doc)
                    docstring += std::string(((PyTypeObject *) arg.ptr())->tp_doc) + "\n\n";
                docstring += "Members:";
1604
                for (auto kv : entries) {
1605
1606
1607
1608
1609
1610
1611
                    auto key = std::string(pybind11::str(kv.first));
                    auto comment = kv.second[int_(1)];
                    docstring += "\n\n  " + key;
                    if (!comment.is_none())
                        docstring += " : " + (std::string) pybind11::str(comment);
                }
                return docstring;
1612
            }, name("__doc__")
1613
1614
1615
1616
1617
        ), none(), none(), "");

        m_base.attr("__members__") = static_property(cpp_function(
            [](handle arg) -> dict {
                dict entries = arg.attr("__entries"), m;
1618
                for (auto kv : entries)
1619
1620
                    m[kv.first] = kv.second[int_(0)];
                return m;
1621
            }, name("__members__")), none(), none(), ""
1622
1623
        );

1624
        #define PYBIND11_ENUM_OP_STRICT(op, expr, strict_behavior)                     \
1625
1626
            m_base.attr(op) = cpp_function(                                            \
                [](object a, object b) {                                               \
1627
                    if (!type::handle_of(a).is(type::handle_of(b)))                    \
1628
                        strict_behavior;                                               \
1629
1630
                    return expr;                                                       \
                },                                                                     \
1631
                name(op), is_method(m_base), arg("other"))
1632
1633
1634
1635
1636
1637
1638

        #define PYBIND11_ENUM_OP_CONV(op, expr)                                        \
            m_base.attr(op) = cpp_function(                                            \
                [](object a_, object b_) {                                             \
                    int_ a(a_), b(b_);                                                 \
                    return expr;                                                       \
                },                                                                     \
1639
                name(op), is_method(m_base), arg("other"))
1640

1641
1642
1643
1644
1645
1646
        #define PYBIND11_ENUM_OP_CONV_LHS(op, expr)                                    \
            m_base.attr(op) = cpp_function(                                            \
                [](object a_, object b) {                                              \
                    int_ a(a_);                                                        \
                    return expr;                                                       \
                },                                                                     \
1647
                name(op), is_method(m_base), arg("other"))
1648

1649
        if (is_convertible) {
1650
1651
            PYBIND11_ENUM_OP_CONV_LHS("__eq__", !b.is_none() &&  a.equal(b));
            PYBIND11_ENUM_OP_CONV_LHS("__ne__",  b.is_none() || !a.equal(b));
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663

            if (is_arithmetic) {
                PYBIND11_ENUM_OP_CONV("__lt__",   a <  b);
                PYBIND11_ENUM_OP_CONV("__gt__",   a >  b);
                PYBIND11_ENUM_OP_CONV("__le__",   a <= b);
                PYBIND11_ENUM_OP_CONV("__ge__",   a >= b);
                PYBIND11_ENUM_OP_CONV("__and__",  a &  b);
                PYBIND11_ENUM_OP_CONV("__rand__", a &  b);
                PYBIND11_ENUM_OP_CONV("__or__",   a |  b);
                PYBIND11_ENUM_OP_CONV("__ror__",  a |  b);
                PYBIND11_ENUM_OP_CONV("__xor__",  a ^  b);
                PYBIND11_ENUM_OP_CONV("__rxor__", a ^  b);
1664
                m_base.attr("__invert__") = cpp_function(
1665
                    [](object arg) { return ~(int_(arg)); }, name("__invert__"), is_method(m_base));
1666
1667
            }
        } else {
1668
1669
            PYBIND11_ENUM_OP_STRICT("__eq__",  int_(a).equal(int_(b)), return false);
            PYBIND11_ENUM_OP_STRICT("__ne__", !int_(a).equal(int_(b)), return true);
1670
1671

            if (is_arithmetic) {
1672
1673
1674
1675
1676
1677
                #define PYBIND11_THROW throw type_error("Expected an enumeration of matching type!");
                PYBIND11_ENUM_OP_STRICT("__lt__", int_(a) <  int_(b), PYBIND11_THROW);
                PYBIND11_ENUM_OP_STRICT("__gt__", int_(a) >  int_(b), PYBIND11_THROW);
                PYBIND11_ENUM_OP_STRICT("__le__", int_(a) <= int_(b), PYBIND11_THROW);
                PYBIND11_ENUM_OP_STRICT("__ge__", int_(a) >= int_(b), PYBIND11_THROW);
                #undef PYBIND11_THROW
1678
1679
1680
            }
        }

1681
        #undef PYBIND11_ENUM_OP_CONV_LHS
1682
1683
1684
        #undef PYBIND11_ENUM_OP_CONV
        #undef PYBIND11_ENUM_OP_STRICT

1685
1686
        m_base.attr("__getstate__") = cpp_function(
            [](object arg) { return int_(arg); }, name("__getstate__"), is_method(m_base));
1687

1688
1689
        m_base.attr("__hash__") = cpp_function(
            [](object arg) { return int_(arg); }, name("__hash__"), is_method(m_base));
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
    }

    PYBIND11_NOINLINE void value(char const* name_, object value, const char *doc = nullptr) {
        dict entries = m_base.attr("__entries");
        str name(name_);
        if (entries.contains(name)) {
            std::string type_name = (std::string) str(m_base.attr("__name__"));
            throw value_error(type_name + ": element \"" + std::string(name_) + "\" already exists!");
        }

        entries[name] = std::make_pair(value, doc);
        m_base.attr(name) = value;
    }

    PYBIND11_NOINLINE void export_values() {
        dict entries = m_base.attr("__entries");
1706
        for (auto kv : entries)
1707
1708
1709
1710
1711
1712
1713
            m_parent.attr(kv.first) = kv.second[int_(0)];
    }

    handle m_base;
    handle m_parent;
};

1714
PYBIND11_NAMESPACE_END(detail)
1715

Wenzel Jakob's avatar
Wenzel Jakob committed
1716
1717
1718
/// Binds C++ enumerations and enumeration classes to Python
template <typename Type> class enum_ : public class_<Type> {
public:
1719
1720
1721
1722
1723
    using Base = class_<Type>;
    using Base::def;
    using Base::attr;
    using Base::def_property_readonly;
    using Base::def_property_readonly_static;
1724
1725
    using Scalar = typename std::underlying_type<Type>::type;

Wenzel Jakob's avatar
Wenzel Jakob committed
1726
1727
    template <typename... Extra>
    enum_(const handle &scope, const char *name, const Extra&... extra)
1728
      : class_<Type>(scope, name, extra...), m_base(*this, scope) {
1729
        constexpr bool is_arithmetic = detail::any_of<std::is_same<arithmetic, Extra>...>::value;
1730
1731
        constexpr bool is_convertible = std::is_convertible<Type, Scalar>::value;
        m_base.init(is_arithmetic, is_convertible);
1732

1733
        def(init([](Scalar i) { return static_cast<Type>(i); }), arg("value"));
1734
        def_property_readonly("value", [](Type value) { return (Scalar) value; });
1735
        def("__int__", [](Type value) { return (Scalar) value; });
1736
1737
1738
        #if PY_MAJOR_VERSION < 3
            def("__long__", [](Type value) { return (Scalar) value; });
        #endif
1739
        #if PY_MAJOR_VERSION > 3 || (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 8)
1740
1741
1742
            def("__index__", [](Type value) { return (Scalar) value; });
        #endif

1743
1744
1745
1746
1747
        attr("__setstate__") = cpp_function(
            [](detail::value_and_holder &v_h, Scalar arg) {
                detail::initimpl::setstate<Base>(v_h, static_cast<Type>(arg),
                        Py_TYPE(v_h.inst) != v_h.type->type); },
            detail::is_new_style_constructor(),
1748
            pybind11::name("__setstate__"), is_method(*this), arg("state"));
Wenzel Jakob's avatar
Wenzel Jakob committed
1749
1750
1751
    }

    /// Export enumeration entries into the parent scope
1752
    enum_& export_values() {
1753
        m_base.export_values();
1754
        return *this;
Wenzel Jakob's avatar
Wenzel Jakob committed
1755
1756
1757
    }

    /// Add an enumeration entry
1758
    enum_& value(char const* name, Type value, const char *doc = nullptr) {
1759
        m_base.value(name, pybind11::cast(value, return_value_policy::copy), doc);
Wenzel Jakob's avatar
Wenzel Jakob committed
1760
1761
        return *this;
    }
1762

Wenzel Jakob's avatar
Wenzel Jakob committed
1763
private:
1764
    detail::enum_base m_base;
Wenzel Jakob's avatar
Wenzel Jakob committed
1765
1766
};

1767
PYBIND11_NAMESPACE_BEGIN(detail)
1768

1769

1770
inline void keep_alive_impl(handle nurse, handle patient) {
1771
    if (!nurse || !patient)
1772
        pybind11_fail("Could not activate keep_alive!");
1773

1774
    if (patient.is_none() || nurse.is_none())
1775
        return; /* Nothing to keep alive or nothing to be kept alive by */
1776

1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
    auto tinfo = all_type_info(Py_TYPE(nurse.ptr()));
    if (!tinfo.empty()) {
        /* It's a pybind-registered type, so we can store the patient in the
         * internal list. */
        add_patient(nurse.ptr(), patient.ptr());
    }
    else {
        /* Fall back to clever approach based on weak references taken from
         * Boost.Python. This is not used for pybind-registered types because
         * the objects can be destroyed out-of-order in a GC pass. */
        cpp_function disable_lifesupport(
            [patient](handle weakref) { patient.dec_ref(); weakref.dec_ref(); });
1789

1790
        weakref wr(nurse, disable_lifesupport);
1791

1792
1793
1794
        patient.inc_ref(); /* reference patient and leak the weak reference */
        (void) wr.release();
    }
1795
1796
}

1797
PYBIND11_NOINLINE inline void keep_alive_impl(size_t Nurse, size_t Patient, function_call &call, handle ret) {
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
    auto get_arg = [&](size_t n) {
        if (n == 0)
            return ret;
        else if (n == 1 && call.init_self)
            return call.init_self;
        else if (n <= call.args.size())
            return call.args[n - 1];
        return handle();
    };

    keep_alive_impl(get_arg(Nurse), get_arg(Patient));
1809
1810
}

1811
1812
inline std::pair<decltype(internals::registered_types_py)::iterator, bool> all_type_info_get_cache(PyTypeObject *type) {
    auto res = get_internals().registered_types_py
Jason Rhinelander's avatar
Jason Rhinelander committed
1813
#ifdef __cpp_lib_unordered_map_try_emplace
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
        .try_emplace(type);
#else
        .emplace(type, std::vector<detail::type_info *>());
#endif
    if (res.second) {
        // New cache entry created; set up a weak reference to automatically remove it if the type
        // gets destroyed:
        weakref((PyObject *) type, cpp_function([type](handle wr) {
            get_internals().registered_types_py.erase(type);
            wr.dec_ref();
        })).release();
    }

    return res;
}

1830
template <typename Iterator, typename Sentinel, bool KeyIterator, return_value_policy Policy>
1831
1832
1833
struct iterator_state {
    Iterator it;
    Sentinel end;
1834
    bool first_or_done;
1835
};
1836

1837
PYBIND11_NAMESPACE_END(detail)
Wenzel Jakob's avatar
Wenzel Jakob committed
1838

1839
/// Makes a python iterator from a first and past-the-end C++ InputIterator.
1840
1841
template <return_value_policy Policy = return_value_policy::reference_internal,
          typename Iterator,
1842
          typename Sentinel,
1843
1844
          typename ValueType = decltype(*std::declval<Iterator>()),
          typename... Extra>
1845
iterator make_iterator(Iterator first, Sentinel last, Extra &&... extra) {
1846
    using state = detail::iterator_state<Iterator, Sentinel, false, Policy>;
1847

Wenzel Jakob's avatar
Wenzel Jakob committed
1848
    if (!detail::get_type_info(typeid(state), false)) {
1849
        class_<state>(handle(), "iterator", pybind11::module_local())
1850
            .def("__iter__", [](state &s) -> state& { return s; })
1851
            .def("__next__", [](state &s) -> ValueType {
1852
                if (!s.first_or_done)
1853
1854
                    ++s.it;
                else
1855
1856
1857
                    s.first_or_done = false;
                if (s.it == s.end) {
                    s.first_or_done = true;
1858
                    throw stop_iteration();
1859
                }
1860
                return *s.it;
1861
            }, std::forward<Extra>(extra)..., Policy);
1862
1863
    }

1864
    return cast(state{first, last, true});
1865
}
1866

1867
1868
/// Makes an python iterator over the keys (`.first`) of a iterator over pairs from a
/// first and past-the-end InputIterator.
1869
1870
template <return_value_policy Policy = return_value_policy::reference_internal,
          typename Iterator,
1871
          typename Sentinel,
1872
          typename KeyType = decltype((*std::declval<Iterator>()).first),
1873
          typename... Extra>
1874
iterator make_key_iterator(Iterator first, Sentinel last, Extra &&... extra) {
1875
    using state = detail::iterator_state<Iterator, Sentinel, true, Policy>;
1876

Wenzel Jakob's avatar
Wenzel Jakob committed
1877
    if (!detail::get_type_info(typeid(state), false)) {
1878
        class_<state>(handle(), "iterator", pybind11::module_local())
1879
1880
            .def("__iter__", [](state &s) -> state& { return s; })
            .def("__next__", [](state &s) -> KeyType {
1881
                if (!s.first_or_done)
1882
1883
                    ++s.it;
                else
1884
1885
1886
                    s.first_or_done = false;
                if (s.it == s.end) {
                    s.first_or_done = true;
1887
                    throw stop_iteration();
1888
                }
1889
                return (*s.it).first;
1890
            }, std::forward<Extra>(extra)..., Policy);
1891
1892
    }

1893
    return cast(state{first, last, true});
1894
}
1895

1896
1897
/// Makes an iterator over values of an stl container or other container supporting
/// `std::begin()`/`std::end()`
1898
1899
1900
template <return_value_policy Policy = return_value_policy::reference_internal,
          typename Type, typename... Extra> iterator make_iterator(Type &value, Extra&&... extra) {
    return make_iterator<Policy>(std::begin(value), std::end(value), extra...);
1901
1902
}

1903
1904
/// Makes an iterator over the keys (`.first`) of a stl map-like container supporting
/// `std::begin()`/`std::end()`
1905
1906
1907
template <return_value_policy Policy = return_value_policy::reference_internal,
          typename Type, typename... Extra> iterator make_key_iterator(Type &value, Extra&&... extra) {
    return make_key_iterator<Policy>(std::begin(value), std::end(value), extra...);
1908
1909
}

Wenzel Jakob's avatar
Wenzel Jakob committed
1910
template <typename InputType, typename OutputType> void implicitly_convertible() {
1911
1912
    struct set_flag {
        bool &flag;
1913
        set_flag(bool &flag_) : flag(flag_) { flag_ = true; }
1914
1915
        ~set_flag() { flag = false; }
    };
1916
    auto implicit_caster = [](PyObject *obj, PyTypeObject *type) -> PyObject * {
1917
1918
1919
1920
        static bool currently_used = false;
        if (currently_used) // implicit conversions are non-reentrant
            return nullptr;
        set_flag flag_helper(currently_used);
1921
        if (!detail::make_caster<InputType>().load(obj, false))
Wenzel Jakob's avatar
Wenzel Jakob committed
1922
1923
1924
1925
1926
1927
1928
1929
            return nullptr;
        tuple args(1);
        args[0] = obj;
        PyObject *result = PyObject_Call((PyObject *) type, args.ptr(), nullptr);
        if (result == nullptr)
            PyErr_Clear();
        return result;
    };
1930
1931
1932
1933

    if (auto tinfo = detail::get_type_info(typeid(OutputType)))
        tinfo->implicit_conversions.push_back(implicit_caster);
    else
1934
        pybind11_fail("implicitly_convertible: Unable to find type " + type_id<OutputType>());
Wenzel Jakob's avatar
Wenzel Jakob committed
1935
1936
}

1937
1938
1939
1940
1941
1942
template <typename ExceptionTranslator>
void register_exception_translator(ExceptionTranslator&& translator) {
    detail::get_internals().registered_exception_translators.push_front(
        std::forward<ExceptionTranslator>(translator));
}

1943
1944
/**
 * Wrapper to generate a new Python exception type.
1945
1946
1947
1948
1949
1950
1951
1952
 *
 * This should only be used with PyErr_SetString for now.
 * It is not (yet) possible to use as a py::base.
 * Template type argument is reserved for future use.
 */
template <typename type>
class exception : public object {
public:
1953
    exception() = default;
1954
    exception(handle scope, const char *name, handle base = PyExc_Exception) {
1955
1956
        std::string full_name = scope.attr("__name__").cast<std::string>() +
                                std::string(".") + name;
1957
        m_ptr = PyErr_NewException(const_cast<char *>(full_name.c_str()), base.ptr(), NULL);
1958
        if (hasattr(scope, "__dict__") && scope.attr("__dict__").contains(name))
1959
1960
1961
            pybind11_fail("Error during initialization: multiple incompatible "
                          "definitions with name \"" + std::string(name) + "\"");
        scope.attr(name) = *this;
1962
    }
1963
1964
1965
1966
1967

    // Sets the current python exception to this exception object with the given message
    void operator()(const char *message) {
        PyErr_SetString(m_ptr, message);
    }
1968
1969
};

1970
PYBIND11_NAMESPACE_BEGIN(detail)
1971
1972
1973
1974
1975
// Returns a reference to a function-local static exception object used in the simple
// register_exception approach below.  (It would be simpler to have the static local variable
// directly in register_exception, but that makes clang <3.5 segfault - issue #1349).
template <typename CppException>
exception<CppException> &get_exception_object() { static exception<CppException> ex; return ex; }
1976
PYBIND11_NAMESPACE_END(detail)
1977

1978
1979
/**
 * Registers a Python exception in `m` of the given `name` and installs an exception translator to
1980
1981
1982
1983
 * translate the C++ exception to the created Python exception using the exceptions what() method.
 * This is intended for simple exception translations; for more complex translation, register the
 * exception object and translator directly.
 */
1984
1985
1986
template <typename CppException>
exception<CppException> &register_exception(handle scope,
                                            const char *name,
1987
                                            handle base = PyExc_Exception) {
1988
1989
1990
    auto &ex = detail::get_exception_object<CppException>();
    if (!ex) ex = exception<CppException>(scope, name, base);

1991
1992
1993
1994
    register_exception_translator([](std::exception_ptr p) {
        if (!p) return;
        try {
            std::rethrow_exception(p);
1995
        } catch (const CppException &e) {
1996
            detail::get_exception_object<CppException>()(e.what());
1997
1998
1999
2000
2001
        }
    });
    return ex;
}

2002
PYBIND11_NAMESPACE_BEGIN(detail)
Dean Moldovan's avatar
Dean Moldovan committed
2003
2004
2005
PYBIND11_NOINLINE inline void print(tuple args, dict kwargs) {
    auto strings = tuple(args.size());
    for (size_t i = 0; i < args.size(); ++i) {
2006
        strings[i] = str(args[i]);
Dean Moldovan's avatar
Dean Moldovan committed
2007
    }
2008
    auto sep = kwargs.contains("sep") ? kwargs["sep"] : cast(" ");
2009
    auto line = sep.attr("join")(strings);
Dean Moldovan's avatar
Dean Moldovan committed
2010

2011
2012
2013
2014
2015
    object file;
    if (kwargs.contains("file")) {
        file = kwargs["file"].cast<object>();
    } else {
        try {
2016
            file = module_::import("sys").attr("stdout");
2017
        } catch (const error_already_set &) {
2018
2019
2020
2021
2022
2023
2024
2025
            /* If print() is called from code that is executed as
               part of garbage collection during interpreter shutdown,
               importing 'sys' can fail. Give up rather than crashing the
               interpreter in this case. */
            return;
        }
    }

2026
    auto write = file.attr("write");
Dean Moldovan's avatar
Dean Moldovan committed
2027
    write(line);
2028
    write(kwargs.contains("end") ? kwargs["end"] : cast("\n"));
Dean Moldovan's avatar
Dean Moldovan committed
2029

2030
    if (kwargs.contains("flush") && kwargs["flush"].cast<bool>())
2031
        file.attr("flush")();
Dean Moldovan's avatar
Dean Moldovan committed
2032
}
2033
PYBIND11_NAMESPACE_END(detail)
Dean Moldovan's avatar
Dean Moldovan committed
2034
2035
2036
2037
2038
2039
2040

template <return_value_policy policy = return_value_policy::automatic_reference, typename... Args>
void print(Args &&...args) {
    auto c = detail::collect_arguments<policy>(std::forward<Args>(args)...);
    detail::print(c.args(), c.kwargs());
}

Wenzel Jakob's avatar
Wenzel Jakob committed
2041
#if defined(WITH_THREAD) && !defined(PYPY_VERSION)
2042
2043
2044
2045
2046
2047
2048
2049
2050
2051
2052
2053
2054
2055

/* The functions below essentially reproduce the PyGILState_* API using a RAII
 * pattern, but there are a few important differences:
 *
 * 1. When acquiring the GIL from an non-main thread during the finalization
 *    phase, the GILState API blindly terminates the calling thread, which
 *    is often not what is wanted. This API does not do this.
 *
 * 2. The gil_scoped_release function can optionally cut the relationship
 *    of a PyThreadState and its associated thread, which allows moving it to
 *    another thread (this is a fairly rare/advanced use case).
 *
 * 3. The reference count of an acquired thread state can be controlled. This
 *    can be handy to prevent cases where callbacks issued from an external
2056
2057
 *    thread would otherwise constantly construct and destroy thread state data
 *    structures.
2058
2059
2060
2061
2062
 *
 * See the Python bindings of NanoGUI (http://github.com/wjakob/nanogui) for an
 * example which uses features 2 and 3 to migrate the Python thread of
 * execution to another thread (to run the event loop on the original thread,
 * in this case).
2063
 */
Wenzel Jakob's avatar
Wenzel Jakob committed
2064
2065
2066

class gil_scoped_acquire {
public:
2067
    PYBIND11_NOINLINE gil_scoped_acquire() {
2068
        auto const &internals = detail::get_internals();
2069
        tstate = (PyThreadState *) PYBIND11_TLS_GET_VALUE(internals.tstate);
2070

2071
2072
2073
2074
2075
2076
2077
2078
2079
        if (!tstate) {
            /* Check if the GIL was acquired using the PyGILState_* API instead (e.g. if
               calling from a Python thread). Since we use a different key, this ensures
               we don't create a new thread state and deadlock in PyEval_AcquireThread
               below. Note we don't save this state with internals.tstate, since we don't
               create it we would fail to clear it (its reference count should be > 0). */
            tstate = PyGILState_GetThisThreadState();
        }

2080
2081
2082
2083
2084
2085
2086
        if (!tstate) {
            tstate = PyThreadState_New(internals.istate);
            #if !defined(NDEBUG)
                if (!tstate)
                    pybind11_fail("scoped_acquire: could not create thread state!");
            #endif
            tstate->gilstate_counter = 0;
2087
            PYBIND11_TLS_REPLACE_VALUE(internals.tstate, tstate);
2088
        } else {
2089
            release = detail::get_thread_state_unchecked() != tstate;
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
        }

        if (release) {
            PyEval_AcquireThread(tstate);
        }

        inc_ref();
    }

    void inc_ref() {
        ++tstate->gilstate_counter;
    }

2103
    PYBIND11_NOINLINE void dec_ref() {
2104
2105
        --tstate->gilstate_counter;
        #if !defined(NDEBUG)
2106
            if (detail::get_thread_state_unchecked() != tstate)
2107
2108
2109
2110
2111
2112
2113
2114
2115
2116
                pybind11_fail("scoped_acquire::dec_ref(): thread state must be current!");
            if (tstate->gilstate_counter < 0)
                pybind11_fail("scoped_acquire::dec_ref(): reference count underflow!");
        #endif
        if (tstate->gilstate_counter == 0) {
            #if !defined(NDEBUG)
                if (!release)
                    pybind11_fail("scoped_acquire::dec_ref(): internal error!");
            #endif
            PyThreadState_Clear(tstate);
2117
2118
            if (active)
                PyThreadState_DeleteCurrent();
2119
            PYBIND11_TLS_DELETE_VALUE(detail::get_internals().tstate);
2120
2121
2122
2123
            release = false;
        }
    }

2124
2125
2126
2127
2128
2129
2130
2131
2132
    /// This method will disable the PyThreadState_DeleteCurrent call and the
    /// GIL won't be acquired. This method should be used if the interpreter
    /// could be shutting down when this is called, as thread deletion is not
    /// allowed during shutdown. Check _Py_IsFinalizing() on Python 3.7+, and
    /// protect subsequent code.
    PYBIND11_NOINLINE void disarm() {
        active = false;
    }

2133
    PYBIND11_NOINLINE ~gil_scoped_acquire() {
2134
2135
2136
2137
2138
2139
2140
        dec_ref();
        if (release)
           PyEval_SaveThread();
    }
private:
    PyThreadState *tstate = nullptr;
    bool release = true;
2141
    bool active = true;
Wenzel Jakob's avatar
Wenzel Jakob committed
2142
2143
2144
2145
};

class gil_scoped_release {
public:
2146
    explicit gil_scoped_release(bool disassoc = false) : disassoc(disassoc) {
2147
2148
2149
2150
        // `get_internals()` must be called here unconditionally in order to initialize
        // `internals.tstate` for subsequent `gil_scoped_acquire` calls. Otherwise, an
        // initialization race could occur as multiple threads try `gil_scoped_acquire`.
        const auto &internals = detail::get_internals();
2151
        tstate = PyEval_SaveThread();
2152
        if (disassoc) {
2153
            auto key = internals.tstate;
2154
            PYBIND11_TLS_DELETE_VALUE(key);
2155
        }
2156
    }
2157
2158
2159
2160
2161
2162
2163
2164
2165
2166

    /// This method will disable the PyThreadState_DeleteCurrent call and the
    /// GIL won't be acquired. This method should be used if the interpreter
    /// could be shutting down when this is called, as thread deletion is not
    /// allowed during shutdown. Check _Py_IsFinalizing() on Python 3.7+, and
    /// protect subsequent code.
    PYBIND11_NOINLINE void disarm() {
        active = false;
    }

2167
2168
2169
    ~gil_scoped_release() {
        if (!tstate)
            return;
2170
2171
2172
        // `PyEval_RestoreThread()` should not be called if runtime is finalizing
        if (active)
            PyEval_RestoreThread(tstate);
2173
        if (disassoc) {
2174
            auto key = detail::get_internals().tstate;
2175
            PYBIND11_TLS_REPLACE_VALUE(key, tstate);
2176
        }
2177
2178
2179
2180
    }
private:
    PyThreadState *tstate;
    bool disassoc;
2181
    bool active = true;
Wenzel Jakob's avatar
Wenzel Jakob committed
2182
};
Wenzel Jakob's avatar
Wenzel Jakob committed
2183
2184
2185
2186
2187
2188
#elif defined(PYPY_VERSION)
class gil_scoped_acquire {
    PyGILState_STATE state;
public:
    gil_scoped_acquire() { state = PyGILState_Ensure(); }
    ~gil_scoped_acquire() { PyGILState_Release(state); }
2189
    void disarm() {}
Wenzel Jakob's avatar
Wenzel Jakob committed
2190
2191
2192
2193
2194
2195
2196
};

class gil_scoped_release {
    PyThreadState *state;
public:
    gil_scoped_release() { state = PyEval_SaveThread(); }
    ~gil_scoped_release() { PyEval_RestoreThread(state); }
2197
    void disarm() {}
Wenzel Jakob's avatar
Wenzel Jakob committed
2198
};
2199
#else
2200
2201
2202
2203
2204
2205
class gil_scoped_acquire {
    void disarm() {}
};
class gil_scoped_release {
    void disarm() {}
};
2206
#endif
Wenzel Jakob's avatar
Wenzel Jakob committed
2207

2208
error_already_set::~error_already_set() {
2209
    if (m_type) {
2210
        gil_scoped_acquire gil;
2211
        error_scope scope;
2212
2213
2214
        m_type.release().dec_ref();
        m_value.release().dec_ref();
        m_trace.release().dec_ref();
2215
2216
2217
    }
}

2218
2219
2220
PYBIND11_NAMESPACE_BEGIN(detail)
inline function get_type_override(const void *this_ptr, const type_info *this_type, const char *name)  {
    handle self = get_object_handle(this_ptr, this_type);
Wenzel Jakob's avatar
Wenzel Jakob committed
2221
    if (!self)
2222
        return function();
2223
    handle type = type::handle_of(self);
2224
2225
    auto key = std::make_pair(type.ptr(), name);

2226
    /* Cache functions that aren't overridden in Python to avoid
2227
       many costly Python dictionary lookups below */
2228
    auto &cache = get_internals().inactive_override_cache;
2229
2230
2231
    if (cache.find(key) != cache.end())
        return function();

2232
2233
    function override = getattr(self, name, function());
    if (override.is_cpp_function()) {
2234
2235
2236
        cache.insert(key);
        return function();
    }
2237

Wenzel Jakob's avatar
Wenzel Jakob committed
2238
2239
2240
    /* Don't call dispatch code if invoked from overridden function.
       Unfortunately this doesn't work on PyPy. */
#if !defined(PYPY_VERSION)
2241
    PyFrameObject *frame = PyThreadState_Get()->frame;
2242
    if (frame && (std::string) str(frame->f_code->co_name) == name &&
2243
2244
2245
2246
        frame->f_code->co_argcount > 0) {
        PyFrame_FastToLocals(frame);
        PyObject *self_caller = PyDict_GetItem(
            frame->f_locals, PyTuple_GET_ITEM(frame->f_code->co_varnames, 0));
Wenzel Jakob's avatar
Wenzel Jakob committed
2247
        if (self_caller == self.ptr())
2248
2249
            return function();
    }
Wenzel Jakob's avatar
Wenzel Jakob committed
2250
2251
2252
2253
2254
2255
2256
2257
2258
2259
2260
2261
2262
2263
2264
2265
2266
2267
#else
    /* PyPy currently doesn't provide a detailed cpyext emulation of
       frame objects, so we have to emulate this using Python. This
       is going to be slow..*/
    dict d; d["self"] = self; d["name"] = pybind11::str(name);
    PyObject *result = PyRun_String(
        "import inspect\n"
        "frame = inspect.currentframe()\n"
        "if frame is not None:\n"
        "    frame = frame.f_back\n"
        "    if frame is not None and str(frame.f_code.co_name) == name and "
        "frame.f_code.co_argcount > 0:\n"
        "        self_caller = frame.f_locals[frame.f_code.co_varnames[0]]\n"
        "        if self_caller == self:\n"
        "            self = None\n",
        Py_file_input, d.ptr(), d.ptr());
    if (result == nullptr)
        throw error_already_set();
2268
    if (d["self"].is_none())
Wenzel Jakob's avatar
Wenzel Jakob committed
2269
2270
2271
2272
        return function();
    Py_DECREF(result);
#endif

2273
    return override;
2274
}
2275
PYBIND11_NAMESPACE_END(detail)
2276

2277
2278
2279
/** \rst
  Try to retrieve a python method by the provided name from the instance pointed to by the this_ptr.

2280
2281
2282
  :this_ptr: The pointer to the object the overriden method should be retrieved for. This should be
             the first non-trampoline class encountered in the inheritance chain.
  :name: The name of the overridden Python method to retrieve.
2283
2284
  :return: The Python method by this name from the object or an empty function wrapper.
 \endrst */
2285
template <class T> function get_override(const T *this_ptr, const char *name) {
2286
    auto tinfo = detail::get_type_info(typeid(T));
2287
    return tinfo ? detail::get_type_override(this_ptr, tinfo, name) : function();
2288
2289
}

2290
2291
#define PYBIND11_OVERRIDE_IMPL(ret_type, cname, name, ...) \
    do { \
2292
        pybind11::gil_scoped_acquire gil; \
2293
2294
2295
        pybind11::function override = pybind11::get_override(static_cast<const cname *>(this), name); \
        if (override) { \
            auto o = override(__VA_ARGS__); \
2296
            if (pybind11::detail::cast_is_temporary_value_reference<ret_type>::value) { \
2297
                static pybind11::detail::override_caster_t<ret_type> caster; \
2298
                return pybind11::detail::cast_ref<ret_type>(std::move(o), caster); \
2299
2300
2301
            } \
            else return pybind11::detail::cast_safe<ret_type>(std::move(o)); \
        } \
2302
    } while (false)
2303

2304
2305
2306
2307
2308
2309
2310
2311
2312
/** \rst
    Macro to populate the virtual method in the trampoline class. This macro tries to look up a method named 'fn'
    from the Python side, deals with the :ref:`gil` and necessary argument conversions to call this method and return
    the appropriate type. See :ref:`overriding_virtuals` for more information. This macro should be used when the method
    name in C is not the same as the method name in Python. For example with `__str__`.

    .. code-block:: cpp

      std::string toString() override {
2313
        PYBIND11_OVERRIDE_NAME(
2314
2315
            std::string, // Return type (ret_type)
            Animal,      // Parent class (cname)
methylDragon's avatar
methylDragon committed
2316
2317
            "__str__",   // Name of method in Python (name)
            toString,    // Name of function in C++ (fn)
2318
2319
2320
        );
      }
\endrst */
2321
2322
2323
2324
2325
#define PYBIND11_OVERRIDE_NAME(ret_type, cname, name, fn, ...) \
    do { \
        PYBIND11_OVERRIDE_IMPL(PYBIND11_TYPE(ret_type), PYBIND11_TYPE(cname), name, __VA_ARGS__); \
        return cname::fn(__VA_ARGS__); \
    } while (false)
2326

2327
/** \rst
2328
2329
    Macro for pure virtual functions, this function is identical to :c:macro:`PYBIND11_OVERRIDE_NAME`, except that it
    throws if no override can be found.
2330
\endrst */
2331
2332
2333
2334
2335
#define PYBIND11_OVERRIDE_PURE_NAME(ret_type, cname, name, fn, ...) \
    do { \
        PYBIND11_OVERRIDE_IMPL(PYBIND11_TYPE(ret_type), PYBIND11_TYPE(cname), name, __VA_ARGS__); \
        pybind11::pybind11_fail("Tried to call pure virtual function \"" PYBIND11_STRINGIFY(cname) "::" name "\""); \
    } while (false)
2336

2337
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347
2348
2349
2350
2351
/** \rst
    Macro to populate the virtual method in the trampoline class. This macro tries to look up the method
    from the Python side, deals with the :ref:`gil` and necessary argument conversions to call this method and return
    the appropriate type. This macro should be used if the method name in C and in Python are identical.
    See :ref:`overriding_virtuals` for more information.

    .. code-block:: cpp

      class PyAnimal : public Animal {
      public:
          // Inherit the constructors
          using Animal::Animal;

          // Trampoline (need one for each virtual function)
          std::string go(int n_times) override {
2352
              PYBIND11_OVERRIDE_PURE(
2353
2354
2355
2356
2357
2358
2359
2360
                  std::string, // Return type (ret_type)
                  Animal,      // Parent class (cname)
                  go,          // Name of function in C++ (must match Python name) (fn)
                  n_times      // Argument(s) (...)
              );
          }
      };
\endrst */
2361
2362
#define PYBIND11_OVERRIDE(ret_type, cname, fn, ...) \
    PYBIND11_OVERRIDE_NAME(PYBIND11_TYPE(ret_type), PYBIND11_TYPE(cname), #fn, fn, __VA_ARGS__)
2363

2364
/** \rst
2365
2366
    Macro for pure virtual functions, this function is identical to :c:macro:`PYBIND11_OVERRIDE`, except that it throws
    if no override can be found.
2367
\endrst */
2368
2369
2370
2371
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383
2384
2385
2386
2387
2388
2389
2390
2391
#define PYBIND11_OVERRIDE_PURE(ret_type, cname, fn, ...) \
    PYBIND11_OVERRIDE_PURE_NAME(PYBIND11_TYPE(ret_type), PYBIND11_TYPE(cname), #fn, fn, __VA_ARGS__)


// Deprecated versions

PYBIND11_DEPRECATED("get_type_overload has been deprecated")
inline function get_type_overload(const void *this_ptr, const detail::type_info *this_type, const char *name) {
    return detail::get_type_override(this_ptr, this_type, name);
}

template <class T>
inline function get_overload(const T *this_ptr, const char *name) {
    return get_override(this_ptr, name);
}

#define PYBIND11_OVERLOAD_INT(ret_type, cname, name, ...) \
    PYBIND11_OVERRIDE_IMPL(PYBIND11_TYPE(ret_type), PYBIND11_TYPE(cname), name, __VA_ARGS__)
#define PYBIND11_OVERLOAD_NAME(ret_type, cname, name, fn, ...) \
    PYBIND11_OVERRIDE_NAME(PYBIND11_TYPE(ret_type), PYBIND11_TYPE(cname), name, fn, __VA_ARGS__)
#define PYBIND11_OVERLOAD_PURE_NAME(ret_type, cname, name, fn, ...) \
    PYBIND11_OVERRIDE_PURE_NAME(PYBIND11_TYPE(ret_type), PYBIND11_TYPE(cname), name, fn, __VA_ARGS__);
#define PYBIND11_OVERLOAD(ret_type, cname, fn, ...) \
    PYBIND11_OVERRIDE(PYBIND11_TYPE(ret_type), PYBIND11_TYPE(cname), fn, __VA_ARGS__)
2392
#define PYBIND11_OVERLOAD_PURE(ret_type, cname, fn, ...) \
2393
    PYBIND11_OVERRIDE_PURE(PYBIND11_TYPE(ret_type), PYBIND11_TYPE(cname), fn, __VA_ARGS__);
2394

2395
PYBIND11_NAMESPACE_END(PYBIND11_NAMESPACE)
Wenzel Jakob's avatar
Wenzel Jakob committed
2396

2397
#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)
Wenzel Jakob's avatar
Wenzel Jakob committed
2398
#  pragma warning(pop)
2399
#elif defined(__GNUG__) && !defined(__clang__)
Wenzel Jakob's avatar
Wenzel Jakob committed
2400
#  pragma GCC diagnostic pop
Wenzel Jakob's avatar
Wenzel Jakob committed
2401
#endif