pybind11.h 104 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 "gil.h"
47
#include "options.h"
48
#include "detail/class.h"
49
#include "detail/init.h"
Wenzel Jakob's avatar
Wenzel Jakob committed
50

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

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

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

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

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

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

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

89
90
91
92
93
94
95
96
97
98
    /// 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)
99
100
    template <typename Return, typename Class, typename... Arg, typename... Extra>
    cpp_function(Return (Class::*f)(Arg...) const, const Extra&... extra) {
101
        initialize([f](const Class *c, Arg... args) -> Return { return (c->*f)(std::forward<Arg>(args)...); },
102
                   (Return (*)(const Class *, Arg ...)) nullptr, extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
103
104
    }

105
106
107
108
109
110
111
112
113
    /// 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...);
    }

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

117
protected:
118
119
120
121
122
123
124
    struct InitializingFunctionRecordDeleter {
        // `destruct(function_record, false)`: `initialize_generic` copies strings and
        // takes care of cleaning up in case of exceptions. So pass `false` to `free_strings`.
        void operator()(detail::function_record * rec) { destruct(rec, false); }
    };
    using unique_function_record = std::unique_ptr<detail::function_record, InitializingFunctionRecordDeleter>;

125
    /// Space optimization: don't inline this frequently instantiated fragment
126
127
    PYBIND11_NOINLINE unique_function_record make_function_record() {
        return unique_function_record(new detail::function_record());
128
129
    }

130
    /// Special internal constructor for functors, lambda functions, etc.
131
132
    template <typename Func, typename Return, typename... Args, typename... Extra>
    void initialize(Func &&f, Return (*)(Args...), const Extra&... extra) {
133
        using namespace detail;
134
        struct capture { remove_reference_t<Func> f; };
Wenzel Jakob's avatar
Wenzel Jakob committed
135

136
        /* Store the function including any extra state it might have (e.g. a lambda capture object) */
137
138
139
        // The unique_ptr makes sure nothing is leaked in case of an exception.
        auto unique_rec = make_function_record();
        auto rec = unique_rec.get();
140

141
142
        /* Store the capture object directly in the function record if there is enough space */
        if (sizeof(capture) <= sizeof(rec->data)) {
143
144
145
            /* 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. */
146
#if defined(__GNUG__) && __GNUC__ >= 6 && !defined(__clang__) && !defined(__INTEL_COMPILER)
147
148
149
#  pragma GCC diagnostic push
#  pragma GCC diagnostic ignored "-Wplacement-new"
#endif
150
            new ((capture *) &rec->data) capture { std::forward<Func>(f) };
151
#if defined(__GNUG__) && __GNUC__ >= 6 && !defined(__clang__) && !defined(__INTEL_COMPILER)
152
153
#  pragma GCC diagnostic pop
#endif
154
            if (!std::is_trivially_destructible<Func>::value)
155
                rec->free_data = [](function_record *r) { ((capture *) &r->data)->~capture(); };
156
157
        } else {
            rec->data[0] = new capture { std::forward<Func>(f) };
158
            rec->free_data = [](function_record *r) { delete ((capture *) r->data[0]); };
159
        }
160

161
        /* Type casters for the function arguments and return value */
162
163
164
        using cast_in = argument_loader<Args...>;
        using cast_out = make_caster<
            conditional_t<std::is_void<Return>::value, void_type, Return>
165
        >;
Wenzel Jakob's avatar
Wenzel Jakob committed
166

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

170
        /* Dispatch code which converts function arguments and performs the actual function call */
171
        rec->impl = [](function_call &call) -> handle {
172
            cast_in args_converter;
173
174

            /* Try to cast the function arguments into the C++ domain */
175
            if (!args_converter.load_args(call))
176
177
                return PYBIND11_TRY_NEXT_OVERLOAD;

Wenzel Jakob's avatar
Wenzel Jakob committed
178
            /* Invoke call policy pre-call hook */
179
            process_attributes<Extra...>::precall(call);
180
181

            /* Get a pointer to the capture object */
182
183
            auto data = (sizeof(capture) <= sizeof(call.func.data)
                         ? &call.func.data : call.func.data[0]);
184
            auto *cap = const_cast<capture *>(reinterpret_cast<const capture *>(data));
185

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

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

192
            /* Perform the function call */
193
194
            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
195
196

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

199
            return result;
Wenzel Jakob's avatar
Wenzel Jakob committed
200
201
        };

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

205
        {
Henry Schreiner's avatar
Henry Schreiner committed
206
207
            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,
208
209
                           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
210
211
212
            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");
213
214
        }

215
        /* Generate a readable signature describing the function's arguments and return value types */
216
217
        static constexpr auto signature = _("(") + cast_in::arg_names + _(") -> ") + cast_out::name;
        PYBIND11_DESCR_CONSTEXPR auto types = decltype(signature)::types();
218
219

        /* Register the function with Python from generic (non-templated) code */
220
221
        // Pass on the ownership over the `unique_rec` to `initialize_generic`. `rec` stays valid.
        initialize_generic(std::move(unique_rec), signature.text, types.data(), sizeof...(Args));
222
223
224

        if (cast_in::has_args) rec->has_args = true;
        if (cast_in::has_kwargs) rec->has_kwargs = true;
225
226

        /* Stash some additional information used by an important optimization in 'functional.h' */
227
        using FunctionType = Return (*)(Args...);
228
229
230
231
232
        constexpr bool is_function_ptr =
            std::is_convertible<Func, FunctionType>::value &&
            sizeof(capture) == sizeof(void *);
        if (is_function_ptr) {
            rec->is_stateless = true;
233
            rec->data[1] = const_cast<void *>(reinterpret_cast<const void *>(&typeid(FunctionType)));
234
        }
235
236
    }

237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
    // Utility class that keeps track of all duplicated strings, and cleans them up in its destructor,
    // unless they are released. Basically a RAII-solution to deal with exceptions along the way.
    class strdup_guard {
    public:
        ~strdup_guard() {
            for (auto s : strings)
                std::free(s);
        }
        char *operator()(const char *s) {
            auto t = strdup(s);
            strings.push_back(t);
            return t;
        }
        void release() {
            strings.clear();
        }
    private:
        std::vector<char *> strings;
    };

257
    /// Register a function call with Python (generic non-templated code goes here)
258
    void initialize_generic(unique_function_record &&unique_rec, const char *text,
259
                            const std::type_info *const *types, size_t args) {
260
261
262
263
264
265
266
267
268
269
270
        // Do NOT receive `unique_rec` by value. If this function fails to move out the unique_ptr,
        // we do not want this to destuct the pointer. `initialize` (the caller) still relies on the
        // pointee being alive after this call. Only move out if a `capsule` is going to keep it alive.
        auto rec = unique_rec.get();

        // Keep track of strdup'ed strings, and clean them up as long as the function's capsule
        // has not taken ownership yet (when `unique_rec.release()` is called).
        // Note: This cannot easily be fixed by a `unique_ptr` with custom deleter, because the strings
        // are only referenced before strdup'ing. So only *after* the following block could `destruct`
        // safely be called, but even then, `repr` could still throw in the middle of copying all strings.
        strdup_guard guarded_strdup;
Wenzel Jakob's avatar
Wenzel Jakob committed
271

272
        /* Create copies of all referenced C-style strings */
273
274
        rec->name = guarded_strdup(rec->name ? rec->name : "");
        if (rec->doc) rec->doc = guarded_strdup(rec->doc);
Wenzel Jakob's avatar
Wenzel Jakob committed
275
        for (auto &a: rec->args) {
276
            if (a.name)
277
                a.name = guarded_strdup(a.name);
278
            if (a.descr)
279
                a.descr = guarded_strdup(a.descr);
280
            else if (a.value)
281
                a.descr = guarded_strdup(repr(a.value).cast<std::string>().c_str());
282
        }
283

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

286
287
#if !defined(NDEBUG) && !defined(PYBIND11_DISABLE_NEW_STYLE_INIT_WARNING)
        if (rec->is_constructor && !rec->is_new_style_constructor) {
288
            const auto class_name = detail::get_fully_qualified_tp_name((PyTypeObject *) rec->scope.ptr());
289
290
291
292
293
294
295
296
297
298
299
            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

300
301
        /* Generate a proper function signature */
        std::string signature;
302
303
304
        size_t type_index = 0, arg_index = 0;
        for (auto *pc = text; *pc != '\0'; ++pc) {
            const auto c = *pc;
305
306

            if (c == '{') {
307
308
309
                // Write arg name for everything except *args and **kwargs.
                if (*(pc + 1) == '*')
                    continue;
Henry Schreiner's avatar
Henry Schreiner committed
310
311
312
313
                // 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 += "*, ";
314
315
316
317
318
319
                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));
320
                }
321
                signature += ": ";
322
            } else if (c == '}') {
323
324
                // Write default value if available.
                if (arg_index < rec->args.size() && rec->args[arg_index].descr) {
325
                    signature += " = ";
326
                    signature += rec->args[arg_index].descr;
327
                }
Henry Schreiner's avatar
Henry Schreiner committed
328
329
330
331
                // 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 += ", /";
332
                arg_index++;
333
334
            } else if (c == '%') {
                const std::type_info *t = types[type_index++];
335
                if (!t)
336
                    pybind11_fail("Internal error while parsing type signature (1)");
337
                if (auto tinfo = detail::get_type_info(*t)) {
338
339
340
341
                    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
342
343
344
                } 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.
345
346
347
                    signature +=
                        rec->scope.attr("__module__").cast<std::string>() + "." +
                        rec->scope.attr("__qualname__").cast<std::string>();
348
349
350
351
352
353
354
355
356
                } else {
                    std::string tname(t->name());
                    detail::clean_type_id(tname);
                    signature += tname;
                }
            } else {
                signature += c;
            }
        }
