pybind11.h 74.7 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

#if defined(_MSC_VER)
Wenzel Jakob's avatar
Wenzel Jakob committed
14
#  pragma warning(push)
15
#  pragma warning(disable: 4100) // warning C4100: Unreferenced formal parameter
Wenzel Jakob's avatar
Wenzel Jakob committed
16
#  pragma warning(disable: 4127) // warning C4127: Conditional expression is constant
17
#  pragma warning(disable: 4512) // warning C4512: Assignment operator was implicitly defined as deleted
Wenzel Jakob's avatar
Wenzel Jakob committed
18
19
#  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
20
#  pragma warning(disable: 4702) // warning C4702: unreachable code
21
#  pragma warning(disable: 4522) // warning C4522: multiple assignment operators specified
22
#elif defined(__INTEL_COMPILER)
Ben Pritchard's avatar
Ben Pritchard committed
23
#  pragma warning(push)
24
25
26
#  pragma warning(disable: 186)   // pointless comparison of unsigned integer with zero
#  pragma warning(disable: 1334)  // the "template" keyword used for syntactic disambiguation may only be used within a template
#  pragma warning(disable: 2196)  // warning #2196: routine is both "inline" and "noinline"
27
#elif defined(__GNUG__) && !defined(__clang__)
Wenzel Jakob's avatar
Wenzel Jakob committed
28
29
30
31
#  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
32
33
#  pragma GCC diagnostic ignored "-Wstrict-aliasing"
#  pragma GCC diagnostic ignored "-Wattributes"
Wenzel Jakob's avatar
Wenzel Jakob committed
34
35
#endif

Wenzel Jakob's avatar
Wenzel Jakob committed
36
#include "attr.h"
37
#include "options.h"
38
#include "class_support.h"
Wenzel Jakob's avatar
Wenzel Jakob committed
39

40
NAMESPACE_BEGIN(pybind11)
Wenzel Jakob's avatar
Wenzel Jakob committed
41

Wenzel Jakob's avatar
Wenzel Jakob committed
42
/// Wraps an arbitrary C++ function/method/lambda function/.. into a callable Python object
43
class cpp_function : public function {
Wenzel Jakob's avatar
Wenzel Jakob committed
44
public:
45
    cpp_function() { }
Wenzel Jakob's avatar
Wenzel Jakob committed
46

47
    /// Construct a cpp_function from a vanilla function pointer
48
49
    template <typename Return, typename... Args, typename... Extra>
    cpp_function(Return (*f)(Args...), const Extra&... extra) {
50
        initialize(f, f, extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
51
52
    }

53
    /// Construct a cpp_function from a lambda function (possibly with internal state)
54
55
56
57
58
59
    template <typename Func, typename... Extra, typename = detail::enable_if_t<
        detail::satisfies_none_of<
            typename std::remove_reference<Func>::type,
            std::is_function, std::is_pointer, std::is_member_pointer
        >::value>
    >
60
    cpp_function(Func &&f, const Extra&... extra) {
61
        using FuncType = typename detail::remove_class<decltype(&std::remove_reference<Func>::type::operator())>::type;
62
        initialize(std::forward<Func>(f),
63
                   (FuncType *) nullptr, extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
64
65
    }

66
    /// Construct a cpp_function from a class method (non-const)
67
68
    template <typename Return, typename Class, typename... Arg, typename... Extra>
    cpp_function(Return (Class::*f)(Arg...), const Extra&... extra) {
69
        initialize([f](Class *c, Arg... args) -> Return { return (c->*f)(args...); },
70
                   (Return (*) (Class *, Arg...)) nullptr, extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
71
    }
Wenzel Jakob's avatar
Wenzel Jakob committed
72

73
    /// Construct a cpp_function from a class method (const)
74
75
    template <typename Return, typename Class, typename... Arg, typename... Extra>
    cpp_function(Return (Class::*f)(Arg...) const, const Extra&... extra) {
76
        initialize([f](const Class *c, Arg... args) -> Return { return (c->*f)(args...); },
77
                   (Return (*)(const Class *, Arg ...)) nullptr, extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
78
79
    }

80
    /// Return the function name
Wenzel Jakob's avatar
Wenzel Jakob committed
81
    object name() const { return attr("__name__"); }
82

83
protected:
84
85
86
87
88
    /// Space optimization: don't inline this frequently instantiated fragment
    PYBIND11_NOINLINE detail::function_record *make_function_record() {
        return new detail::function_record();
    }

89
    /// Special internal constructor for functors, lambda functions, etc.
90
91
    template <typename Func, typename Return, typename... Args, typename... Extra>
    void initialize(Func &&f, Return (*)(Args...), const Extra&... extra) {
92

93
        struct capture { typename std::remove_reference<Func>::type f; };
Wenzel Jakob's avatar
Wenzel Jakob committed
94

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

98
99
        /* Store the capture object directly in the function record if there is enough space */
        if (sizeof(capture) <= sizeof(rec->data)) {
100
101
102
            /* 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. */
103
#if defined(__GNUG__) && !defined(__clang__) && __GNUC__ >= 6
104
105
106
#  pragma GCC diagnostic push
#  pragma GCC diagnostic ignored "-Wplacement-new"
#endif
107
            new ((capture *) &rec->data) capture { std::forward<Func>(f) };
108
#if defined(__GNUG__) && !defined(__clang__) && __GNUC__ >= 6
109
110
#  pragma GCC diagnostic pop
#endif
111
112
113
114
115
116
            if (!std::is_trivially_destructible<Func>::value)
                rec->free_data = [](detail::function_record *r) { ((capture *) &r->data)->~capture(); };
        } else {
            rec->data[0] = new capture { std::forward<Func>(f) };
            rec->free_data = [](detail::function_record *r) { delete ((capture *) r->data[0]); };
        }
117

118
        /* Type casters for the function arguments and return value */
119
120
121
122
        using cast_in = detail::argument_loader<Args...>;
        using cast_out = detail::make_caster<
            detail::conditional_t<std::is_void<Return>::value, detail::void_type, Return>
        >;
Wenzel Jakob's avatar
Wenzel Jakob committed
123

124
125
126
        static_assert(detail::expected_num_args<Extra...>(sizeof...(Args), cast_in::has_args, cast_in::has_kwargs),
                      "The number of named arguments does not match the function signature");

127
        /* Dispatch code which converts function arguments and performs the actual function call */
128
        rec->impl = [](detail::function_call &call) -> handle {
129
            cast_in args_converter;
130
131

            /* Try to cast the function arguments into the C++ domain */
132
            if (!args_converter.load_args(call))
133
134
                return PYBIND11_TRY_NEXT_OVERLOAD;

Wenzel Jakob's avatar
Wenzel Jakob committed
135
            /* Invoke call policy pre-call hook */
136
            detail::process_attributes<Extra...>::precall(call);
137
138

            /* Get a pointer to the capture object */
139
140
141
            auto data = (sizeof(capture) <= sizeof(call.func.data)
                         ? &call.func.data : call.func.data[0]);
            capture *cap = const_cast<capture *>(reinterpret_cast<const capture *>(data));
142

143
144
            /* Override policy for rvalues -- usually to enforce rvp::move on an rvalue */
            const auto policy = detail::return_value_policy_override<Return>::policy(call.func.policy);
145

146
            /* Perform the function call */
147
            handle result = cast_out::cast(args_converter.template call<Return>(cap->f),
148
                                           policy, call.parent);
Wenzel Jakob's avatar
Wenzel Jakob committed
149
150

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

153
            return result;
Wenzel Jakob's avatar
Wenzel Jakob committed
154
155
        };

Wenzel Jakob's avatar
Wenzel Jakob committed
156
157
        /* Process any user-provided function attributes */
        detail::process_attributes<Extra...>::init(extra..., rec);
158
159

        /* Generate a readable signature describing the function's arguments and return value types */
160
        using detail::descr; using detail::_;
161
        PYBIND11_DESCR signature = _("(") + cast_in::arg_names() + _(") -> ") + cast_out::name();
162
163

        /* Register the function with Python from generic (non-templated) code */
164
        initialize_generic(rec, signature.text(), signature.types(), sizeof...(Args));
165
166
167

        if (cast_in::has_args) rec->has_args = true;
        if (cast_in::has_kwargs) rec->has_kwargs = true;
168
169

        /* Stash some additional information used by an important optimization in 'functional.h' */
170
        using FunctionType = Return (*)(Args...);
171
172
173
174
175
        constexpr bool is_function_ptr =
            std::is_convertible<Func, FunctionType>::value &&
            sizeof(capture) == sizeof(void *);
        if (is_function_ptr) {
            rec->is_stateless = true;
176
            rec->data[1] = const_cast<void *>(reinterpret_cast<const void *>(&typeid(FunctionType)));
177
        }
178
179
    }

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

184
        /* Create copies of all referenced C-style strings */
Wenzel Jakob's avatar
Wenzel Jakob committed
185
186
187
        rec->name = strdup(rec->name ? rec->name : "");
        if (rec->doc) rec->doc = strdup(rec->doc);
        for (auto &a: rec->args) {
188
189
190
191
192
            if (a.name)
                a.name = strdup(a.name);
            if (a.descr)
                a.descr = strdup(a.descr);
            else if (a.value)
193
                a.descr = strdup(a.value.attr("__repr__")().cast<std::string>().c_str());
194
        }
195

196
197
198
199
200
201
202
203
204
        /* Generate a proper function signature */
        std::string signature;
        size_t type_depth = 0, char_index = 0, type_index = 0, arg_index = 0;
        while (true) {
            char c = text[char_index++];
            if (c == '\0')
                break;

            if (c == '{') {
205
                // Write arg name for everything except *args, **kwargs and return type.
206
                if (type_depth == 0 && text[char_index] != '*' && arg_index < args) {
207
                    if (!rec->args.empty() && rec->args[arg_index].name) {
208
                        signature += rec->args[arg_index].name;
209
                    } else if (arg_index == 0 && rec->is_method) {
210
211
                        signature += "self";
                    } else {
212
                        signature += "arg" + std::to_string(arg_index - (rec->is_method ? 1 : 0));
213
214
                    }
                    signature += ": ";
215
216
217
218
                }
                ++type_depth;
            } else if (c == '}') {
                --type_depth;
219
                if (type_depth == 0) {
220
221
                    if (arg_index < rec->args.size() && rec->args[arg_index].descr) {
                        signature += "=";
Wenzel Jakob's avatar
Wenzel Jakob committed
222
                        signature += rec->args[arg_index].descr;
223
224
225
226
227
                    }
                    arg_index++;
                }
            } else if (c == '%') {
                const std::type_info *t = types[type_index++];
228
                if (!t)
229
                    pybind11_fail("Internal error while parsing type signature (1)");
230
                if (auto tinfo = detail::get_type_info(*t)) {
Wenzel Jakob's avatar
Wenzel Jakob committed
231
232
233
234
235
#if defined(PYPY_VERSION)
                    signature += handle((PyObject *) tinfo->type)
                                     .attr("__module__")
                                     .cast<std::string>() + ".";
#endif
236
                    signature += tinfo->type->tp_name;
237
238
239
240
241
242
243
244
245
                } else {
                    std::string tname(t->name());
                    detail::clean_type_id(tname);
                    signature += tname;
                }
            } else {
                signature += c;
            }
        }
246
        if (type_depth != 0 || types[type_index] != nullptr)
247
            pybind11_fail("Internal error while parsing type signature (2)");
248
249
250
251
252

        #if !defined(PYBIND11_CPP14)
            delete[] types;
            delete[] text;
        #endif
253

254
#if PY_MAJOR_VERSION < 3
Wenzel Jakob's avatar
Wenzel Jakob committed
255
256
257
        if (strcmp(rec->name, "__next__") == 0) {
            std::free(rec->name);
            rec->name = strdup("next");
258
259
260
        } else if (strcmp(rec->name, "__bool__") == 0) {
            std::free(rec->name);
            rec->name = strdup("__nonzero__");
261
        }
262
#endif
Wenzel Jakob's avatar
Wenzel Jakob committed
263
264
        rec->signature = strdup(signature.c_str());
        rec->args.shrink_to_fit();
265
        rec->is_constructor = !strcmp(rec->name, "__init__") || !strcmp(rec->name, "__setstate__");
266
        rec->nargs = (std::uint16_t) args;
267
268

#if PY_MAJOR_VERSION < 3
Wenzel Jakob's avatar
Wenzel Jakob committed
269
270
        if (rec->sibling && PyMethod_Check(rec->sibling.ptr()))
            rec->sibling = PyMethod_GET_FUNCTION(rec->sibling.ptr());
271
#endif
272

Wenzel Jakob's avatar
Wenzel Jakob committed
273
        detail::function_record *chain = nullptr, *chain_start = rec;
274
275
        if (rec->sibling) {
            if (PyCFunction_Check(rec->sibling.ptr())) {
Wenzel Jakob's avatar
Wenzel Jakob committed
276
                auto rec_capsule = reinterpret_borrow<capsule>(PyCFunction_GET_SELF(rec->sibling.ptr()));
277
278
279
                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 */
280
                if (chain->scope != rec->scope)
281
282
283
284
285
286
                    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");
287
288
        }

Wenzel Jakob's avatar
Wenzel Jakob committed
289
        if (!chain) {
290
            /* No existing overload was found, create a new function object */
Wenzel Jakob's avatar
Wenzel Jakob committed
291
292
293
294
295
            rec->def = new PyMethodDef();
            memset(rec->def, 0, sizeof(PyMethodDef));
            rec->def->ml_name = rec->name;
            rec->def->ml_meth = reinterpret_cast<PyCFunction>(*dispatcher);
            rec->def->ml_flags = METH_VARARGS | METH_KEYWORDS;
296

Wenzel Jakob's avatar
Wenzel Jakob committed
297
298
            capsule rec_capsule(rec, [](PyObject *o) {
                destruct((detail::function_record *) PyCapsule_GetPointer(o, nullptr));
299
            });
300
301
302

            object scope_module;
            if (rec->scope) {
303
304
305
306
307
                if (hasattr(rec->scope, "__module__")) {
                    scope_module = rec->scope.attr("__module__");
                } else if (hasattr(rec->scope, "__name__")) {
                    scope_module = rec->scope.attr("__name__");
                }
308
309
310
            }

            m_ptr = PyCFunction_NewEx(rec->def, rec_capsule.ptr(), scope_module.ptr());
Wenzel Jakob's avatar
Wenzel Jakob committed
311
            if (!m_ptr)
312
                pybind11_fail("cpp_function::cpp_function(): Could not allocate function object");
Wenzel Jakob's avatar
Wenzel Jakob committed
313
        } else {
314
            /* Append at the end of the overload chain */
Wenzel Jakob's avatar
Wenzel Jakob committed
315
            m_ptr = rec->sibling.ptr();
Wenzel Jakob's avatar
Wenzel Jakob committed
316
            inc_ref();
Wenzel Jakob's avatar
Wenzel Jakob committed
317
318
319
320
            chain_start = chain;
            while (chain->next)
                chain = chain->next;
            chain->next = rec;
Wenzel Jakob's avatar
Wenzel Jakob committed
321
        }
322

Wenzel Jakob's avatar
Wenzel Jakob committed
323
        std::string signatures;
324
        int index = 0;
Wenzel Jakob's avatar
Wenzel Jakob committed
325
        /* Create a nice pydoc rec including all signatures and
326
           docstrings of the functions in the overload chain */
327
        if (chain && options::show_function_signatures()) {
328
329
330
331
332
333
            // First a generic signature
            signatures += rec->name;
            signatures += "(*args, **kwargs)\n";
            signatures += "Overloaded function.\n\n";
        }
        // Then specific overload signatures
334
        bool first_user_def = true;
Wenzel Jakob's avatar
Wenzel Jakob committed
335
        for (auto it = chain_start; it != nullptr; it = it->next) {
336
            if (options::show_function_signatures()) {
337
                if (index > 0) signatures += "\n";
338
339
340
341
                if (chain)
                    signatures += std::to_string(++index) + ". ";
                signatures += rec->name;
                signatures += it->signature;
342
                signatures += "\n";
343
344
            }
            if (it->doc && strlen(it->doc) > 0 && options::show_user_defined_docstrings()) {
345
346
347
348
349
350
                // 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";
                }
351
                if (options::show_function_signatures()) signatures += "\n";
352
                signatures += it->doc;
353
                if (options::show_function_signatures()) signatures += "\n";
354
            }
Wenzel Jakob's avatar
Wenzel Jakob committed
355
        }
Wenzel Jakob's avatar
Wenzel Jakob committed
356
357

        /* Install docstring */
Wenzel Jakob's avatar
Wenzel Jakob committed
358
359
        PyCFunctionObject *func = (PyCFunctionObject *) m_ptr;
        if (func->m_ml->ml_doc)
360
            std::free(const_cast<char *>(func->m_ml->ml_doc));
Wenzel Jakob's avatar
Wenzel Jakob committed
361
        func->m_ml->ml_doc = strdup(signatures.c_str());
Wenzel Jakob's avatar
Wenzel Jakob committed
362

363
364
        if (rec->is_method) {
            m_ptr = PYBIND11_INSTANCE_METHOD_NEW(m_ptr, rec->scope.ptr());
Wenzel Jakob's avatar
Wenzel Jakob committed
365
            if (!m_ptr)
366
                pybind11_fail("cpp_function::cpp_function(): Could not allocate instance method object");
Wenzel Jakob's avatar
Wenzel Jakob committed
367
368
369
            Py_DECREF(func);
        }
    }
Wenzel Jakob's avatar
Wenzel Jakob committed
370
371
372
373
374
375

    /// When a cpp_function is GCed, release any memory allocated by pybind11
    static void destruct(detail::function_record *rec) {
        while (rec) {
            detail::function_record *next = rec->next;
            if (rec->free_data)
376
                rec->free_data(rec);
Wenzel Jakob's avatar
Wenzel Jakob committed
377
378
379
380
            std::free((char *) rec->name);
            std::free((char *) rec->doc);
            std::free((char *) rec->signature);
            for (auto &arg: rec->args) {
381
382
                std::free(const_cast<char *>(arg.name));
                std::free(const_cast<char *>(arg.descr));
Wenzel Jakob's avatar
Wenzel Jakob committed
383
384
385
                arg.value.dec_ref();
            }
            if (rec->def) {
386
                std::free(const_cast<char *>(rec->def->ml_doc));
Wenzel Jakob's avatar
Wenzel Jakob committed
387
388
389
390
391
392
393
394
                delete rec->def;
            }
            delete rec;
            rec = next;
        }
    }

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

Wenzel Jakob's avatar
Wenzel Jakob committed
398
        /* Iterator over the list of potentially admissible overloads */
399
400
        function_record *overloads = (function_record *) PyCapsule_GetPointer(self, nullptr),
                        *it = overloads;
Wenzel Jakob's avatar
Wenzel Jakob committed
401
402

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

405
        handle parent = n_args_in > 0 ? PyTuple_GET_ITEM(args_in, 0) : nullptr,
Wenzel Jakob's avatar
Wenzel Jakob committed
406
               result = PYBIND11_TRY_NEXT_OVERLOAD;
407

Wenzel Jakob's avatar
Wenzel Jakob committed
408
        try {
409
410
411
412
413
414
415
416
417
            // 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
418
            for (; it != nullptr; it = it->next) {
419

Wenzel Jakob's avatar
Wenzel Jakob committed
420
                /* For each overload:
421
422
                   1. Copy all positional arguments we were given, also checking to make sure that
                      named positional arguments weren't *also* specified via kwarg.
423
                   2. If we weren't given enough, try to make up the omitted ones by checking
424
425
426
427
428
429
430
431
432
433
434
435
436
                      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
437
438
                 */

439
440
441
442
                function_record &func = *it;
                size_t pos_args = func.nargs;    // Number of positional arguments that we need
                if (func.has_args) --pos_args;   // (but don't count py::args
                if (func.has_kwargs) --pos_args; //  or py::kwargs)
Wenzel Jakob's avatar
Wenzel Jakob committed
443

444
                if (!func.has_args && n_args_in > pos_args)
445
446
                    continue; // Too many arguments for this overload

447
                if (n_args_in < pos_args && func.args.size() < pos_args)
448
449
                    continue; // Not enough arguments given, and not enough defaults to fill in the blanks

450
                function_call call(func, parent);
Wenzel Jakob's avatar
Wenzel Jakob committed
451

452
453
454
455
                size_t args_to_copy = std::min(pos_args, n_args_in);
                size_t args_copied = 0;

                // 1. Copy any position arguments given.
456
                bool bad_kwarg = false;
457
                for (; args_copied < args_to_copy; ++args_copied) {
458
459
460
461
                    if (kwargs_in && args_copied < func.args.size() && func.args[args_copied].name
                            && PyDict_GetItemString(kwargs_in, func.args[args_copied].name)) {
                        bad_kwarg = true;
                        break;
462
463
                    }

464
                    call.args.push_back(PyTuple_GET_ITEM(args_in, args_copied));
465
                    call.args_convert.push_back(args_copied < func.args.size() ? func.args[args_copied].convert : true);
466
                }
467
468
                if (bad_kwarg)
                    continue; // Maybe it was meant for another overload (issue #688)
469
470
471
472
473
474
475
476
477

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

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

                    for (; args_copied < pos_args; ++args_copied) {
478
                        const auto &arg = func.args[args_copied];
479
480

                        handle value;
481
                        if (kwargs_in && arg.name)
482
                            value = PyDict_GetItemString(kwargs.ptr(), arg.name);
Wenzel Jakob's avatar
Wenzel Jakob committed
483
484

                        if (value) {
485
486
487
488
489
490
                            // Consume a kwargs value
                            if (!copied_kwargs) {
                                kwargs = reinterpret_steal<dict>(PyDict_Copy(kwargs.ptr()));
                                copied_kwargs = true;
                            }
                            PyDict_DelItemString(kwargs.ptr(), arg.name);
491
                        } else if (arg.value) {
492
493
494
                            value = arg.value;
                        }

495
                        if (value) {
496
                            call.args.push_back(value);
497
498
                            call.args_convert.push_back(arg.convert);
                        }
499
                        else
Wenzel Jakob's avatar
Wenzel Jakob committed
500
                            break;
501
502
503
504
505
506
507
                    }

                    if (args_copied < pos_args)
                        continue; // Not enough arguments, defaults, or kwargs to fill the positional arguments
                }

                // 3. Check everything was consumed (unless we have a kwargs arg)
508
                if (kwargs && kwargs.size() > 0 && !func.has_kwargs)
509
510
511
512
                    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
                tuple extra_args;
513
                if (func.has_args) {
514
515
516
517
                    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);
518
                    } else if (args_copied >= n_args_in) {
519
                        extra_args = tuple(0);
520
                    } else {
521
522
523
524
525
                        size_t args_size = n_args_in - args_copied;
                        extra_args = tuple(args_size);
                        for (size_t i = 0; i < args_size; ++i) {
                            handle item = PyTuple_GET_ITEM(args_in, args_copied + i);
                            extra_args[i] = item.inc_ref().ptr();
Wenzel Jakob's avatar
Wenzel Jakob committed
526
527
                        }
                    }
528
                    call.args.push_back(extra_args);
529
                    call.args_convert.push_back(false);
Wenzel Jakob's avatar
Wenzel Jakob committed
530
                }
531

532
                // 4b. If we have a py::kwargs, pass on any remaining kwargs
533
                if (func.has_kwargs) {
534
535
                    if (!kwargs.ptr())
                        kwargs = dict(); // If we didn't get one, send an empty one
536
                    call.args.push_back(kwargs);
537
                    call.args_convert.push_back(false);
538
539
                }

540
541
542
                // 5. Put everything in a vector.  Not technically step 5, we've been building it
                // in `call.args` all along.
                #if !defined(NDEBUG)
543
                if (call.args.size() != func.nargs || call.args_convert.size() != func.nargs)
544
545
                    pybind11_fail("Internal error: function call dispatcher inserted wrong number of arguments!");
                #endif
546

547
548
549
550
551
552
553
554
555
                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);
                }

556
                // 6. Call the function.
557
                try {
558
                    result = func.impl(call);
559
                } catch (reference_cast_error &) {
560
561
                    result = PYBIND11_TRY_NEXT_OVERLOAD;
                }
Wenzel Jakob's avatar
Wenzel Jakob committed
562
563
564

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

566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
                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 {
                        result = call.func.impl(call);
                    } catch (reference_cast_error &) {
                        result = PYBIND11_TRY_NEXT_OVERLOAD;
                    }