Henry Schreiner's avatar
Henry Schreiner committed
357

358
        if (arg_index != args || types[type_index] != nullptr)
359
            pybind11_fail("Internal error while parsing type signature (2)");
360

361
#if PY_MAJOR_VERSION < 3
Wenzel Jakob's avatar
Wenzel Jakob committed
362
363
        if (strcmp(rec->name, "__next__") == 0) {
            std::free(rec->name);
364
            rec->name = guarded_strdup("next");
365
366
        } else if (strcmp(rec->name, "__bool__") == 0) {
            std::free(rec->name);
367
            rec->name = guarded_strdup("__nonzero__");
368
        }
369
#endif
370
        rec->signature = guarded_strdup(signature.c_str());
Wenzel Jakob's avatar
Wenzel Jakob committed
371
        rec->args.shrink_to_fit();
372
        rec->nargs = (std::uint16_t) args;
373

374
375
        if (rec->sibling && PYBIND11_INSTANCE_METHOD_CHECK(rec->sibling.ptr()))
            rec->sibling = PYBIND11_INSTANCE_METHOD_GET_FUNCTION(rec->sibling.ptr());
376

Wenzel Jakob's avatar
Wenzel Jakob committed
377
        detail::function_record *chain = nullptr, *chain_start = rec;
378
379
        if (rec->sibling) {
            if (PyCFunction_Check(rec->sibling.ptr())) {
Wenzel Jakob's avatar
Wenzel Jakob committed
380
                auto rec_capsule = reinterpret_borrow<capsule>(PyCFunction_GET_SELF(rec->sibling.ptr()));
381
382
383
                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 */
384
                if (!chain->scope.is(rec->scope))
385
386
387
388
389
390
                    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");
391
392
        }

Wenzel Jakob's avatar
Wenzel Jakob committed
393
        if (!chain) {
394
            /* No existing overload was found, create a new function object */
Wenzel Jakob's avatar
Wenzel Jakob committed
395
            rec->def = new PyMethodDef();
396
            std::memset(rec->def, 0, sizeof(PyMethodDef));
Wenzel Jakob's avatar
Wenzel Jakob committed
397
            rec->def->ml_name = rec->name;
398
399
            rec->def->ml_meth
                = reinterpret_cast<PyCFunction>(reinterpret_cast<void (*)(void)>(dispatcher));
Wenzel Jakob's avatar
Wenzel Jakob committed
400
            rec->def->ml_flags = METH_VARARGS | METH_KEYWORDS;
401

402
            capsule rec_capsule(unique_rec.release(), [](void *ptr) {
403
                destruct((detail::function_record *) ptr);
404
            });
405
            guarded_strdup.release();
406
407
408

            object scope_module;
            if (rec->scope) {
409
410
411
412
413
                if (hasattr(rec->scope, "__module__")) {
                    scope_module = rec->scope.attr("__module__");
                } else if (hasattr(rec->scope, "__name__")) {
                    scope_module = rec->scope.attr("__name__");
                }
414
415
416
            }

            m_ptr = PyCFunction_NewEx(rec->def, rec_capsule.ptr(), scope_module.ptr());
Wenzel Jakob's avatar
Wenzel Jakob committed
417
            if (!m_ptr)
418
                pybind11_fail("cpp_function::cpp_function(): Could not allocate function object");
Wenzel Jakob's avatar
Wenzel Jakob committed
419
        } else {
420
            /* Append at the beginning or end of the overload chain */
Wenzel Jakob's avatar
Wenzel Jakob committed
421
            m_ptr = rec->sibling.ptr();
Wenzel Jakob's avatar
Wenzel Jakob committed
422
            inc_ref();
423
424
425
426
427
428
429
430
431
            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
                );
432
433
434
435
436
437
438
439

            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);
440
441
                rec_capsule.set_pointer(unique_rec.release());
                guarded_strdup.release();
442
443
444
445
446
            } else {
                // Or end of chain (normal behavior)
                chain_start = chain;
                while (chain->next)
                    chain = chain->next;
447
448
                chain->next = unique_rec.release();
                guarded_strdup.release();
449
            }
Wenzel Jakob's avatar
Wenzel Jakob committed
450
        }
451

Wenzel Jakob's avatar
Wenzel Jakob committed
452
        std::string signatures;
453
        int index = 0;
Wenzel Jakob's avatar
Wenzel Jakob committed
454
        /* Create a nice pydoc rec including all signatures and
455
           docstrings of the functions in the overload chain */
456
        if (chain && options::show_function_signatures()) {
457
458
459
460
461
462
            // First a generic signature
            signatures += rec->name;
            signatures += "(*args, **kwargs)\n";
            signatures += "Overloaded function.\n\n";
        }
        // Then specific overload signatures
463
        bool first_user_def = true;
Wenzel Jakob's avatar
Wenzel Jakob committed
464
        for (auto it = chain_start; it != nullptr; it = it->next) {
465
            if (options::show_function_signatures()) {
466
                if (index > 0) signatures += "\n";
467
468
469
470
                if (chain)
                    signatures += std::to_string(++index) + ". ";
                signatures += rec->name;
                signatures += it->signature;
471
                signatures += "\n";
472
473
            }
            if (it->doc && strlen(it->doc) > 0 && options::show_user_defined_docstrings()) {
474
475
476
477
478
479
                // 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";
                }
480
                if (options::show_function_signatures()) signatures += "\n";
481
                signatures += it->doc;
482
                if (options::show_function_signatures()) signatures += "\n";
483
            }
Wenzel Jakob's avatar
Wenzel Jakob committed
484
        }
Wenzel Jakob's avatar
Wenzel Jakob committed
485
486

        /* Install docstring */
487
        auto *func = (PyCFunctionObject *) m_ptr;
488
489
490
        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
491

492
493
        if (rec->is_method) {
            m_ptr = PYBIND11_INSTANCE_METHOD_NEW(m_ptr, rec->scope.ptr());
Wenzel Jakob's avatar
Wenzel Jakob committed
494
            if (!m_ptr)
495
                pybind11_fail("cpp_function::cpp_function(): Could not allocate instance method object");
Wenzel Jakob's avatar
Wenzel Jakob committed
496
497
498
            Py_DECREF(func);
        }
    }
Wenzel Jakob's avatar
Wenzel Jakob committed
499
500

    /// When a cpp_function is GCed, release any memory allocated by pybind11
501
    static void destruct(detail::function_record *rec, bool free_strings = true) {
502
503
504
505
506
507
        // 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
508
509
510
        while (rec) {
            detail::function_record *next = rec->next;
            if (rec->free_data)
511
                rec->free_data(rec);
512
513
514
515
516
517
518
519
520
521
522
            // During initialization, these strings might not have been copied yet,
            // so they cannot be freed. Once the function has been created, they can.
            // Check `make_function_record` for more details.
            if (free_strings) {
                std::free((char *) rec->name);
                std::free((char *) rec->doc);
                std::free((char *) rec->signature);
                for (auto &arg: rec->args) {
                    std::free(const_cast<char *>(arg.name));
                    std::free(const_cast<char *>(arg.descr));
                }
Wenzel Jakob's avatar
Wenzel Jakob committed
523
            }
524
525
            for (auto &arg: rec->args)
                arg.value.dec_ref();
Wenzel Jakob's avatar
Wenzel Jakob committed
526
            if (rec->def) {
527
                std::free(const_cast<char *>(rec->def->ml_doc));
528
529
530
531
532
533
534
535
536
                // 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
537
538
539
540
541
542
543
            }
            delete rec;
            rec = next;
        }
    }

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

Wenzel Jakob's avatar
Wenzel Jakob committed
547
        /* Iterator over the list of potentially admissible overloads */
548
549
        const function_record *overloads = (function_record *) PyCapsule_GetPointer(self, nullptr),
                              *it = overloads;
Wenzel Jakob's avatar
Wenzel Jakob committed
550
551

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

554
        handle parent = n_args_in > 0 ? PyTuple_GET_ITEM(args_in, 0) : nullptr,
Wenzel Jakob's avatar
Wenzel Jakob committed
555
               result = PYBIND11_TRY_NEXT_OVERLOAD;
556

557
558
        auto self_value_and_holder = value_and_holder();
        if (overloads->is_constructor) {
559
560
            if (!parent || !PyObject_TypeCheck(parent.ptr(), (PyTypeObject *) overloads->scope.ptr())) {
                PyErr_SetString(PyExc_TypeError, "__init__(self, ...) called with invalid or missing `self` argument");
561
562
563
                return nullptr;
            }

564
565
566
567
            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);

568
569
570
571
572
573
            // 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