                    if (result.ptr() != PYBIND11_TRY_NEXT_OVERLOAD)
                        break;
                }
Wenzel Jakob's avatar
Wenzel Jakob committed
594
            }
595
596
        } catch (error_already_set &e) {
            e.restore();
597
            return nullptr;
Wenzel Jakob's avatar
Wenzel Jakob committed
598
        } catch (...) {
599
600
601
            /* When an exception is caught, give each registered exception
               translator a chance to translate it to a Python exception
               in reverse order of registration.
602

603
               A translator may choose to do one of the following:
604

605
606
607
608
609
                - 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. */

610
            auto last_exception = std::current_exception();
611
            auto &registered_exception_translators = get_internals().registered_exception_translators;
612
613
614
615
616
617
618
619
620
621
            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
622
623
624
625
            return nullptr;
        }

        if (result.ptr() == PYBIND11_TRY_NEXT_OVERLOAD) {
626
627
628
            if (overloads->is_operator)
                return handle(Py_NotImplemented).inc_ref().ptr();

629
630
631
632
            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
633
            int ctr = 0;
634
            for (function_record *it2 = overloads; it2 != nullptr; it2 = it2->next) {
Wenzel Jakob's avatar
Wenzel Jakob committed
635
                msg += "    "+ std::to_string(++ctr) + ". ";
636
637
638

                bool wrote_sig = false;
                if (overloads->is_constructor) {
639
                    // For a constructor, rewrite `(self: Object, arg0, ...) -> NoneType` as `Object(arg0, ...)`
640
                    std::string sig = it2->signature;
641
                    size_t start = sig.find('(') + 7; // skip "(self: "
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
                    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
658
659
                msg += "\n";
            }
660
            msg += "\nInvoked with: ";
661
            auto args_ = reinterpret_borrow<tuple>(args_in);
662
            bool some_args = false;
663
            for (size_t ti = overloads->is_constructor ? 1 : 0; ti < args_.size(); ++ti) {
664
665
                if (!some_args) some_args = true;
                else msg += ", ";
666
                msg += pybind11::repr(args_[ti]);
667
            }
668
669
670
671
672
673
674
675
676
677
678
679
680
681
            if (kwargs_in) {
                auto kwargs = reinterpret_borrow<dict>(kwargs_in);
                if (kwargs.size() > 0) {
                    if (some_args) msg += "; ";
                    msg += "kwargs: ";
                    bool first = true;
                    for (auto kwarg : kwargs) {
                        if (first) first = false;
                        else msg += ", ";
                        msg += pybind11::str("{}={!r}").format(kwarg.first, kwarg.second);
                    }
                }
            }

Wenzel Jakob's avatar
Wenzel Jakob committed
682
683
684
685
686
687
688
689
690
691
            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;
            PyErr_SetString(PyExc_TypeError, msg.c_str());
            return nullptr;
        } else {
            if (overloads->is_constructor) {
692
                /* When a constructor ran successfully, the corresponding
Wenzel Jakob's avatar
Wenzel Jakob committed
693
                   holder type (e.g. std::unique_ptr) must still be initialized. */
694
                auto tinfo = get_type_info(Py_TYPE(parent.ptr()));
695
                tinfo->init_holder(parent.ptr(), nullptr);
Wenzel Jakob's avatar
Wenzel Jakob committed
696
697
698
699
            }
            return result.ptr();
        }
    }
Wenzel Jakob's avatar
Wenzel Jakob committed
700
701
};

702
/// Wrapper for Python extension modules
Wenzel Jakob's avatar
Wenzel Jakob committed
703
704
class module : public object {
public:
705
    PYBIND11_OBJECT_DEFAULT(module, object, PyModule_Check)
Wenzel Jakob's avatar
Wenzel Jakob committed
706

707
    /// Create a new top-level Python module with the given name and docstring
708
    explicit module(const char *name, const char *doc = nullptr) {
709
        if (!options::show_user_defined_docstrings()) doc = nullptr;
710
#if PY_MAJOR_VERSION >= 3
Wenzel Jakob's avatar
Wenzel Jakob committed
711
712
713
714
715
716
717
        PyModuleDef *def = new PyModuleDef();
        memset(def, 0, sizeof(PyModuleDef));
        def->m_name = name;
        def->m_doc = doc;
        def->m_size = -1;
        Py_INCREF(def);
        m_ptr = PyModule_Create(def);
718
719
720
#else
        m_ptr = Py_InitModule3(name, nullptr, doc);
#endif
Wenzel Jakob's avatar
Wenzel Jakob committed
721
        if (m_ptr == nullptr)
722
            pybind11_fail("Internal error in module::module()");
Wenzel Jakob's avatar
Wenzel Jakob committed
723
724
725
        inc_ref();
    }

726
727
728
729
730
    /** \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 */
731
    template <typename Func, typename... Extra>
Wenzel Jakob's avatar
Wenzel Jakob committed
732
    module &def(const char *name_, Func &&f, const Extra& ... extra) {
733
734
        cpp_function func(std::forward<Func>(f), name(name_), scope(*this),
                          sibling(getattr(*this, name_, none())), extra...);
735
736
737
        // 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
738
739
740
        return *this;
    }

741
742
743
744
745
746
747
748
749
750
    /** \rst
        Create and return a new Python submodule with the given name and docstring.
        This also works recursively, i.e.

        .. code-block:: cpp

            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'");
    \endrst */
751
    module def_submodule(const char *name, const char *doc = nullptr) {
Wenzel Jakob's avatar
Wenzel Jakob committed
752
753
        std::string full_name = std::string(PyModule_GetName(m_ptr))
            + std::string(".") + std::string(name);
754
        auto result = reinterpret_borrow<module>(PyImport_AddModule(full_name.c_str()));
755
        if (doc && options::show_user_defined_docstrings())
756
            result.attr("__doc__") = pybind11::str(doc);
Wenzel Jakob's avatar
Wenzel Jakob committed
757
758
759
        attr(name) = result;
        return result;
    }
Wenzel Jakob's avatar
Wenzel Jakob committed
760

761
    /// Import and return a module or throws `error_already_set`.
Wenzel Jakob's avatar
Wenzel Jakob committed
762
    static module import(const char *name) {
763
764
        PyObject *obj = PyImport_ImportModule(name);
        if (!obj)
765
            throw error_already_set();
766
        return reinterpret_steal<module>(obj);
Wenzel Jakob's avatar
Wenzel Jakob committed
767
    }
768
769
770
771
772
773
774
775
776
777
778
779
780
781

    // 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.
    PYBIND11_NOINLINE void add_object(const char *name, object &obj, bool overwrite = false) {
        if (!overwrite && hasattr(*this, name))
            pybind11_fail("Error during initialization: multiple incompatible definitions with name \"" +
                    std::string(name) + "\"");

        obj.inc_ref(); // PyModule_AddObject() steals a reference
        PyModule_AddObject(ptr(), name, obj.ptr());
    }
Wenzel Jakob's avatar
Wenzel Jakob committed
782
783
784
};

NAMESPACE_BEGIN(detail)
Wenzel Jakob's avatar
Wenzel Jakob committed
785
/// Generic support for creating new Python heap types
786
class generic_type : public object {
787
    template <typename...> friend class class_;
Wenzel Jakob's avatar
Wenzel Jakob committed
788
public:
789
    PYBIND11_OBJECT_DEFAULT(generic_type, object, PyType_Check)
Wenzel Jakob's avatar
Wenzel Jakob committed
790
protected:
791
792
793
794
    void initialize(const type_record &rec) {
        if (rec.scope && hasattr(rec.scope, rec.name))
            pybind11_fail("generic_type: cannot initialize type \"" + std::string(rec.name) +
                          "\": an object with that name is already defined");
795

796
797
        if (get_type_info(*rec.type))
            pybind11_fail("generic_type: type \"" + std::string(rec.name) +
798
799
                          "\" is already registered!");

800
        m_ptr = make_new_python_type(rec);
801
802

        /* Register supplemental type information in C++ dict */
803
804
805
806
807
808
809
810
        auto *tinfo = new detail::type_info();
        tinfo->type = (PyTypeObject *) m_ptr;
        tinfo->type_size = rec.type_size;
        tinfo->init_holder = rec.init_holder;
        tinfo->dealloc = rec.dealloc;

        auto &internals = get_internals();
        auto tindex = std::type_index(*rec.type);
811
        tinfo->direct_conversions = &internals.direct_conversions[tindex];
812
        tinfo->default_holder = rec.default_holder;
813
        internals.registered_types_cpp[tindex] = tinfo;
814
        internals.registered_types_py[m_ptr] = tinfo;
Wenzel Jakob's avatar
Wenzel Jakob committed
815

816
817
        if (rec.bases.size() > 1 || rec.multiple_inheritance)
            mark_parents_nonsimple(tinfo->type);
Wenzel Jakob's avatar
Wenzel Jakob committed
818
819
    }

Wenzel Jakob's avatar
Wenzel Jakob committed
820
821
    /// Helper function which tags all parents of a type using mult. inheritance
    void mark_parents_nonsimple(PyTypeObject *value) {
822
        auto t = reinterpret_borrow<tuple>(value->tp_bases);
Wenzel Jakob's avatar
Wenzel Jakob committed
823
824
825
826
827
828
829
830
        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
831
832
833
    void install_buffer_funcs(
            buffer_info *(*get_buffer)(PyObject *, void *),
            void *get_buffer_data) {
Wenzel Jakob's avatar
Wenzel Jakob committed
834
        PyHeapTypeObject *type = (PyHeapTypeObject*) m_ptr;
835
        auto tinfo = detail::get_type_info(&type->ht_type);
Wenzel Jakob's avatar
Wenzel Jakob committed
836
837
838
839
840
841
842
843

        if (!type->ht_type.tp_as_buffer)
            pybind11_fail(
                "To be able to register buffer protocol support for the type '" +
                std::string(tinfo->type->tp_name) +
                "' the associated class<>(..) invocation must "
                "include the pybind11::buffer_protocol() annotation!");

844
845
        tinfo->get_buffer = get_buffer;
        tinfo->get_buffer_data = get_buffer_data;
Wenzel Jakob's avatar
Wenzel Jakob committed
846
847
    }

Wenzel Jakob's avatar
Wenzel Jakob committed
848
849
850
    void def_property_static_impl(const char *name,
                                  handle fget, handle fset,
                                  detail::function_record *rec_fget) {
851
852
853
854
855
856
857
858
859
        const auto is_static = !(rec_fget->is_method && rec_fget->scope);
        const auto has_doc = rec_fget->doc && pybind11::options::show_user_defined_docstrings();

        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(),
                              pybind11::str(has_doc ? rec_fget->doc : ""));
Wenzel Jakob's avatar
Wenzel Jakob committed
860
    }
Wenzel Jakob's avatar
Wenzel Jakob committed
861
};
862

Wenzel Jakob's avatar
Wenzel Jakob committed
863
864
NAMESPACE_END(detail)