574
        try {
575
576
577
578
579
580
581
582
583
            // 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
584
            for (; it != nullptr; it = it->next) {
585

Wenzel Jakob's avatar
Wenzel Jakob committed
586
                /* For each overload:
587
588
                   1. Copy all positional arguments we were given, also checking to make sure that
                      named positional arguments weren't *also* specified via kwarg.
589
                   2. If we weren't given enough, try to make up the omitted ones by checking
590
591
592
593
594
595
596
597
598
599
600
601
602
                      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
603
604
                 */

605
                const function_record &func = *it;
606
607
608
                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
609
                size_t pos_args = num_args - func.nargs_kw_only;
Wenzel Jakob's avatar
Wenzel Jakob committed
610

611
                if (!func.has_args && n_args_in > pos_args)
612
                    continue; // Too many positional arguments for this overload
613

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

617
                function_call call(func, parent);
Wenzel Jakob's avatar
Wenzel Jakob committed
618

619
                size_t args_to_copy = (std::min)(pos_args, n_args_in); // Protect std::min with parentheses
620
621
                size_t args_copied = 0;

622
623
624
625
626
627
628
                // 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);

629
                    call.init_self = PyTuple_GET_ITEM(args_in, 0);
630
                    call.args.emplace_back(reinterpret_cast<PyObject *>(&self_value_and_holder));
631
632
633
634
                    call.args_convert.push_back(false);
                    ++args_copied;
                }

635
                // 1. Copy any position arguments given.
636
                bool bad_arg = false;
637
                for (; args_copied < args_to_copy; ++args_copied) {
638
                    const argument_record *arg_rec = args_copied < func.args.size() ? &func.args[args_copied] : nullptr;
639
640
                    if (kwargs_in && arg_rec && arg_rec->name && PyDict_GetItemString(kwargs_in, arg_rec->name)) {
                        bad_arg = true;
641
                        break;
642
643
                    }

644
645
646
647
648
649
650
                    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);
651
                }
652
                if (bad_arg)
653
                    continue; // Maybe it was meant for another overload (issue #688)
654
655
656
657

                // 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
658
659
660
                // 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) {
661
                        const auto &arg_rec = func.args[args_copied];
Henry Schreiner's avatar
Henry Schreiner committed
662
663
                        handle value;

664
665
                        if (arg_rec.value) {
                            value = arg_rec.value;
Henry Schreiner's avatar
Henry Schreiner committed
666
667
668
                        }
                        if (value) {
                            call.args.push_back(value);
669
                            call.args_convert.push_back(arg_rec.convert);
Henry Schreiner's avatar
Henry Schreiner committed
670
671
672
673
674
675
676
677
                        } else
                            break;
                    }

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

678
                // 2. Check kwargs and, failing that, defaults that may help complete the list
679
                if (args_copied < num_args) {
680
681
                    bool copied_kwargs = false;

682
                    for (; args_copied < num_args; ++args_copied) {
683
                        const auto &arg_rec = func.args[args_copied];
684
685

                        handle value;
686
687
                        if (kwargs_in && arg_rec.name)
                            value = PyDict_GetItemString(kwargs.ptr(), arg_rec.name);
Wenzel Jakob's avatar
Wenzel Jakob committed
688
689

                        if (value) {
690
691
692
693
694
                            // Consume a kwargs value
                            if (!copied_kwargs) {
                                kwargs = reinterpret_steal<dict>(PyDict_Copy(kwargs.ptr()));
                                copied_kwargs = true;
                            }
695
696
697
698
699
700
701
                            PyDict_DelItemString(kwargs.ptr(), arg_rec.name);
                        } else if (arg_rec.value) {
                            value = arg_rec.value;
                        }

                        if (!arg_rec.none && value.is_none()) {
                            break;
702
703
                        }

704
                        if (value) {
705
                            call.args.push_back(value);
706
                            call.args_convert.push_back(arg_rec.convert);
707
                        }
708
                        else
Wenzel Jakob's avatar
Wenzel Jakob committed
709
                            break;
710
711
                    }

712
                    if (args_copied < num_args)
713
714
715
716
                        continue; // Not enough arguments, defaults, or kwargs to fill the positional arguments
                }

                // 3. Check everything was consumed (unless we have a kwargs arg)
717
                if (kwargs && !kwargs.empty() && !func.has_kwargs)
718
719
720
                    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
721
                if (func.has_args) {
722
                    tuple extra_args;
723
724
725
726
                    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);
727
                    } else if (args_copied >= n_args_in) {
728
                        extra_args = tuple(0);
729
                    } else {
730
731
732
                        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
733
                            extra_args[i] = PyTuple_GET_ITEM(args_in, args_copied + i);
Wenzel Jakob's avatar
Wenzel Jakob committed
734
735
                        }
                    }
736
                    call.args.push_back(extra_args);
737
                    call.args_convert.push_back(false);
738
                    call.args_ref = std::move(extra_args);
Wenzel Jakob's avatar
Wenzel Jakob committed
739
                }
740

741
                // 4b. If we have a py::kwargs, pass on any remaining kwargs
742
                if (func.has_kwargs) {
743
744
                    if (!kwargs.ptr())
                        kwargs = dict(); // If we didn't get one, send an empty one
745
                    call.args.push_back(kwargs);
746
                    call.args_convert.push_back(false);
747
                    call.kwargs_ref = std::move(kwargs);
748
749
                }

750
751
752
                // 5. Put everything in a vector.  Not technically step 5, we've been building it
                // in `call.args` all along.
                #if !defined(NDEBUG)
753
                if (call.args.size() != func.nargs || call.args_convert.size() != func.nargs)
754
755
                    pybind11_fail("Internal error: function call dispatcher inserted wrong number of arguments!");
                #endif
756

757
758
759
760
761
762
763
764
765
                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);
                }

766
                // 6. Call the function.
767
                try {
768
                    loader_life_support guard{};
769
                    result = func.impl(call);
770
                } catch (reference_cast_error &) {
771
772
                    result = PYBIND11_TRY_NEXT_OVERLOAD;
                }
Wenzel Jakob's avatar
Wenzel Jakob committed
773
774
775

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

777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
                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 {
797
                        loader_life_support guard{};
798
799
800
801
802
                        result = call.func.impl(call);
                    } catch (reference_cast_error &) {
                        result = PYBIND11_TRY_NEXT_OVERLOAD;
                    }

803
804
805
806
807
                    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;
808
                        break;
809
                    }
810
                }
Wenzel Jakob's avatar
Wenzel Jakob committed
811
            }
812
813
        } catch (error_already_set &e) {
            e.restore();
814
            return nullptr;
815
#ifdef __GLIBCXX__
816
817
818
        } catch ( abi::__forced_unwind& ) {
            throw;
#endif
Wenzel Jakob's avatar
Wenzel Jakob committed
819
        } catch (...) {
820
821
822
            /* When an exception is caught, give each registered exception
               translator a chance to translate it to a Python exception
               in reverse order of registration.
823

824
               A translator may choose to do one of the following:
825

826
827
828
829
830
                - 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. */

831
            auto last_exception = std::current_exception();
832
            auto &registered_exception_translators = get_internals().registered_exception_translators;
833
834
835
836
837
838
839
840
841
842
            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
843
844
845
            return nullptr;
        }

846
847
848
849
850
851
852
853
854
855
        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
856
        if (result.ptr() == PYBIND11_TRY_NEXT_OVERLOAD) {
857
858
859
            if (overloads->is_operator)
                return handle(Py_NotImplemented).inc_ref().ptr();

860
861
862
863
            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
864
            int ctr = 0;
865
            for (const function_record *it2 = overloads; it2 != nullptr; it2 = it2->next) {
Wenzel Jakob's avatar
Wenzel Jakob committed
866
                msg += "    "+ std::to_string(++ctr) + ". ";
867
868
869

                bool wrote_sig = false;
                if (overloads->is_constructor) {
870
                    // For a constructor, rewrite `(self: Object, arg0, ...) -> NoneType` as `Object(arg0, ...)`
871
                    std::string sig = it2->signature;
872
                    size_t start = sig.find('(') + 7; // skip "(self: "
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
                    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
889
890
                msg += "\n";
            }
891
            msg += "\nInvoked with: ";
892
            auto args_ = reinterpret_borrow<tuple>(args_in);
893
            bool some_args = false;
894
            for (size_t ti = overloads->is_constructor ? 1 : 0; ti < args_.size(); ++ti) {
895
896
                if (!some_args) some_args = true;
                else msg += ", ";
897
898
899
900
901
                try {
                    msg += pybind11::repr(args_[ti]);
                } catch (const error_already_set&) {
                    msg += "<repr raised Error>";
                }
902
            }
903
904
            if (kwargs_in) {
                auto kwargs = reinterpret_borrow<dict>(kwargs_in);
905
                if (!kwargs.empty()) {
906
907
908
909
910
911
                    if (some_args) msg += "; ";
                    msg += "kwargs: ";
                    bool first = true;
                    for (auto kwarg : kwargs) {
                        if (first) first = false;
                        else msg += ", ";
912
913
914
915
916
917
                        msg += pybind11::str("{}=").format(kwarg.first);
                        try {
                            msg += pybind11::repr(kwarg.second);
                        } catch (const error_already_set&) {
                            msg += "<repr raised Error>";
                        }
918
919
920
921
                    }
                }
            }

922
            append_note_if_missing_header_is_suspected(msg);
Wenzel Jakob's avatar
Wenzel Jakob committed
923
924
925
926
927
928
            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;
929
            append_note_if_missing_header_is_suspected(msg);
Wenzel Jakob's avatar
Wenzel Jakob committed
930
931
932
            PyErr_SetString(PyExc_TypeError, msg.c_str());
            return nullptr;
        } else {
933
            if (overloads->is_constructor && !self_value_and_holder.holder_constructed()) {
934
                auto *pi = reinterpret_cast<instance *>(parent.ptr());
935
                self_value_and_holder.type->init_instance(pi, nullptr);
Wenzel Jakob's avatar
Wenzel Jakob committed
936
937
938
939
            }
            return result.ptr();
        }
    }