865
template <typename type_, typename... options>
Wenzel Jakob's avatar
Wenzel Jakob committed
866
class class_ : public detail::generic_type {
867
868
    template <typename T> using is_holder = detail::is_holder_type<type_, T>;
    template <typename T> using is_subtype = detail::bool_constant<std::is_base_of<type_, T>::value && !std::is_same<T, type_>::value>;
Wenzel Jakob's avatar
Wenzel Jakob committed
869
    template <typename T> using is_base = detail::bool_constant<std::is_base_of<T, type_>::value && !std::is_same<T, type_>::value>;
870
871
872
    // 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>> {};
873

Wenzel Jakob's avatar
Wenzel Jakob committed
874
public:
875
    using type = type_;
876
    using type_alias = detail::first_of_t<is_subtype, void, options...>;
877
    constexpr static bool has_alias = !std::is_void<type_alias>::value;
878
    using holder_type = detail::first_of_t<is_holder, std::unique_ptr<type>, options...>;
879
880
    using instance_type = detail::instance<type, holder_type>;

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

884
    PYBIND11_OBJECT(class_, generic_type, PyType_Check)
Wenzel Jakob's avatar
Wenzel Jakob committed
885

Wenzel Jakob's avatar
Wenzel Jakob committed
886
887
    template <typename... Extra>
    class_(handle scope, const char *name, const Extra &... extra) {
888
889
890
891
892
893
894
895
896
897
898
        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
899
900
901
        record.scope = scope;
        record.name = name;
        record.type = &typeid(type);
902
        record.type_size = sizeof(conditional_t<has_alias, type_alias, type>);
Wenzel Jakob's avatar
Wenzel Jakob committed
903
904
905
        record.instance_size = sizeof(instance_type);
        record.init_holder = init_holder;
        record.dealloc = dealloc;
906
        record.default_holder = std::is_same<holder_type, std::unique_ptr<type>>::value;
Wenzel Jakob's avatar
Wenzel Jakob committed
907

Wenzel Jakob's avatar
Wenzel Jakob committed
908
        /* Register base classes specified via template arguments to class_, if any */
909
        bool unused[] = { (add_base<options>(record), false)..., false };
Wenzel Jakob's avatar
Wenzel Jakob committed
910
        (void) unused;
911

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

915
        generic_type::initialize(record);
916

917
        if (has_alias) {
918
            auto &instances = get_internals().registered_types_cpp;
919
920
            instances[std::type_index(typeid(type_alias))] = instances[std::type_index(typeid(type))];
        }
Wenzel Jakob's avatar
Wenzel Jakob committed
921
    }
Wenzel Jakob's avatar
Wenzel Jakob committed
922

923
    template <typename Base, detail::enable_if_t<is_base<Base>::value, int> = 0>
Wenzel Jakob's avatar
Wenzel Jakob committed
924
925
926
927
928
929
    static void add_base(detail::type_record &rec) {
        rec.add_base(&typeid(Base), [](void *src) -> void * {
            return static_cast<Base *>(reinterpret_cast<type *>(src));
        });
    }

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

933
    template <typename Func, typename... Extra>
Wenzel Jakob's avatar
Wenzel Jakob committed
934
    class_ &def(const char *name_, Func&& f, const Extra&... extra) {
935
936
        cpp_function cf(std::forward<Func>(f), name(name_), is_method(*this),
                        sibling(getattr(*this, name_, none())), extra...);
937
        attr(cf.name()) = cf;
Wenzel Jakob's avatar
Wenzel Jakob committed
938
939
940
        return *this;
    }

941
    template <typename Func, typename... Extra> class_ &
942
943
944
    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");
945
946
        cpp_function cf(std::forward<Func>(f), name(name_), scope(*this),
                        sibling(getattr(*this, name_, none())), extra...);
947
        attr(cf.name()) = cf;
Wenzel Jakob's avatar
Wenzel Jakob committed
948
949
950
        return *this;
    }

951
    template <detail::op_id id, detail::op_type ot, typename L, typename R, typename... Extra>