Wenzel Jakob's avatar
Wenzel Jakob committed
940
941
};

942
/// Wrapper for Python extension modules
943
class module_ : public object {
Wenzel Jakob's avatar
Wenzel Jakob committed
944
public:
945
    PYBIND11_OBJECT_DEFAULT(module_, object, PyModule_Check)
Wenzel Jakob's avatar
Wenzel Jakob committed
946

947
    /// Create a new top-level Python module with the given name and docstring
948
949
    PYBIND11_DEPRECATED("Use PYBIND11_MODULE or module_::create_extension_module instead")
    explicit module_(const char *name, const char *doc = nullptr) {
950
#if PY_MAJOR_VERSION >= 3
951
        *this = create_extension_module(name, doc, new PyModuleDef());
952
#else
953
        *this = create_extension_module(name, doc, nullptr);
954
#endif
955
    }
Wenzel Jakob's avatar
Wenzel Jakob committed
956

957
958
959
960
961
    /** \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 */
962
    template <typename Func, typename... Extra>
963
    module_ &def(const char *name_, Func &&f, const Extra& ... extra) {
964
965
        cpp_function func(std::forward<Func>(f), name(name_), scope(*this),
                          sibling(getattr(*this, name_, none())), extra...);
966
967
968
        // 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
969
970
971
        return *this;
    }

972
973
974
975
976
977
    /** \rst
        Create and return a new Python submodule with the given name and docstring.
        This also works recursively, i.e.

        .. code-block:: cpp

978
979
980
            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'");
981
    \endrst */
982
    module_ def_submodule(const char *name, const char *doc = nullptr) {
Wenzel Jakob's avatar
Wenzel Jakob committed
983
984
        std::string full_name = std::string(PyModule_GetName(m_ptr))
            + std::string(".") + std::string(name);
985
        auto result = reinterpret_borrow<module_>(PyImport_AddModule(full_name.c_str()));
986
        if (doc && options::show_user_defined_docstrings())
987
            result.attr("__doc__") = pybind11::str(doc);
Wenzel Jakob's avatar
Wenzel Jakob committed
988
989
990
        attr(name) = result;
        return result;
    }
Wenzel Jakob's avatar
Wenzel Jakob committed
991

992
    /// Import and return a module or throws `error_already_set`.
993
    static module_ import(const char *name) {
994
995
        PyObject *obj = PyImport_ImportModule(name);
        if (!obj)
996
            throw error_already_set();
997
        return reinterpret_steal<module_>(obj);
Wenzel Jakob's avatar
Wenzel Jakob committed
998
    }
999

1000
1001
1002
1003
1004
    /// Reload the module or throws `error_already_set`.
    void reload() {
        PyObject *obj = PyImport_ReloadModule(ptr());
        if (!obj)
            throw error_already_set();
1005
        *this = reinterpret_steal<module_>(obj);
1006
1007
    }

1008
1009
1010
1011
1012
1013
1014
    /** \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 */
1015
    PYBIND11_NOINLINE void add_object(const char *name, handle obj, bool overwrite = false) {
1016
1017
1018
1019
        if (!overwrite && hasattr(*this, name))
            pybind11_fail("Error during initialization: multiple incompatible definitions with name \"" +
                    std::string(name) + "\"");

1020
        PyModule_AddObject(ptr(), name, obj.inc_ref().ptr() /* steals a reference */);
1021
    }
1022
1023

#if PY_MAJOR_VERSION >= 3
1024
1025
1026
1027
    using module_def = PyModuleDef;
#else
    struct module_def {};
#endif
1028

1029
1030
1031
    /** \rst
        Create a new top-level module that can be used as the main module of a C extension.

1032
        For Python 3, ``def`` should point to a statically allocated module_def.
1033
1034
1035
1036
1037
        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
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
        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
        };
1049
1050
1051
1052
1053
        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);
1054
#endif
1055
1056
1057
1058
1059
        if (m == nullptr) {
            if (PyErr_Occurred())
                throw error_already_set();
            pybind11_fail("Internal error in module_::create_extension_module()");
        }
1060
        // TODO: Should be reinterpret_steal for Python 3, but Python also steals it again when returned from PyInit_...
1061
1062
1063
        //       For Python 2, reinterpret_borrow is correct.
        return reinterpret_borrow<module_>(m);
    }
Wenzel Jakob's avatar
Wenzel Jakob committed
1064
1065
};

1066
1067
1068
// 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.
1069
1070
using module = module_;

1071
/// \ingroup python_builtins
1072
1073
1074
1075
/// 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();
1076
    return reinterpret_borrow<dict>(p ? p : module_::import("__main__").attr("__dict__").ptr());
1077
}
1078

1079
PYBIND11_NAMESPACE_BEGIN(detail)
Wenzel Jakob's avatar
Wenzel Jakob committed
1080
/// Generic support for creating new Python heap types
1081
class generic_type : public object {
Wenzel Jakob's avatar
Wenzel Jakob committed
1082
public:
1083
    PYBIND11_OBJECT_DEFAULT(generic_type, object, PyType_Check)
Wenzel Jakob's avatar
Wenzel Jakob committed
1084
protected:
1085
    void initialize(const type_record &rec) {
1086
        if (rec.scope && hasattr(rec.scope, "__dict__") && rec.scope.attr("__dict__").contains(rec.name))
1087
1088
            pybind11_fail("generic_type: cannot initialize type \"" + std::string(rec.name) +
                          "\": an object with that name is already defined");
1089

1090
        if (rec.module_local ? get_local_type_info(*rec.type) : get_global_type_info(*rec.type))
1091
            pybind11_fail("generic_type: type \"" + std::string(rec.name) +
1092
1093
                          "\" is already registered!");

1094
        m_ptr = make_new_python_type(rec);
1095
1096

        /* Register supplemental type information in C++ dict */
1097
1098
        auto *tinfo = new detail::type_info();
        tinfo->type = (PyTypeObject *) m_ptr;
1099
        tinfo->cpptype = rec.type;
1100
        tinfo->type_size = rec.type_size;
1101
        tinfo->type_align = rec.type_align;
1102
        tinfo->operator_new = rec.operator_new;
1103
        tinfo->holder_size_in_ptrs = size_in_ptrs(rec.holder_size);
1104
        tinfo->init_instance = rec.init_instance;
1105
        tinfo->dealloc = rec.dealloc;
1106
1107
        tinfo->simple_type = true;
        tinfo->simple_ancestors = true;
1108
1109
        tinfo->default_holder = rec.default_holder;
        tinfo->module_local = rec.module_local;
1110
1111
1112

        auto &internals = get_internals();
        auto tindex = std::type_index(*rec.type);
1113
        tinfo->direct_conversions = &internals.direct_conversions[tindex];
1114
1115
1116
1117
        if (rec.module_local)
            registered_local_types_cpp()[tindex] = tinfo;
        else
            internals.registered_types_cpp[tindex] = tinfo;
1118
        internals.registered_types_py[(PyTypeObject *) m_ptr] = { tinfo };
Wenzel Jakob's avatar
Wenzel Jakob committed
1119

1120
        if (rec.bases.size() > 1 || rec.multiple_inheritance) {
1121
            mark_parents_nonsimple(tinfo->type);
1122
1123
1124
1125
1126
1127
            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;
        }
1128
1129
1130
1131

        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;
1132
            setattr(m_ptr, PYBIND11_MODULE_LOCAL_ID, capsule(tinfo));
1133
        }
Wenzel Jakob's avatar
Wenzel Jakob committed
1134
1135
    }

Wenzel Jakob's avatar
Wenzel Jakob committed
1136
1137
    /// Helper function which tags all parents of a type using mult. inheritance
    void mark_parents_nonsimple(PyTypeObject *value) {
1138
        auto t = reinterpret_borrow<tuple>(value->tp_bases);
Wenzel Jakob's avatar
Wenzel Jakob committed
1139
1140
1141
1142
1143
1144
1145
1146
        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
1147
1148
1149
    void install_buffer_funcs(
            buffer_info *(*get_buffer)(PyObject *, void *),
            void *get_buffer_data) {
1150
        auto *type = (PyHeapTypeObject*) m_ptr;
1151
        auto tinfo = detail::get_type_info(&type->ht_type);
Wenzel Jakob's avatar
Wenzel Jakob committed
1152
1153
1154
1155

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

1160
1161
        tinfo->get_buffer = get_buffer;
        tinfo->get_buffer_data = get_buffer_data;
Wenzel Jakob's avatar
Wenzel Jakob committed
1162
1163
    }

1164
    // rec_func must be set for either fget or fset.
Wenzel Jakob's avatar
Wenzel Jakob committed
1165
1166
    void def_property_static_impl(const char *name,
                                  handle fget, handle fset,
1167
1168
1169
                                  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();
1170
1171
1172
1173
1174
        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(),
1175
                              pybind11::str(has_doc ? rec_func->doc : ""));
Wenzel Jakob's avatar
Wenzel Jakob committed
1176
    }
Wenzel Jakob's avatar
Wenzel Jakob committed
1177
};
1178

1179
1180
1181
1182
1183
1184
/// 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(...) { }

1185
1186
1187
1188
1189
1190
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 { };
1191
/// Call class-specific delete if it exists or global otherwise. Can also be an overload set.
1192
template <typename T, enable_if_t<has_operator_delete<T>::value, int> = 0>
1193
void call_operator_delete(T *p, size_t, size_t) { T::operator delete(p); }
1194
template <typename T, enable_if_t<!has_operator_delete<T>::value && has_operator_delete_size<T>::value, int> = 0>
1195
1196
1197
1198
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;
1199
    #if defined(__cpp_aligned_new) && (!defined(_MSC_VER) || _MSC_VER >= 1912)
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
        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