Wenzel Jakob's avatar
Wenzel Jakob committed
952
    class_ &def(const detail::op_<id, ot, L, R> &op, const Extra&... extra) {
953
        op.execute(*this, extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
954
955
956
        return *this;
    }

957
    template <detail::op_id id, detail::op_type ot, typename L, typename R, typename... Extra>
Wenzel Jakob's avatar
Wenzel Jakob committed
958
    class_ & def_cast(const detail::op_<id, ot, L, R> &op, const Extra&... extra) {
959
        op.execute_cast(*this, extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
960
961
962
        return *this;
    }

963
    template <typename... Args, typename... Extra>
Wenzel Jakob's avatar
Wenzel Jakob committed
964
    class_ &def(const detail::init<Args...> &init, const Extra&... extra) {
965
        init.execute(*this, extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
966
967
968
        return *this;
    }

969
970
    template <typename... Args, typename... Extra>
    class_ &def(const detail::init_alias<Args...> &init, const Extra&... extra) {
971
        init.execute(*this, extra...);
972
973
974
        return *this;
    }

975
    template <typename Func> class_& def_buffer(Func &&func) {
Wenzel Jakob's avatar
Wenzel Jakob committed
976
977
978
        struct capture { Func func; };
        capture *ptr = new capture { std::forward<Func>(func) };
        install_buffer_funcs([](PyObject *obj, void *ptr) -> buffer_info* {
979
            detail::make_caster<type> caster;
Wenzel Jakob's avatar
Wenzel Jakob committed
980
981
            if (!caster.load(obj, false))
                return nullptr;
Wenzel Jakob's avatar
Wenzel Jakob committed
982
983
            return new buffer_info(((capture *) ptr)->func(caster));
        }, ptr);
Wenzel Jakob's avatar
Wenzel Jakob committed
984
985
986
        return *this;
    }

987
    template <typename C, typename D, typename... Extra>
Wenzel Jakob's avatar
Wenzel Jakob committed
988
    class_ &def_readwrite(const char *name, D C::*pm, const Extra&... extra) {
989
990
991
        cpp_function fget([pm](const C &c) -> const D &{ return c.*pm; }, is_method(*this)),
                     fset([pm](C &c, const D &value) { c.*pm = value; }, is_method(*this));
        def_property(name, fget, fset, return_value_policy::reference_internal, extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
992
993
994
        return *this;
    }

995
    template <typename C, typename D, typename... Extra>
Wenzel Jakob's avatar
Wenzel Jakob committed
996
    class_ &def_readonly(const char *name, const D C::*pm, const Extra& ...extra) {
997
998
        cpp_function fget([pm](const C &c) -> const D &{ return c.*pm; }, is_method(*this));
        def_property_readonly(name, fget, return_value_policy::reference_internal, extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
999
1000
1001
        return *this;
    }

1002
    template <typename D, typename... Extra>
Wenzel Jakob's avatar
Wenzel Jakob committed
1003
    class_ &def_readwrite_static(const char *name, D *pm, const Extra& ...extra) {
1004
1005
1006
        cpp_function fget([pm](object) -> const D &{ return *pm; }, scope(*this)),
                     fset([pm](object, const D &value) { *pm = value; }, scope(*this));
        def_property_static(name, fget, fset, return_value_policy::reference, extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
1007
1008
1009
        return *this;
    }

1010
    template <typename D, typename... Extra>
Wenzel Jakob's avatar
Wenzel Jakob committed
1011
    class_ &def_readonly_static(const char *name, const D *pm, const Extra& ...extra) {
1012
1013
        cpp_function fget([pm](object) -> const D &{ return *pm; }, scope(*this));
        def_property_readonly_static(name, fget, return_value_policy::reference, extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
1014
1015
1016
        return *this;
    }

1017
1018
1019
1020
1021
1022
1023
    /// 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) {
        return def_property_readonly(name, cpp_function(fget), return_value_policy::reference_internal, extra...);
    }

    /// Uses cpp_function's return_value_policy by default
1024
1025
    template <typename... Extra>
    class_ &def_property_readonly(const char *name, const cpp_function &fget, const Extra& ...extra) {
1026
1027
1028
1029
1030
1031
1032
        return def_property(name, fget, cpp_function(), extra...);
    }

    /// 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
1033
1034
    }

1035
    /// Uses cpp_function's return_value_policy by default
1036
1037
    template <typename... Extra>
    class_ &def_property_readonly_static(const char *name, const cpp_function &fget, const Extra& ...extra) {
1038
1039
1040
1041
1042
1043
1044
        return def_property_static(name, fget, cpp_function(), extra...);
    }

    /// Uses return_value_policy::reference_internal by default
    template <typename Getter, typename... Extra>
    class_ &def_property(const char *name, const Getter &fget, const cpp_function &fset, const Extra& ...extra) {
        return def_property(name, cpp_function(fget), fset, return_value_policy::reference_internal, extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
1045
1046
    }

1047
    /// Uses cpp_function's return_value_policy by default
1048
1049
    template <typename... Extra>
    class_ &def_property(const char *name, const cpp_function &fget, const cpp_function &fset, const Extra& ...extra) {
1050
        return def_property_static(name, fget, fset, is_method(*this), extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
1051
1052
    }

1053
1054
1055
1056
1057
1058
1059
    /// 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
1060
1061
1062
    template <typename... Extra>
    class_ &def_property_static(const char *name, const cpp_function &fget, const cpp_function &fset, const Extra& ...extra) {
        auto rec_fget = get_function_record(fget), rec_fset = get_function_record(fset);
1063
        char *doc_prev = rec_fget->doc; /* 'extra' field may include a property-specific documentation string */
1064
        detail::process_attributes<Extra...>::init(extra..., rec_fget);
1065
1066
1067
1068
1069
1070
        if (rec_fget->doc && rec_fget->doc != doc_prev) {
            free(doc_prev);
            rec_fget->doc = strdup(rec_fget->doc);
        }
        if (rec_fset) {
            doc_prev = rec_fset->doc;
1071
            detail::process_attributes<Extra...>::init(extra..., rec_fset);
1072
1073
1074
1075
1076
            if (rec_fset->doc && rec_fset->doc != doc_prev) {
                free(doc_prev);
                rec_fset->doc = strdup(rec_fset->doc);
            }
        }
Wenzel Jakob's avatar
Wenzel Jakob committed
1077
        def_property_static_impl(name, fget, fset, rec_fget);
Wenzel Jakob's avatar
Wenzel Jakob committed
1078
1079
        return *this;
    }
1080

Wenzel Jakob's avatar
Wenzel Jakob committed
1081
private:
1082
1083
1084
    /// Initialize holder object, variant 1: object derives from enable_shared_from_this
    template <typename T>
    static void init_holder_helper(instance_type *inst, const holder_type * /* unused */, const std::enable_shared_from_this<T> * /* dummy */) {
1085
        try {
1086
            new (&inst->holder) holder_type(std::static_pointer_cast<typename holder_type::element_type>(inst->value->shared_from_this()));
1087
            inst->holder_constructed = true;
1088
        } catch (const std::bad_weak_ptr &) {
1089
1090
1091
1092
            if (inst->owned) {
                new (&inst->holder) holder_type(inst->value);
                inst->holder_constructed = true;
            }
1093
        }
1094
1095
    }

1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
    static void init_holder_from_existing(instance_type *inst, const holder_type *holder_ptr,
                                          std::true_type /*is_copy_constructible*/) {
        new (&inst->holder) holder_type(*holder_ptr);
    }

    static void init_holder_from_existing(instance_type *inst, const holder_type *holder_ptr,
                                          std::false_type /*is_copy_constructible*/) {
        new (&inst->holder) holder_type(std::move(*const_cast<holder_type *>(holder_ptr)));
    }

1106
1107
    /// Initialize holder object, variant 2: try to construct from existing holder object, if possible
    static void init_holder_helper(instance_type *inst, const holder_type *holder_ptr, const void * /* dummy */) {
1108
        if (holder_ptr) {
1109
            init_holder_from_existing(inst, holder_ptr, std::is_copy_constructible<holder_type>());
1110
            inst->holder_constructed = true;
1111
        } else if (inst->owned || detail::always_construct_holder<holder_type>::value) {
1112
            new (&inst->holder) holder_type(inst->value);
1113
1114
            inst->holder_constructed = true;
        }
1115
1116
1117
1118
1119
1120
    }

    /// Initialize holder object of an instance, possibly given a pointer to an existing holder
    static void init_holder(PyObject *inst_, const void *holder_ptr) {
        auto inst = (instance_type *) inst_;
        init_holder_helper(inst, (const holder_type *) holder_ptr, inst->value);
1121
1122
    }

Wenzel Jakob's avatar
Wenzel Jakob committed
1123
1124
    static void dealloc(PyObject *inst_) {
        instance_type *inst = (instance_type *) inst_;
1125
1126
1127
1128
        if (inst->holder_constructed)
            inst->holder.~holder_type();
        else if (inst->owned)
            ::operator delete(inst->value);
Wenzel Jakob's avatar
Wenzel Jakob committed
1129
    }
1130
1131
1132

    static detail::function_record *get_function_record(handle h) {
        h = detail::get_function(h);
Wenzel Jakob's avatar
Wenzel Jakob committed
1133
        return h ? (detail::function_record *) reinterpret_borrow<capsule>(PyCFunction_GET_SELF(h.ptr()))
1134
                 : nullptr;
1135
    }
Wenzel Jakob's avatar
Wenzel Jakob committed
1136
1137
1138
1139
1140
};

/// Binds C++ enumerations and enumeration classes to Python
template <typename Type> class enum_ : public class_<Type> {
public:
1141
    using class_<Type>::def;
1142
    using class_<Type>::def_property_readonly_static;
1143
1144
1145
    using Scalar = typename std::underlying_type<Type>::type;
    template <typename T> using arithmetic_tag = std::is_same<T, arithmetic>;

Wenzel Jakob's avatar
Wenzel Jakob committed
1146
1147
    template <typename... Extra>
    enum_(const handle &scope, const char *name, const Extra&... extra)
1148
      : class_<Type>(scope, name, extra...), m_entries(), m_parent(scope) {
1149
1150
1151
1152
1153

        constexpr bool is_arithmetic =
            !std::is_same<detail::first_of_t<arithmetic_tag, void, Extra...>,
                          void>::value;

1154
1155
1156
1157
1158
1159
1160
        auto m_entries_ptr = m_entries.inc_ref().ptr();
        def("__repr__", [name, m_entries_ptr](Type value) -> pybind11::str {
            for (const auto &kv : reinterpret_borrow<dict>(m_entries_ptr)) {
                if (pybind11::cast<Type>(kv.second) == value)
                    return pybind11::str("{}.{}").format(name, kv.first);
            }
            return pybind11::str("{}.???").format(name);
Wenzel Jakob's avatar
Wenzel Jakob committed
1161
        });
1162
1163
1164
1165
1166
1167
        def_property_readonly_static("__members__", [m_entries_ptr](object /* self */) {
            dict m;
            for (const auto &kv : reinterpret_borrow<dict>(m_entries_ptr))
                m[kv.first] = kv.second;
            return m;
        }, return_value_policy::copy);
1168
1169
        def("__init__", [](Type& value, Scalar i) { value = (Type)i; });
        def("__int__", [](Type value) { return (Scalar) value; });
1170
1171
        def("__eq__", [](const Type &value, Type *value2) { return value2 && value == *value2; });
        def("__ne__", [](const Type &value, Type *value2) { return !value2 || value != *value2; });
1172
1173
1174
1175
1176
1177
1178
        if (is_arithmetic) {
            def("__lt__", [](const Type &value, Type *value2) { return value2 && value < *value2; });
            def("__gt__", [](const Type &value, Type *value2) { return value2 && value > *value2; });
            def("__le__", [](const Type &value, Type *value2) { return value2 && value <= *value2; });
            def("__ge__", [](const Type &value, Type *value2) { return value2 && value >= *value2; });
        }
        if (std::is_convertible<Type, Scalar>::value) {
1179
1180
            // Don't provide comparison with the underlying type if the enum isn't convertible,
            // i.e. if Type is a scoped enum, mirroring the C++ behaviour.  (NB: we explicitly
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
            // convert Type to Scalar below anyway because this needs to compile).
            def("__eq__", [](const Type &value, Scalar value2) { return (Scalar) value == value2; });
            def("__ne__", [](const Type &value, Scalar value2) { return (Scalar) value != value2; });
            if (is_arithmetic) {
                def("__lt__", [](const Type &value, Scalar value2) { return (Scalar) value < value2; });
                def("__gt__", [](const Type &value, Scalar value2) { return (Scalar) value > value2; });
                def("__le__", [](const Type &value, Scalar value2) { return (Scalar) value <= value2; });
                def("__ge__", [](const Type &value, Scalar value2) { return (Scalar) value >= value2; });
                def("__invert__", [](const Type &value) { return ~((Scalar) value); });
                def("__and__", [](const Type &value, Scalar value2) { return (Scalar) value & value2; });
                def("__or__", [](const Type &value, Scalar value2) { return (Scalar) value | value2; });
                def("__xor__", [](const Type &value, Scalar value2) { return (Scalar) value ^ value2; });
                def("__rand__", [](const Type &value, Scalar value2) { return (Scalar) value & value2; });
                def("__ror__", [](const Type &value, Scalar value2) { return (Scalar) value | value2; });
                def("__rxor__", [](const Type &value, Scalar value2) { return (Scalar) value ^ value2; });
                def("__and__", [](const Type &value, const Type &value2) { return (Scalar) value & (Scalar) value2; });
                def("__or__", [](const Type &value, const Type &value2) { return (Scalar) value | (Scalar) value2; });
                def("__xor__", [](const Type &value, const Type &value2) { return (Scalar) value ^ (Scalar) value2; });
            }
1200
        }
1201
        def("__hash__", [](const Type &value) { return (Scalar) value; });
Wenzel Jakob's avatar
Wenzel Jakob committed
1202
        // Pickling and unpickling -- needed for use with the 'multiprocessing' module
1203
1204
        def("__getstate__", [](const Type &value) { return pybind11::make_tuple((Scalar) value); });
        def("__setstate__", [](Type &p, tuple t) { new (&p) Type((Type) t[0].cast<Scalar>()); });
Wenzel Jakob's avatar
Wenzel Jakob committed
1205
1206
1207
    }

    /// Export enumeration entries into the parent scope
1208
1209
1210
    enum_& export_values() {
        for (const auto &kv : m_entries)
            m_parent.attr(kv.first) = kv.second;
1211
        return *this;
Wenzel Jakob's avatar
Wenzel Jakob committed
1212
1213
1214
1215
    }

    /// Add an enumeration entry
    enum_& value(char const* name, Type value) {
1216
1217
1218
        auto v = pybind11::cast(value, return_value_policy::copy);
        this->attr(name) = v;
        m_entries[pybind11::str(name)] = v;
Wenzel Jakob's avatar
Wenzel Jakob committed
1219
1220
        return *this;
    }
1221

Wenzel Jakob's avatar
Wenzel Jakob committed
1222
private:
1223
    dict m_entries;
Wenzel Jakob's avatar
Wenzel Jakob committed
1224
    handle m_parent;
Wenzel Jakob's avatar
Wenzel Jakob committed
1225
1226
1227
};

NAMESPACE_BEGIN(detail)
1228
template <typename... Args> struct init {
1229
1230
    template <typename Class, typename... Extra, enable_if_t<!Class::has_alias, int> = 0>
    static void execute(Class &cl, const Extra&... extra) {
1231
        using Base = typename Class::type;
Wenzel Jakob's avatar
Wenzel Jakob committed
1232
        /// Function which calls a specific C++ in-place constructor
1233
        cl.def("__init__", [](Base *self_, Args... args) { new (self_) Base(args...); }, extra...);
1234
1235
    }

1236
    template <typename Class, typename... Extra,
1237
1238
1239
              enable_if_t<Class::has_alias &&
                          std::is_constructible<typename Class::type, Args...>::value, int> = 0>
    static void execute(Class &cl, const Extra&... extra) {
1240
1241
1242
1243
        using Base = typename Class::type;
        using Alias = typename Class::type_alias;
        handle cl_type = cl;
        cl.def("__init__", [cl_type](handle self_, Args... args) {
1244
1245
                if (self_.get_type() == cl_type)
                    new (self_.cast<Base *>()) Base(args...);
1246
                else
1247
                    new (self_.cast<Alias *>()) Alias(args...);
1248
1249
1250
            }, extra...);
    }

1251
    template <typename Class, typename... Extra,
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
              enable_if_t<Class::has_alias &&
                          !std::is_constructible<typename Class::type, Args...>::value, int> = 0>
    static void execute(Class &cl, const Extra&... extra) {
        init_alias<Args...>::execute(cl, extra...);
    }
};
template <typename... Args> struct init_alias {
    template <typename Class, typename... Extra,
              enable_if_t<Class::has_alias && std::is_constructible<typename Class::type_alias, Args...>::value, int> = 0>
    static void execute(Class &cl, const Extra&... extra) {
1262
1263
        using Alias = typename Class::type_alias;
        cl.def("__init__", [](Alias *self_, Args... args) { new (self_) Alias(args...); }, extra...);
Wenzel Jakob's avatar
Wenzel Jakob committed
1264
1265
    }
};
1266

1267

1268
inline void keep_alive_impl(handle nurse, handle patient) {
1269
    /* Clever approach based on weak references taken from Boost.Python */
1270
    if (!nurse || !patient)
1271
        pybind11_fail("Could not activate keep_alive!");
1272

1273
    if (patient.is_none() || nurse.is_none())
1274
        return; /* Nothing to keep alive or nothing to be kept alive by */
1275

1276
    cpp_function disable_lifesupport(
1277
        [patient](handle weakref) { patient.dec_ref(); weakref.dec_ref(); });
1278

1279
    weakref wr(nurse, disable_lifesupport);
1280

1281
1282
    patient.inc_ref(); /* reference patient and leak the weak reference */
    (void) wr.release();
1283
1284
}

1285
PYBIND11_NOINLINE inline void keep_alive_impl(size_t Nurse, size_t Patient, function_call &call, handle ret) {
1286
    keep_alive_impl(
1287
1288
        Nurse   == 0 ? ret : Nurse   <= call.args.size() ? call.args[Nurse   - 1] : handle(),
        Patient == 0 ? ret : Patient <= call.args.size() ? call.args[Patient - 1] : handle()
1289
    );
1290
1291
}

1292
template <typename Iterator, typename Sentinel, bool KeyIterator, return_value_policy Policy>
1293
1294
1295
struct iterator_state {
    Iterator it;
    Sentinel end;
1296
1297
    bool first;
};
1298

Wenzel Jakob's avatar
Wenzel Jakob committed
1299
1300
NAMESPACE_END(detail)

1301
template <typename... Args> detail::init<Args...> init() { return detail::init<Args...>(); }
1302
template <typename... Args> detail::init_alias<Args...> init_alias() { return detail::init_alias<Args...>(); }
Wenzel Jakob's avatar
Wenzel Jakob committed
1303

1304
/// Makes a python iterator from a first and past-the-end C++ InputIterator.
1305
1306
template <return_value_policy Policy = return_value_policy::reference_internal,
          typename Iterator,
1307
          typename Sentinel,
1308
1309
          typename ValueType = decltype(*std::declval<Iterator>()),
          typename... Extra>
1310
iterator make_iterator(Iterator first, Sentinel last, Extra &&... extra) {
1311
    typedef detail::iterator_state<Iterator, Sentinel, false, Policy> state;
1312

Wenzel Jakob's avatar
Wenzel Jakob committed
1313
    if (!detail::get_type_info(typeid(state), false)) {
1314
        class_<state>(handle(), "iterator")
1315
            .def("__iter__", [](state &s) -> state& { return s; })
1316
            .def("__next__", [](state &s) -> ValueType {
1317
1318
1319
1320
                if (!s.first)
                    ++s.it;
                else
                    s.first = false;
1321
1322
                if (s.it == s.end)
                    throw stop_iteration();
1323
                return *s.it;
1324
            }, std::forward<Extra>(extra)..., Policy);
1325
1326
    }

1327
    return (iterator) cast(state { first, last, true });
1328
}
1329

1330
1331
/// Makes an python iterator over the keys (`.first`) of a iterator over pairs from a
/// first and past-the-end InputIterator.
1332
1333
template <return_value_policy Policy = return_value_policy::reference_internal,
          typename Iterator,
1334
          typename Sentinel,
1335
          typename KeyType = decltype((*std::declval<Iterator>()).first),
1336
          typename... Extra>
1337
iterator make_key_iterator(Iterator first, Sentinel last, Extra &&... extra) {
1338
    typedef detail::iterator_state<Iterator, Sentinel, true, Policy> state;
1339

Wenzel Jakob's avatar
Wenzel Jakob committed
1340
    if (!detail::get_type_info(typeid(state), false)) {
1341
        class_<state>(handle(), "iterator")
1342
1343
1344
1345
1346
1347
1348
1349
            .def("__iter__", [](state &s) -> state& { return s; })
            .def("__next__", [](state &s) -> KeyType {
                if (!s.first)
                    ++s.it;
                else
                    s.first = false;
                if (s.it == s.end)
                    throw stop_iteration();
1350
                return (*s.it).first;
1351
            }, std::forward<Extra>(extra)..., Policy);
1352
1353
1354
1355
    }

    return (iterator) cast(state { first, last, true });
}
1356

1357
1358
/// Makes an iterator over values of an stl container or other container supporting
/// `std::begin()`/`std::end()`
1359
1360
1361
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...);
1362
1363
}

1364
1365
/// Makes an iterator over the keys (`.first`) of a stl map-like container supporting
/// `std::begin()`/`std::end()`
1366
1367
1368
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...);
1369
1370
}

Wenzel Jakob's avatar
Wenzel Jakob committed
1371
template <typename InputType, typename OutputType> void implicitly_convertible() {
1372
    auto implicit_caster = [](PyObject *obj, PyTypeObject *type) -> PyObject * {
1373
        if (!detail::make_caster<InputType>().load(obj, false))
Wenzel Jakob's avatar
Wenzel Jakob committed
1374
1375
1376
1377
1378
1379
1380
1381
            return nullptr;
        tuple args(1);
        args[0] = obj;
        PyObject *result = PyObject_Call((PyObject *) type, args.ptr(), nullptr);
        if (result == nullptr)
            PyErr_Clear();
        return result;
    };
1382
1383
1384
1385

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

1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
template <typename ExceptionTranslator>
void register_exception_translator(ExceptionTranslator&& translator) {
    detail::get_internals().registered_exception_translators.push_front(
        std::forward<ExceptionTranslator>(translator));
}

/* Wrapper to generate a new Python exception type.
 *
 * 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:
1404
1405
1406
    exception(handle scope, const char *name, PyObject *base = PyExc_Exception) {
        std::string full_name = scope.attr("__name__").cast<std::string>() +
                                std::string(".") + name;
1407
        m_ptr = PyErr_NewException(const_cast<char *>(full_name.c_str()), base, NULL);
1408
1409
1410
1411
        if (hasattr(scope, name))
            pybind11_fail("Error during initialization: multiple incompatible "
                          "definitions with name \"" + std::string(name) + "\"");
        scope.attr(name) = *this;
1412
    }
1413
1414
1415
1416
1417

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

1420
1421
1422
1423
1424
/** Registers a Python exception in `m` of the given `name` and installs an exception translator to
 * 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.
 */
1425
1426
1427
1428
1429
template <typename CppException>
exception<CppException> &register_exception(handle scope,
                                            const char *name,
                                            PyObject *base = PyExc_Exception) {
    static exception<CppException> ex(scope, name, base);
1430
1431
1432
1433
    register_exception_translator([](std::exception_ptr p) {
        if (!p) return;
        try {
            std::rethrow_exception(p);
1434
        } catch (const CppException &e) {
1435
1436
1437
1438
1439
1440
            ex(e.what());
        }
    });
    return ex;
}

Dean Moldovan's avatar
Dean Moldovan committed
1441
1442
1443
1444
NAMESPACE_BEGIN(detail)
PYBIND11_NOINLINE inline void print(tuple args, dict kwargs) {
    auto strings = tuple(args.size());
    for (size_t i = 0; i < args.size(); ++i) {
1445
        strings[i] = str(args[i]);
Dean Moldovan's avatar
Dean Moldovan committed
1446
    }
1447
    auto sep = kwargs.contains("sep") ? kwargs["sep"] : cast(" ");
1448
    auto line = sep.attr("join")(strings);
Dean Moldovan's avatar
Dean Moldovan committed
1449

1450
1451
1452
1453
1454
1455
    object file;
    if (kwargs.contains("file")) {
        file = kwargs["file"].cast<object>();
    } else {
        try {
            file = module::import("sys").attr("stdout");
1456
        } catch (const error_already_set &) {
1457
1458
1459
1460
1461
1462
1463
1464
            /* 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;
        }
    }

1465
    auto write = file.attr("write");
Dean Moldovan's avatar
Dean Moldovan committed
1466
    write(line);
1467
    write(kwargs.contains("end") ? kwargs["end"] : cast("\n"));
Dean Moldovan's avatar
Dean Moldovan committed
1468

1469
    if (kwargs.contains("flush") && kwargs["flush"].cast<bool>())
1470
        file.attr("flush")();
Dean Moldovan's avatar
Dean Moldovan committed
1471
1472
1473
1474
1475
1476
1477
1478
1479
}
NAMESPACE_END(detail)

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

Wenzel Jakob's avatar
Wenzel Jakob committed
1480
#if defined(WITH_THREAD) && !defined(PYPY_VERSION)
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494

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

class gil_scoped_acquire {
public:
1506
    PYBIND11_NOINLINE gil_scoped_acquire() {
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
        auto const &internals = detail::get_internals();
        tstate = (PyThreadState *) PyThread_get_key_value(internals.tstate);

        if (!tstate) {
            tstate = PyThreadState_New(internals.istate);
            #if !defined(NDEBUG)
                if (!tstate)
                    pybind11_fail("scoped_acquire: could not create thread state!");
            #endif
            tstate->gilstate_counter = 0;
1517
1518
1519
            #if PY_MAJOR_VERSION < 3
                PyThread_delete_key_value(internals.tstate);
            #endif
1520
1521
            PyThread_set_key_value(internals.tstate, tstate);
        } else {
1522
            release = detail::get_thread_state_unchecked() != tstate;
1523
1524
1525
1526
        }

        if (release) {
            /* Work around an annoying assertion in PyThreadState_Swap */
1527
1528
1529
1530
            #if defined(Py_DEBUG)
                PyInterpreterState *interp = tstate->interp;
                tstate->interp = nullptr;
            #endif
1531
            PyEval_AcquireThread(tstate);
1532
1533
1534
            #if defined(Py_DEBUG)
                tstate->interp = interp;
            #endif
1535
1536
1537
1538
1539
1540
1541
1542
1543
        }

        inc_ref();
    }

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

1544
    PYBIND11_NOINLINE void dec_ref() {
1545
1546
        --tstate->gilstate_counter;
        #if !defined(NDEBUG)
1547
            if (detail::get_thread_state_unchecked() != tstate)
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
                pybind11_fail("scoped_acquire::dec_ref(): thread state must be current!");
            if (tstate->gilstate_counter < 0)
                pybind11_fail("scoped_acquire::dec_ref(): reference count underflow!");
        #endif
        if (tstate->gilstate_counter == 0) {
            #if !defined(NDEBUG)
                if (!release)
                    pybind11_fail("scoped_acquire::dec_ref(): internal error!");
            #endif
            PyThreadState_Clear(tstate);
            PyThreadState_DeleteCurrent();
1559
            PyThread_delete_key_value(detail::get_internals().tstate);
1560
1561
1562
1563
            release = false;
        }
    }

1564
    PYBIND11_NOINLINE ~gil_scoped_acquire() {
1565
1566
1567
1568
1569
1570
1571
        dec_ref();
        if (release)
           PyEval_SaveThread();
    }
private:
    PyThreadState *tstate = nullptr;
    bool release = true;
Wenzel Jakob's avatar
Wenzel Jakob committed
1572
1573
1574
1575
};

class gil_scoped_release {
public:
1576
    explicit gil_scoped_release(bool disassoc = false) : disassoc(disassoc) {
1577
        tstate = PyEval_SaveThread();
1578
        if (disassoc) {
1579
            auto key = detail::get_internals().tstate;
1580
1581
1582
1583
1584
1585
            #if PY_MAJOR_VERSION < 3
                PyThread_delete_key_value(key);
            #else
                PyThread_set_key_value(key, nullptr);
            #endif
        }
1586
1587
1588
1589
1590
    }
    ~gil_scoped_release() {
        if (!tstate)
            return;
        PyEval_RestoreThread(tstate);
1591
        if (disassoc) {
1592
            auto key = detail::get_internals().tstate;
1593
1594
1595
1596
1597
            #if PY_MAJOR_VERSION < 3
                PyThread_delete_key_value(key);
            #endif
            PyThread_set_key_value(key, tstate);
        }
1598
1599
1600
1601
    }
private:
    PyThreadState *tstate;
    bool disassoc;
Wenzel Jakob's avatar
Wenzel Jakob committed
1602
};
Wenzel Jakob's avatar
Wenzel Jakob committed
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
#elif defined(PYPY_VERSION)
class gil_scoped_acquire {
    PyGILState_STATE state;
public:
    gil_scoped_acquire() { state = PyGILState_Ensure(); }
    ~gil_scoped_acquire() { PyGILState_Release(state); }
};

class gil_scoped_release {
    PyThreadState *state;
public:
    gil_scoped_release() { state = PyEval_SaveThread(); }
    ~gil_scoped_release() { PyEval_RestoreThread(state); }
};
1617
1618
1619
#else
class gil_scoped_acquire { };
class gil_scoped_release { };
1620
#endif
Wenzel Jakob's avatar
Wenzel Jakob committed
1621

1622
1623
1624
error_already_set::~error_already_set() {
    if (value) {
        gil_scoped_acquire gil;
1625
        clear();
1626
1627
1628
    }
}

1629
inline function get_type_overload(const void *this_ptr, const detail::type_info *this_type, const char *name)  {
Wenzel Jakob's avatar
Wenzel Jakob committed
1630
1631
    handle self = detail::get_object_handle(this_ptr, this_type);
    if (!self)
1632
        return function();
Wenzel Jakob's avatar
Wenzel Jakob committed
1633
    handle type = self.get_type();
1634
1635
    auto key = std::make_pair(type.ptr(), name);

1636
1637
    /* Cache functions that aren't overloaded in Python to avoid
       many costly Python dictionary lookups below */
1638
1639
1640
1641
    auto &cache = detail::get_internals().inactive_overload_cache;
    if (cache.find(key) != cache.end())
        return function();

Wenzel Jakob's avatar
Wenzel Jakob committed
1642
    function overload = getattr(self, name, function());
1643
1644
1645
1646
    if (overload.is_cpp_function()) {
        cache.insert(key);
        return function();
    }
1647

Wenzel Jakob's avatar
Wenzel Jakob committed
1648
1649
1650
    /* Don't call dispatch code if invoked from overridden function.
       Unfortunately this doesn't work on PyPy. */
#if !defined(PYPY_VERSION)
1651
    PyFrameObject *frame = PyThreadState_Get()->frame;
1652
    if (frame && (std::string) str(frame->f_code->co_name) == name &&
1653
1654
1655
1656
        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
1657
        if (self_caller == self.ptr())
1658
1659
            return function();
    }
Wenzel Jakob's avatar
Wenzel Jakob committed
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
#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();
    if ((handle) d["self"] == Py_None)
        return function();
    Py_DECREF(result);
#endif

1683
1684
1685
    return overload;
}

1686
template <class T> function get_overload(const T *this_ptr, const char *name) {
1687
1688
    auto tinfo = detail::get_type_info(typeid(T));
    return tinfo ? get_type_overload(this_ptr, tinfo, name) : function();
1689
1690
}

1691
#define PYBIND11_OVERLOAD_INT(ret_type, cname, name, ...) { \
1692
        pybind11::gil_scoped_acquire gil; \
1693
        pybind11::function overload = pybind11::get_overload(static_cast<const cname *>(this), name); \
1694
        if (overload) { \
1695
            auto o = overload(__VA_ARGS__); \
1696
            if (pybind11::detail::cast_is_temporary_value_reference<ret_type>::value) { \
1697
1698
                static pybind11::detail::overload_caster_t<ret_type> caster; \
                return pybind11::detail::cast_ref<ret_type>(std::move(o), caster); \
1699
1700
1701
1702
            } \
            else return pybind11::detail::cast_safe<ret_type>(std::move(o)); \
        } \
    }
1703

1704
#define PYBIND11_OVERLOAD_NAME(ret_type, cname, name, fn, ...) \
1705
    PYBIND11_OVERLOAD_INT(ret_type, cname, name, __VA_ARGS__) \
1706
    return cname::fn(__VA_ARGS__)
1707

1708
#define PYBIND11_OVERLOAD_PURE_NAME(ret_type, cname, name, fn, ...) \
1709
    PYBIND11_OVERLOAD_INT(ret_type, cname, name, __VA_ARGS__) \
1710
1711
1712
1713
1714
1715
1716
    pybind11::pybind11_fail("Tried to call pure virtual function \"" #cname "::" name "\"");

#define PYBIND11_OVERLOAD(ret_type, cname, fn, ...) \
    PYBIND11_OVERLOAD_NAME(ret_type, cname, #fn, fn, __VA_ARGS__)

#define PYBIND11_OVERLOAD_PURE(ret_type, cname, fn, ...) \
    PYBIND11_OVERLOAD_PURE_NAME(ret_type, cname, #fn, fn, __VA_ARGS__)
1717

1718
NAMESPACE_END(pybind11)
Wenzel Jakob's avatar
Wenzel Jakob committed
1719
1720

#if defined(_MSC_VER)
Wenzel Jakob's avatar
Wenzel Jakob committed
1721
#  pragma warning(pop)
1722
1723
#elif defined(__INTEL_COMPILER)
/* Leave ignored warnings on */
1724
#elif defined(__GNUG__) && !defined(__clang__)
Wenzel Jakob's avatar
Wenzel Jakob committed
1725
#  pragma GCC diagnostic pop
Wenzel Jakob's avatar
Wenzel Jakob committed
1726
#endif