1210
        ::operator delete(p, s);
1211
1212
1213
    #else
        ::operator delete(p);
    #endif
1214
}
1215

1216
1217
1218
1219
1220
1221
1222
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();
    }
}

1223
PYBIND11_NAMESPACE_END(detail)
Wenzel Jakob's avatar
Wenzel Jakob committed
1224

1225
1226
1227
1228
1229
1230
/// 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>
1231
1232
1233
1234
1235
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;
}
1236
1237

template <typename Derived, typename Return, typename Class, typename... Args>
1238
1239
1240
1241
1242
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;
}
1243

1244
template <typename type_, typename... options>
Wenzel Jakob's avatar
Wenzel Jakob committed
1245
class class_ : public detail::generic_type {
1246
    template <typename T> using is_holder = detail::is_holder_type<type_, T>;
1247
1248
    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_>;
1249
1250
1251
    // 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>> {};
1252

Wenzel Jakob's avatar
Wenzel Jakob committed
1253
public:
1254
    using type = type_;
1255
    using type_alias = detail::exactly_one_t<is_subtype, void, options...>;
1256
    constexpr static bool has_alias = !std::is_void<type_alias>::value;
1257
    using holder_type = detail::exactly_one_t<is_holder, std::unique_ptr<type>, options...>;
1258

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

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

1265
    PYBIND11_OBJECT(class_, generic_type, PyType_Check)
Wenzel Jakob's avatar
Wenzel Jakob committed
1266

Wenzel Jakob's avatar
Wenzel Jakob committed
1267
1268
    template <typename... Extra>
    class_(handle scope, const char *name, const Extra &... extra) {
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
        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
1280
1281
1282
        record.scope = scope;
        record.name = name;
        record.type = &typeid(type);
1283
        record.type_size = sizeof(conditional_t<has_alias, type_alias, type>);
1284
        record.type_align = alignof(conditional_t<has_alias, type_alias, type>&);
1285
        record.holder_size = sizeof(holder_type);
1286
        record.init_instance = init_instance;
Wenzel Jakob's avatar
Wenzel Jakob committed
1287
        record.dealloc = dealloc;
1288
        record.default_holder = detail::is_instantiation<std::unique_ptr, holder_type>::value;
Wenzel Jakob's avatar
Wenzel Jakob committed
1289

1290
1291
        set_operator_new<type>(&record);

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

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

1298
        generic_type::initialize(record);
1299

1300
        if (has_alias) {
1301
            auto &instances = record.module_local ? registered_local_types_cpp() : get_internals().registered_types_cpp;
1302
1303
            instances[std::type_index(typeid(type_alias))] = instances[std::type_index(typeid(type))];
        }
Wenzel Jakob's avatar
Wenzel Jakob committed
1304
    }
Wenzel Jakob's avatar
Wenzel Jakob committed
1305

1306
    template <typename Base, detail::enable_if_t<is_base<Base>::value, int> = 0>
Wenzel Jakob's avatar
Wenzel Jakob committed
1307
    static void add_base(detail::type_record &rec) {
1308
        rec.add_base(typeid(Base), [](void *src) -> void * {
Wenzel Jakob's avatar
Wenzel Jakob committed
1309
1310
1311
1312
            return static_cast<Base *>(reinterpret_cast<type *>(src));
        });
    }

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

1316
    template <typename Func, typename... Extra>
Wenzel Jakob's avatar
Wenzel Jakob committed
1317
    class_ &def(const char *name_, Func&& f, const Extra&... extra) {
1318
        cpp_function cf(method_adaptor<type>(std::forward<Func>(f)), name(name_), is_method(*this),
1319
                        sibling(getattr(*this, name_, none())), extra...);
1320
        add_class_method(*this, name_, cf);
Wenzel Jakob's avatar
Wenzel Jakob committed
1321
1322
1323
        return *this;
    }

1324
    template <typename Func, typename... Extra> class_ &
1325
1326
1327
    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");
1328
1329
        cpp_function cf(std::forward<Func>(f), name(name_), scope(*this),
                        sibling(getattr(*this, name_, none())), extra...);
1330
        attr(cf.name()) = staticmethod(cf);
Wenzel Jakob's avatar
Wenzel Jakob committed
1331
1332
1333
        return *this;
    }

1334
    template <detail::op_id id, detail::op_type ot, typename L, typename R, typename... Extra>
Wenzel Jakob's avatar
Wenzel Jakob committed
1335
    class_ &def(const detail::op_<id, ot, L, R> &op, const Extra&... extra) {
1336
        op.execute(*this, extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
1337
1338
1339
        return *this;
    }

1340
    template <detail::op_id id, detail::op_type ot, typename L, typename R, typename... Extra>
Wenzel Jakob's avatar
Wenzel Jakob committed
1341
    class_ & def_cast(const detail::op_<id, ot, L, R> &op, const Extra&... extra) {
1342
        op.execute_cast(*this, extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
1343
1344
1345
        return *this;
    }

1346
    template <typename... Args, typename... Extra>
1347
    class_ &def(const detail::initimpl::constructor<Args...> &init, const Extra&... extra) {
1348
        init.execute(*this, extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
1349
1350
1351
        return *this;
    }

1352
    template <typename... Args, typename... Extra>
1353
    class_ &def(const detail::initimpl::alias_constructor<Args...> &init, const Extra&... extra) {
1354
        init.execute(*this, extra...);
1355
1356
1357
        return *this;
    }

1358
1359
1360
1361
1362
1363
    template <typename... Args, typename... Extra>
    class_ &def(detail::initimpl::factory<Args...> &&init, const Extra&... extra) {
        std::move(init).execute(*this, extra...);
        return *this;
    }

1364
1365
1366
1367
1368
1369
    template <typename... Args, typename... Extra>
    class_ &def(detail::initimpl::pickle_factory<Args...> &&pf, const Extra &...extra) {
        std::move(pf).execute(*this, extra...);
        return *this;
    }

1370
1371
    template <typename Func>
    class_& def_buffer(Func &&func) {
Wenzel Jakob's avatar
Wenzel Jakob committed
1372
        struct capture { Func func; };
1373
        auto *ptr = new capture { std::forward<Func>(func) };
Wenzel Jakob's avatar
Wenzel Jakob committed
1374
        install_buffer_funcs([](PyObject *obj, void *ptr) -> buffer_info* {
1375
            detail::make_caster<type> caster;
Wenzel Jakob's avatar
Wenzel Jakob committed
1376
1377
            if (!caster.load(obj, false))
                return nullptr;
Wenzel Jakob's avatar
Wenzel Jakob committed
1378
1379
            return new buffer_info(((capture *) ptr)->func(caster));
        }, ptr);
1380
1381
1382
1383
        weakref(m_ptr, cpp_function([ptr](handle wr) {
            delete ptr;
            wr.dec_ref();
        })).release();
Wenzel Jakob's avatar
Wenzel Jakob committed
1384
1385
1386
        return *this;
    }

1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
    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)(); });
    }

1397
    template <typename C, typename D, typename... Extra>
Wenzel Jakob's avatar
Wenzel Jakob committed
1398
    class_ &def_readwrite(const char *name, D C::*pm, const Extra&... extra) {
1399
        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)");
1400
1401
        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));
1402
        def_property(name, fget, fset, return_value_policy::reference_internal, extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
1403
1404
1405
        return *this;
    }

1406
    template <typename C, typename D, typename... Extra>
Wenzel Jakob's avatar
Wenzel Jakob committed
1407
    class_ &def_readonly(const char *name, const D C::*pm, const Extra& ...extra) {
1408
        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)");
1409
        cpp_function fget([pm](const type &c) -> const D &{ return c.*pm; }, is_method(*this));
1410
        def_property_readonly(name, fget, return_value_policy::reference_internal, extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
1411
1412
1413
        return *this;
    }

1414
    template <typename D, typename... Extra>
Wenzel Jakob's avatar
Wenzel Jakob committed
1415
    class_ &def_readwrite_static(const char *name, D *pm, const Extra& ...extra) {
1416
1417
        cpp_function fget([pm](const object &) -> const D & { return *pm; }, scope(*this)),
            fset([pm](const object &, const D &value) { *pm = value; }, scope(*this));
1418
        def_property_static(name, fget, fset, return_value_policy::reference, extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
1419
1420
1421
        return *this;
    }

1422
    template <typename D, typename... Extra>
Wenzel Jakob's avatar
Wenzel Jakob committed
1423
    class_ &def_readonly_static(const char *name, const D *pm, const Extra& ...extra) {
1424
        cpp_function fget([pm](const object &) -> const D & { return *pm; }, scope(*this));
1425
        def_property_readonly_static(name, fget, return_value_policy::reference, extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
1426
1427
1428
        return *this;
    }

1429
1430
1431
    /// 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) {
1432
1433
        return def_property_readonly(name, cpp_function(method_adaptor<type>(fget)),
                                     return_value_policy::reference_internal, extra...);
1434
1435
1436
    }

    /// Uses cpp_function's return_value_policy by default
1437
1438
    template <typename... Extra>
    class_ &def_property_readonly(const char *name, const cpp_function &fget, const Extra& ...extra) {
1439
        return def_property(name, fget, nullptr, extra...);
1440
1441
1442
1443
1444
1445
    }

    /// 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
1446
1447
    }

1448
    /// Uses cpp_function's return_value_policy by default
1449
1450
    template <typename... Extra>
    class_ &def_property_readonly_static(const char *name, const cpp_function &fget, const Extra& ...extra) {
1451
        return def_property_static(name, fget, nullptr, extra...);
1452
1453
1454
    }

    /// Uses return_value_policy::reference_internal by default
1455
1456
1457
1458
    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...);
    }
1459
1460
    template <typename Getter, typename... Extra>
    class_ &def_property(const char *name, const Getter &fget, const cpp_function &fset, const Extra& ...extra) {
1461
1462
        return def_property(name, cpp_function(method_adaptor<type>(fget)), fset,
                            return_value_policy::reference_internal, extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
1463
1464
    }

1465
    /// Uses cpp_function's return_value_policy by default
1466
1467
    template <typename... Extra>
    class_ &def_property(const char *name, const cpp_function &fget, const cpp_function &fset, const Extra& ...extra) {
1468
        return def_property_static(name, fget, fset, is_method(*this), extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
1469
1470
    }

1471
1472
1473
1474
1475
1476
1477
    /// 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
1478
1479
    template <typename... Extra>
    class_ &def_property_static(const char *name, const cpp_function &fget, const cpp_function &fset, const Extra& ...extra) {
1480
1481
        static_assert( 0 == detail::constexpr_sum(std::is_base_of<arg, Extra>::value...),
                      "Argument annotations are not allowed for properties");
1482
        auto rec_fget = get_function_record(fget), rec_fset = get_function_record(fset);
1483
1484
1485
1486
1487
1488
1489
1490
        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);
           }
1491
1492
        }
        if (rec_fset) {
1493
            char *doc_prev = rec_fset->doc;
1494
            detail::process_attributes<Extra...>::init(extra..., rec_fset);
1495
1496
1497
1498
            if (rec_fset->doc && rec_fset->doc != doc_prev) {
                free(doc_prev);
                rec_fset->doc = strdup(rec_fset->doc);
            }
1499
            if (! rec_active) rec_active = rec_fset;
1500
        }
1501
        def_property_static_impl(name, fget, fset, rec_active);
Wenzel Jakob's avatar
Wenzel Jakob committed
1502
1503
        return *this;
    }
1504

Wenzel Jakob's avatar
Wenzel Jakob committed
1505
private:
1506
1507
    /// Initialize holder object, variant 1: object derives from enable_shared_from_this
    template <typename T>
1508
    static void init_holder(detail::instance *inst, detail::value_and_holder &v_h,
1509
            const holder_type * /* unused */, const std::enable_shared_from_this<T> * /* dummy */) {
1510
1511
1512
1513
1514
1515
1516

        auto sh = std::dynamic_pointer_cast<typename holder_type::element_type>(
                detail::try_get_shared_from_this(v_h.value_ptr<type>()));
        if (sh) {
            new (std::addressof(v_h.holder<holder_type>())) holder_type(std::move(sh));
            v_h.set_holder_constructed();
        }
1517
1518

        if (!v_h.holder_constructed() && inst->owned) {
1519
            new (std::addressof(v_h.holder<holder_type>())) holder_type(v_h.value_ptr<type>());
1520
            v_h.set_holder_constructed();
1521
        }
1522
1523
    }

1524
1525
    static void init_holder_from_existing(const detail::value_and_holder &v_h,
            const holder_type *holder_ptr, std::true_type /*is_copy_constructible*/) {
1526
        new (std::addressof(v_h.holder<holder_type>())) holder_type(*reinterpret_cast<const holder_type *>(holder_ptr));
1527
1528
    }

1529
1530
    static void init_holder_from_existing(const detail::value_and_holder &v_h,
            const holder_type *holder_ptr, std::false_type /*is_copy_constructible*/) {
1531
        new (std::addressof(v_h.holder<holder_type>())) holder_type(std::move(*const_cast<holder_type *>(holder_ptr)));
1532
1533
    }

1534
    /// Initialize holder object, variant 2: try to construct from existing holder object, if possible
1535
    static void init_holder(detail::instance *inst, detail::value_and_holder &v_h,
1536
            const holder_type *holder_ptr, const void * /* dummy -- not enable_shared_from_this<T>) */) {
1537
        if (holder_ptr) {
1538
1539
            init_holder_from_existing(v_h, holder_ptr, std::is_copy_constructible<holder_type>());
            v_h.set_holder_constructed();
1540
        } else if (inst->owned || detail::always_construct_holder<holder_type>::value) {
1541
            new (std::addressof(v_h.holder<holder_type>())) holder_type(v_h.value_ptr<type>());
1542
            v_h.set_holder_constructed();
1543
        }
1544
1545
    }

1546
1547
1548
1549
1550
    /// 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) {
1551
        auto v_h = inst->get_value_and_holder(detail::get_type_info(typeid(type)));
1552
1553
1554
1555
        if (!v_h.instance_registered()) {
            register_instance(inst, v_h.value_ptr(), v_h.type);
            v_h.set_instance_registered();
        }
1556
        init_holder(inst, v_h, (const holder_type *) holder_ptr, v_h.value_ptr<type>());
1557
1558
    }

1559
    /// Deallocates an instance; via holder, if constructed; otherwise via operator delete.
1560
    static void dealloc(detail::value_and_holder &v_h) {
1561
1562
1563
1564
1565
1566
1567
        // 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;
1568
        if (v_h.holder_constructed()) {
1569
            v_h.holder<holder_type>().~holder_type();
1570
1571
1572
            v_h.set_holder_constructed(false);
        }
        else {
1573
1574
1575
1576
            detail::call_operator_delete(v_h.value_ptr<type>(),
                v_h.type->type_size,
                v_h.type->type_align
            );
1577
1578
        }
        v_h.value_ptr() = nullptr;
Wenzel Jakob's avatar
Wenzel Jakob committed
1579
    }
1580
1581
1582

    static detail::function_record *get_function_record(handle h) {
        h = detail::get_function(h);
Wenzel Jakob's avatar
Wenzel Jakob committed
1583
        return h ? (detail::function_record *) reinterpret_borrow<capsule>(PyCFunction_GET_SELF(h.ptr()))
1584
                 : nullptr;
1585
    }
Wenzel Jakob's avatar
Wenzel Jakob committed
1586
1587
};

1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
/// 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
1610
}
1611

1612
PYBIND11_NAMESPACE_BEGIN(detail)
David Vo's avatar
David Vo committed
1613
1614
1615

inline str enum_name(handle arg) {
    dict entries = arg.get_type().attr("__entries");
1616
    for (auto kv : entries) {
David Vo's avatar
David Vo committed
1617
1618
1619
1620
1621
1622
        if (handle(kv.second[int_(0)]).equal(arg))
            return pybind11::str(kv.first);
    }
    return "???";
}

1623
1624
1625
1626
1627
1628
1629
1630
1631
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
1632
            [](object arg) -> str {
1633
                handle type = type::handle_of(arg);
1634
                object type_name = type.attr("__name__");
David Vo's avatar
David Vo committed
1635
                return pybind11::str("<{}.{}: {}>").format(type_name, enum_name(arg), int_(arg));
1636
            }, name("__repr__"), is_method(m_base)
1637
1638
        );

David Vo's avatar
David Vo committed
1639
1640
1641
        m_base.attr("name") = property(cpp_function(&enum_name, name("name"), is_method(m_base)));

        m_base.attr("__str__") = cpp_function(
1642
            [](handle arg) -> str {
David Vo's avatar
David Vo committed
1643
1644
                object type_name = type::handle_of(arg).attr("__name__");
                return pybind11::str("{}.{}").format(type_name, enum_name(arg));
1645
            }, name("name"), is_method(m_base)
David Vo's avatar
David Vo committed
1646
        );
1647
1648
1649
1650
1651
1652
1653
1654

        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:";
1655
                for (auto kv : entries) {
1656
1657
1658
1659
1660
1661
1662
                    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;
1663
            }, name("__doc__")
1664
1665
1666
1667
1668
        ), none(), none(), "");

        m_base.attr("__members__") = static_property(cpp_function(
            [](handle arg) -> dict {
                dict entries = arg.attr("__entries"), m;
1669
                for (auto kv : entries)
1670
1671
                    m[kv.first] = kv.second[int_(0)];
                return m;
1672
            }, name("__members__")), none(), none(), ""
1673
1674
        );

1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
#define PYBIND11_ENUM_OP_STRICT(op, expr, strict_behavior)                                        \
    m_base.attr(op) = cpp_function(                                                               \
        [](const object &a, const object &b) {                                                    \
            if (!type::handle_of(a).is(type::handle_of(b)))                                       \
                strict_behavior;                                                                  \
            return expr;                                                                          \
        },                                                                                        \
        name(op),                                                                                 \
        is_method(m_base),                                                                        \
        arg("other"))

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

#define PYBIND11_ENUM_OP_CONV_LHS(op, expr)                                                       \
    m_base.attr(op) = cpp_function(                                                               \
        [](const object &a_, const object &b) {                                                   \
            int_ a(a_);                                                                           \
            return expr;                                                                          \
        },                                                                                        \
        name(op),                                                                                 \
        is_method(m_base),                                                                        \
        arg("other"))
1705

1706
        if (is_convertible) {
1707
1708
            PYBIND11_ENUM_OP_CONV_LHS("__eq__", !b.is_none() &&  a.equal(b));
            PYBIND11_ENUM_OP_CONV_LHS("__ne__",  b.is_none() || !a.equal(b));
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720

            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);
1721
                m_base.attr("__invert__") = cpp_function(
1722
                    [](object arg) { return ~(int_(arg)); }, name("__invert__"), is_method(m_base));
1723
1724
            }
        } else {
1725
1726
            PYBIND11_ENUM_OP_STRICT("__eq__",  int_(a).equal(int_(b)), return false);
            PYBIND11_ENUM_OP_STRICT("__ne__", !int_(a).equal(int_(b)), return true);
1727
1728

            if (is_arithmetic) {
1729
1730
1731
1732
1733
1734
                #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
1735
1736
1737
            }
        }

1738
        #undef PYBIND11_ENUM_OP_CONV_LHS
1739
1740
1741
        #undef PYBIND11_ENUM_OP_CONV
        #undef PYBIND11_ENUM_OP_STRICT

1742
1743
        m_base.attr("__getstate__") = cpp_function(
            [](object arg) { return int_(arg); }, name("__getstate__"), is_method(m_base));
1744

1745
1746
        m_base.attr("__hash__") = cpp_function(
            [](object arg) { return int_(arg); }, name("__hash__"), is_method(m_base));
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
    }

    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");
1763
        for (auto kv : entries)
1764
1765
1766
1767
1768
1769
1770
            m_parent.attr(kv.first) = kv.second[int_(0)];
    }

    handle m_base;
    handle m_parent;
};

1771
PYBIND11_NAMESPACE_END(detail)
1772

Wenzel Jakob's avatar
Wenzel Jakob committed
1773
1774
1775
/// Binds C++ enumerations and enumeration classes to Python
template <typename Type> class enum_ : public class_<Type> {
public:
1776
1777
1778
1779
1780
    using Base = class_<Type>;
    using Base::def;
    using Base::attr;
    using Base::def_property_readonly;
    using Base::def_property_readonly_static;
1781
1782
    using Scalar = typename std::underlying_type<Type>::type;

Wenzel Jakob's avatar
Wenzel Jakob committed
1783
1784
    template <typename... Extra>
    enum_(const handle &scope, const char *name, const Extra&... extra)
1785
      : class_<Type>(scope, name, extra...), m_base(*this, scope) {
1786
        constexpr bool is_arithmetic = detail::any_of<std::is_same<arithmetic, Extra>...>::value;
1787
1788
        constexpr bool is_convertible = std::is_convertible<Type, Scalar>::value;
        m_base.init(is_arithmetic, is_convertible);
1789

1790
        def(init([](Scalar i) { return static_cast<Type>(i); }), arg("value"));
1791
        def_property_readonly("value", [](Type value) { return (Scalar) value; });
1792
        def("__int__", [](Type value) { return (Scalar) value; });
1793
1794
1795
        #if PY_MAJOR_VERSION < 3
            def("__long__", [](Type value) { return (Scalar) value; });
        #endif
1796
        #if PY_MAJOR_VERSION > 3 || (PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION >= 8)
1797
1798
1799
            def("__index__", [](Type value) { return (Scalar) value; });
        #endif

1800
1801
1802
1803
1804
        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(),
1805
            pybind11::name("__setstate__"), is_method(*this), arg("state"));
Wenzel Jakob's avatar
Wenzel Jakob committed
1806
1807
1808
    }

    /// Export enumeration entries into the parent scope
1809
    enum_& export_values() {
1810
        m_base.export_values();
1811
        return *this;
Wenzel Jakob's avatar
Wenzel Jakob committed
1812
1813
1814
    }

    /// Add an enumeration entry
1815
    enum_& value(char const* name, Type value, const char *doc = nullptr) {
1816
        m_base.value(name, pybind11::cast(value, return_value_policy::copy), doc);
Wenzel Jakob's avatar
Wenzel Jakob committed
1817
1818
        return *this;
    }
1819

Wenzel Jakob's avatar
Wenzel Jakob committed
1820
private:
1821
    detail::enum_base m_base;
Wenzel Jakob's avatar
Wenzel Jakob committed
1822
1823
};

1824
PYBIND11_NAMESPACE_BEGIN(detail)
1825

1826

1827
inline void keep_alive_impl(handle nurse, handle patient) {
1828
    if (!nurse || !patient)
1829
        pybind11_fail("Could not activate keep_alive!");
1830

1831
    if (patient.is_none() || nurse.is_none())
1832
        return; /* Nothing to keep alive or nothing to be kept alive by */
1833

1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
    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(); });
1846

1847
        weakref wr(nurse, disable_lifesupport);
1848

1849
1850
1851
        patient.inc_ref(); /* reference patient and leak the weak reference */
        (void) wr.release();
    }
1852
1853
}

1854
PYBIND11_NOINLINE inline void keep_alive_impl(size_t Nurse, size_t Patient, function_call &call, handle ret) {
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
    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));
1866
1867
}

1868
1869
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
1870
#ifdef __cpp_lib_unordered_map_try_emplace
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
        .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;
}

1887
template <typename Iterator, typename Sentinel, bool KeyIterator, return_value_policy Policy>
1888
1889
1890
struct iterator_state {
    Iterator it;
    Sentinel end;
1891
    bool first_or_done;
1892
};
1893

1894
PYBIND11_NAMESPACE_END(detail)
Wenzel Jakob's avatar
Wenzel Jakob committed
1895

1896
/// Makes a python iterator from a first and past-the-end C++ InputIterator.
1897
1898
template <return_value_policy Policy = return_value_policy::reference_internal,
          typename Iterator,
1899
          typename Sentinel,
1900
#ifndef DOXYGEN_SHOULD_SKIP_THIS  // Issue in breathe 4.26.1
1901
          typename ValueType = decltype(*std::declval<Iterator>()),
1902
#endif
1903
          typename... Extra>
1904
iterator make_iterator(Iterator first, Sentinel last, Extra &&... extra) {
1905
    using state = detail::iterator_state<Iterator, Sentinel, false, Policy>;
1906

Wenzel Jakob's avatar
Wenzel Jakob committed
1907
    if (!detail::get_type_info(typeid(state), false)) {
1908
        class_<state>(handle(), "iterator", pybind11::module_local())
1909
            .def("__iter__", [](state &s) -> state& { return s; })
1910
            .def("__next__", [](state &s) -> ValueType {
1911
                if (!s.first_or_done)
1912
1913
                    ++s.it;
                else
1914
1915
1916
                    s.first_or_done = false;
                if (s.it == s.end) {
                    s.first_or_done = true;
1917
                    throw stop_iteration();
1918
                }
1919
                return *s.it;
1920
            }, std::forward<Extra>(extra)..., Policy);
1921
1922
    }

1923
    return cast(state{first, last, true});
1924
}
1925

1926
1927
/// Makes an python iterator over the keys (`.first`) of a iterator over pairs from a
/// first and past-the-end InputIterator.
1928
1929
template <return_value_policy Policy = return_value_policy::reference_internal,
          typename Iterator,
1930
          typename Sentinel,
1931
#ifndef DOXYGEN_SHOULD_SKIP_THIS  // Issue in breathe 4.26.1
1932
          typename KeyType = decltype((*std::declval<Iterator>()).first),
1933
#endif
1934
          typename... Extra>
1935
iterator make_key_iterator(Iterator first, Sentinel last, Extra &&... extra) {
1936
    using state = detail::iterator_state<Iterator, Sentinel, true, Policy>;
1937

Wenzel Jakob's avatar
Wenzel Jakob committed
1938
    if (!detail::get_type_info(typeid(state), false)) {
1939
        class_<state>(handle(), "iterator", pybind11::module_local())
1940
1941
            .def("__iter__", [](state &s) -> state& { return s; })
            .def("__next__", [](state &s) -> KeyType {
1942
                if (!s.first_or_done)
1943
1944
                    ++s.it;
                else
1945
1946
1947
                    s.first_or_done = false;
                if (s.it == s.end) {
                    s.first_or_done = true;
1948
                    throw stop_iteration();
1949
                }
1950
                return (*s.it).first;
1951
            }, std::forward<Extra>(extra)..., Policy);
1952
1953
    }

1954
    return cast(state{first, last, true});
1955
}
1956

1957
1958
/// Makes an iterator over values of an stl container or other container supporting
/// `std::begin()`/`std::end()`
1959
1960
1961
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...);
1962
1963
}

1964
1965
/// Makes an iterator over the keys (`.first`) of a stl map-like container supporting
/// `std::begin()`/`std::end()`
1966
1967
1968
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...);
1969
1970
}

Wenzel Jakob's avatar
Wenzel Jakob committed
1971
template <typename InputType, typename OutputType> void implicitly_convertible() {
1972
1973
    struct set_flag {
        bool &flag;
1974
        set_flag(bool &flag_) : flag(flag_) { flag_ = true; }
1975
1976
        ~set_flag() { flag = false; }
    };
1977
    auto implicit_caster = [](PyObject *obj, PyTypeObject *type) -> PyObject * {
1978
1979
1980
1981
        static bool currently_used = false;
        if (currently_used) // implicit conversions are non-reentrant
            return nullptr;
        set_flag flag_helper(currently_used);
1982
        if (!detail::make_caster<InputType>().load(obj, false))
Wenzel Jakob's avatar
Wenzel Jakob committed
1983
1984
1985
1986
1987
1988
1989
1990
            return nullptr;
        tuple args(1);
        args[0] = obj;
        PyObject *result = PyObject_Call((PyObject *) type, args.ptr(), nullptr);
        if (result == nullptr)
            PyErr_Clear();
        return result;
    };
1991
1992
1993
1994

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

1998
1999
2000
2001
2002
2003
template <typename ExceptionTranslator>
void register_exception_translator(ExceptionTranslator&& translator) {
    detail::get_internals().registered_exception_translators.push_front(
        std::forward<ExceptionTranslator>(translator));
}

2004
2005
/**
 * Wrapper to generate a new Python exception type.
2006
2007
2008
2009
2010
2011
2012
2013
 *
 * 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:
2014
    exception() = default;
2015
    exception(handle scope, const char *name, handle base = PyExc_Exception) {
2016
2017
        std::string full_name = scope.attr("__name__").cast<std::string>() +
                                std::string(".") + name;
2018
        m_ptr = PyErr_NewException(const_cast<char *>(full_name.c_str()), base.ptr(), NULL);
2019
        if (hasattr(scope, "__dict__") && scope.attr("__dict__").contains(name))
2020
2021
2022
            pybind11_fail("Error during initialization: multiple incompatible "
                          "definitions with name \"" + std::string(name) + "\"");
        scope.attr(name) = *this;
2023
    }
2024
2025
2026
2027
2028

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

2031
PYBIND11_NAMESPACE_BEGIN(detail)
2032
2033
2034
2035
2036
// 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; }
2037
PYBIND11_NAMESPACE_END(detail)
2038

2039
2040
/**
 * Registers a Python exception in `m` of the given `name` and installs an exception translator to
2041
2042
2043
2044
 * 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.
 */
2045
2046
2047
template <typename CppException>
exception<CppException> &register_exception(handle scope,
                                            const char *name,
2048
                                            handle base = PyExc_Exception) {
2049
2050
2051
    auto &ex = detail::get_exception_object<CppException>();
    if (!ex) ex = exception<CppException>(scope, name, base);

2052
2053
2054
2055
    register_exception_translator([](std::exception_ptr p) {
        if (!p) return;
        try {
            std::rethrow_exception(p);
2056
        } catch (const CppException &e) {
2057
            detail::get_exception_object<CppException>()(e.what());
2058
2059
2060
2061
2062
        }
    });
    return ex;
}

2063
PYBIND11_NAMESPACE_BEGIN(detail)
2064
PYBIND11_NOINLINE inline void print(const tuple &args, const dict &kwargs) {
Dean Moldovan's avatar
Dean Moldovan committed
2065
2066
    auto strings = tuple(args.size());
    for (size_t i = 0; i < args.size(); ++i) {
2067
        strings[i] = str(args[i]);
Dean Moldovan's avatar
Dean Moldovan committed
2068
    }
2069
    auto sep = kwargs.contains("sep") ? kwargs["sep"] : cast(" ");
2070
    auto line = sep.attr("join")(strings);
Dean Moldovan's avatar
Dean Moldovan committed
2071

2072
2073
2074
2075
2076
    object file;
    if (kwargs.contains("file")) {
        file = kwargs["file"].cast<object>();
    } else {
        try {
2077
            file = module_::import("sys").attr("stdout");
2078
        } catch (const error_already_set &) {
2079
2080
2081
2082
2083
2084
2085
2086
            /* 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;
        }
    }

2087
    auto write = file.attr("write");
Dean Moldovan's avatar
Dean Moldovan committed
2088
    write(line);
2089
    write(kwargs.contains("end") ? kwargs["end"] : cast("\n"));
Dean Moldovan's avatar
Dean Moldovan committed
2090

2091
    if (kwargs.contains("flush") && kwargs["flush"].cast<bool>())
2092
        file.attr("flush")();
Dean Moldovan's avatar
Dean Moldovan committed
2093
}
2094
PYBIND11_NAMESPACE_END(detail)
Dean Moldovan's avatar
Dean Moldovan committed
2095
2096
2097
2098
2099
2100
2101

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());
}

2102
error_already_set::~error_already_set() {
2103
    if (m_type) {
2104
        gil_scoped_acquire gil;
2105
        error_scope scope;
2106
2107
2108
        m_type.release().dec_ref();
        m_value.release().dec_ref();
        m_trace.release().dec_ref();
2109
2110
2111
    }
}

2112
2113
2114
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
2115
    if (!self)
2116
        return function();
2117
    handle type = type::handle_of(self);
2118
2119
    auto key = std::make_pair(type.ptr(), name);

2120
    /* Cache functions that aren't overridden in Python to avoid
2121
       many costly Python dictionary lookups below */
2122
    auto &cache = get_internals().inactive_override_cache;
2123
2124
2125
    if (cache.find(key) != cache.end())
        return function();

2126
2127
    function override = getattr(self, name, function());
    if (override.is_cpp_function()) {
2128
2129
2130
        cache.insert(key);
        return function();
    }
2131

Wenzel Jakob's avatar
Wenzel Jakob committed
2132
2133
2134
    /* Don't call dispatch code if invoked from overridden function.
       Unfortunately this doesn't work on PyPy. */
#if !defined(PYPY_VERSION)
2135
    PyFrameObject *frame = PyThreadState_Get()->frame;
2136
    if (frame && (std::string) str(frame->f_code->co_name) == name &&
2137
2138
2139
2140
        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
2141
        if (self_caller == self.ptr())
2142
2143
            return function();
    }
Wenzel Jakob's avatar
Wenzel Jakob committed
2144
2145
2146
2147
2148
2149
2150
2151
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
#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();
2162
    if (d["self"].is_none())
Wenzel Jakob's avatar
Wenzel Jakob committed
2163
2164
2165
2166
        return function();
    Py_DECREF(result);
#endif

2167
    return override;
2168
}
2169
PYBIND11_NAMESPACE_END(detail)
2170

2171
2172
2173
/** \rst
  Try to retrieve a python method by the provided name from the instance pointed to by the this_ptr.

2174
  :this_ptr: The pointer to the object the overridden method should be retrieved for. This should be
2175
2176
             the first non-trampoline class encountered in the inheritance chain.
  :name: The name of the overridden Python method to retrieve.
2177
2178
  :return: The Python method by this name from the object or an empty function wrapper.
 \endrst */
2179
template <class T> function get_override(const T *this_ptr, const char *name) {
2180
    auto tinfo = detail::get_type_info(typeid(T));
2181
    return tinfo ? detail::get_type_override(this_ptr, tinfo, name) : function();
2182
2183
}

2184
2185
#define PYBIND11_OVERRIDE_IMPL(ret_type, cname, name, ...) \
    do { \
2186
        pybind11::gil_scoped_acquire gil; \
2187
2188
2189
        pybind11::function override = pybind11::get_override(static_cast<const cname *>(this), name); \
        if (override) { \
            auto o = override(__VA_ARGS__); \
2190
            if (pybind11::detail::cast_is_temporary_value_reference<ret_type>::value) { \
2191
                static pybind11::detail::override_caster_t<ret_type> caster; \
2192
                return pybind11::detail::cast_ref<ret_type>(std::move(o), caster); \
2193
2194
2195
            } \
            else return pybind11::detail::cast_safe<ret_type>(std::move(o)); \
        } \
2196
    } while (false)
2197

2198
2199
2200
2201
2202
2203
2204
2205
2206
/** \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 {
2207
        PYBIND11_OVERRIDE_NAME(
2208
2209
            std::string, // Return type (ret_type)
            Animal,      // Parent class (cname)
methylDragon's avatar
methylDragon committed
2210
2211
            "__str__",   // Name of method in Python (name)
            toString,    // Name of function in C++ (fn)
2212
2213
2214
        );
      }
\endrst */
2215
2216
2217
2218
2219
#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)
2220

2221
/** \rst
2222
2223
    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.
2224
\endrst */
2225
2226
2227
2228
2229
#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)
2230

2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
/** \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 {
2246
              PYBIND11_OVERRIDE_PURE(
2247
2248
2249
2250
2251
2252
2253
2254
                  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 */
2255
2256
#define PYBIND11_OVERRIDE(ret_type, cname, fn, ...) \
    PYBIND11_OVERRIDE_NAME(PYBIND11_TYPE(ret_type), PYBIND11_TYPE(cname), #fn, fn, __VA_ARGS__)
2257

2258
/** \rst
2259
2260
    Macro for pure virtual functions, this function is identical to :c:macro:`PYBIND11_OVERRIDE`, except that it throws
    if no override can be found.
2261
\endrst */
2262
2263
2264
2265
2266
2267
2268
2269
2270
2271
2272
2273
2274
2275
2276
2277
2278
2279
2280
2281
2282
2283
2284
2285
#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__)
2286
#define PYBIND11_OVERLOAD_PURE(ret_type, cname, fn, ...) \
2287
    PYBIND11_OVERRIDE_PURE(PYBIND11_TYPE(ret_type), PYBIND11_TYPE(cname), fn, __VA_ARGS__);
2288

2289
PYBIND11_NAMESPACE_END(PYBIND11_NAMESPACE)
Wenzel Jakob's avatar
Wenzel Jakob committed
2290

2291
#if defined(_MSC_VER) && !defined(__INTEL_COMPILER)
Wenzel Jakob's avatar
Wenzel Jakob committed
2292
#  pragma warning(pop)
2293
#elif defined(__GNUG__) && !defined(__clang__) && !defined(__INTEL_COMPILER)
Wenzel Jakob's avatar
Wenzel Jakob committed
2294
#  pragma GCC diagnostic pop
Wenzel Jakob's avatar
Wenzel Jakob committed
2295
#endif