- 06 Nov, 2016 1 commit
-
-
Jason Rhinelander authored
If we need to initialize a holder around an unowned instance, and the holder type is non-copyable (i.e. a unique_ptr), we currently construct the holder type around the value pointer, but then never actually destruct the holder: the holder destructor is called only for the instance that actually has `inst->owned = true` set. This seems no pointer, however, in creating such a holder around an unowned instance: we never actually intend to use anything that the unique_ptr gives us: and, in fact, do not want the unique_ptr (because if it ever actually got destroyed, it would cause destruction of the wrapped pointer, despite the fact that that wrapped pointer isn't owned). This commit changes the logic to only create a unique_ptr holder if we actually own the instance, and to destruct via the constructed holder whenever we have a constructed holder--which will now only be the case for owned-unique-holder or shared-holder types. Other changes include: * Added test for non-movable holder constructor/destructor counts The three alive assertions now pass, before #478 they fail with counts of 2/2/1 respectively, because of the unique_ptr that we don't want and don't destroy (because we don't *want* its destructor to run). * Return cstats reference; fix ConstructStats doc Small cleanup to the #478 test code, and fix to the ConstructStats documentation (the static method definition should use `reference` not `reference_internal`). * Rename inst->constructed to inst->holder_constructed This makes it clearer exactly what it's referring to.
-
- 04 Nov, 2016 1 commit
-
-
Jason Rhinelander authored
* Add debugging info about so size to build output This adds a small python script to tools that captures before-and-after .so sizes between builds and outputs this in the build output via a string such as: ------ pybind11_tests.cpython-35m-x86_64-linux-gnu.so file size: 924696 (decrease of 73680 bytes = 7.38%) ------ pybind11_tests.cpython-35m-x86_64-linux-gnu.so file size: 998376 (increase of 73680 bytes = 7.97%) ------ pybind11_tests.cpython-35m-x86_64-linux-gnu.so file size: 998376 (no change) Or, if there was no .so during the build, just the .so size by itself: ------ pybind11_tests.cpython-35m-x86_64-linux-gnu.so file size: 998376 This allows you to, for example, build, checkout a different branch, rebuild, and easily see exactly the change in the pybind11_tests.so size. It also allows looking at the travis and appveyor build logs to get an idea of .so/.dll sizes across different build systems. * Minor libsize.py script changes - Use RAII open - Remove unused libsize=-1 - Report change as [+-]xyz bytes = [+-]a.bc%
-
- 03 Nov, 2016 4 commits
-
-
Ivan Smirnov authored
* Add type caster for std::experimental::optional * Add tests for std::experimental::optional * Support both <optional> / <experimental/optional> * Mention std{::experimental,}::optional in the docs -
Wenzel Jakob authored
-
Ivan Smirnov authored
-
Ivan Smirnov authored
-
- 01 Nov, 2016 2 commits
-
-
Ivan Smirnov authored
-
Dean Moldovan authored
* Make reference(_internal) the default return value policy for properties Before this, all `def_property*` functions used `automatic` as their default return value policy. This commit makes it so that: * Non-static properties use `reference_interal` by default, thus matching `def_readonly` and `def_readwrite`. * Static properties use `reference` by default, thus matching `def_readonly_static` and `def_readwrite_static`. In case `cpp_function` is passed to any `def_property*`, its policy will be used instead of any defaults. User-defined arguments in `extras` still have top priority and will override both the default policies and the ones from `cpp_function`. Resolves #436. * Almost always use return_value_policy::move for rvalues For functions which return rvalues or rvalue references, the only viable return value policies are `copy` and `move`. `reference(_internal)` and `take_ownership` would take the address of a temporary which is always an error. This commit prevents possible user errors by overriding the bad rvalue policies with `move`. Besides `move`, only `copy` is allowed, and only if it's explicitly selected by the user. This is also a necessary safety feature to support the new default return value policies for properties: `reference(_internal)`.
-
- 27 Oct, 2016 2 commits
-
-
Wenzel Jakob authored
-
Wenzel Jakob authored
The current integer caster was unnecessarily strict and rejected various kinds of NumPy integer types when calling C++ functions expecting normal integers. This relaxes the current behavior.
-
- 25 Oct, 2016 1 commit
-
-
Jason Rhinelander authored
Currently pybind11 doesn't check when you define a new object (e.g. a class, function, or exception) that overwrites an existing one. If the thing being overwritten is a class, this leads to a segfault (because pybind still thinks the type is defined, even though Python no longer has the type). In other cases this is harmless (e.g. replacing a function with an exception), but even in that case it's most likely a bug. This code doesn't prevent you from actively doing something harmful, like deliberately overwriting a previous definition, but detects overwriting with a run-time error if it occurs in the standard class/function/exception/def registration interfaces. All of the additions are in non-template code; the result is actually a tiny decrease in .so size compared to master without the new test code (977304 to 977272 bytes), and about 4K higher with the new tests.
-
- 23 Oct, 2016 1 commit
-
-
Ivan Smirnov authored
This avoid a hashmap lookup since the pointer to the list of direct converters is now cached in the typeinfo.
-
- 21 Oct, 2016 1 commit
-
-
Dean Moldovan authored
Making `cppfunction` explicit broke `def_property` and friends. The added tests would not compile without an implicit `cppfunction`.
-
- 20 Oct, 2016 5 commits
-
-
Ben North authored
Without the previous commit, this test generates a core dump.
-
Ivan Smirnov authored
-
Ivan Smirnov authored
-
Dean Moldovan authored
With this there is no more need for manual user declarations like `PYBIND11_DECLARE_HOLDER_TYPE(T, std::shared_ptr<T>)`. Existing ones will still compile without error -- they will just be ignored silently. Resolves #446.
-
Ivan Smirnov authored
-
- 14 Oct, 2016 1 commit
-
-
Dean Moldovan authored
`PyType_Ready` would usually perform the inheritance for us, but it can't adjust `tp_basicsize` appropriately.
-
- 13 Oct, 2016 1 commit
-
-
Wenzel Jakob authored
-
- 12 Oct, 2016 3 commits
-
-
Wenzel Jakob authored
This patch adds an extra base handle parameter to most ``py::array`` and ``py::array_t<>`` constructors. If specified along with a pointer to data, the base object will be registered within NumPy, which increases the base's reference count. This feature is useful to create shallow copies of C++ or Python arrays while ensuring that the owners of the underlying can't be garbage collected while referenced by NumPy. The commit also adds a simple test function involving a ``wrap()`` function that creates shallow copies of various N-D arrays.
-
Wenzel Jakob authored
- This actually works with no changes, I just wasn't 100% convinced and decided to write a test to see if it's true.
-
Pim Schellart authored
-
- 11 Oct, 2016 1 commit
-
-
Dean Moldovan authored
-
- 09 Oct, 2016 2 commits
-
-
Wenzel Jakob authored
-
Wenzel Jakob authored
-
- 29 Sep, 2016 1 commit
-
-
Wenzel Jakob authored
-
- 27 Sep, 2016 1 commit
-
-
Trent Houliston authored
-
- 23 Sep, 2016 3 commits
-
-
Dean Moldovan authored
`auto var = l[0]` has a strange quirk: `var` is actually an accessor and not an object, so any later assignment of `var = ...` would modify l[0] instead of `var`. This is surprising compared to the non-auto assignment `py::object var = l[0]; var = ...`. By overloading `operator=` on lvalue/rvalue, the expected behavior is restored even for `auto` variables.
-
Dean Moldovan authored
-
Dean Moldovan authored
-
- 22 Sep, 2016 1 commit
-
-
Dean Moldovan authored
This also adds the `hasattr` and `getattr` functions which are needed with the new attribute behavior. The new functions behave exactly like their Python counterparts. Similarly `object` gets a `contains` method which calls `__contains__`, i.e. it's the same as the `in` keyword in Python.
-
- 20 Sep, 2016 1 commit
-
-
Dean Moldovan authored
-
- 19 Sep, 2016 2 commits
-
-
Wenzel Jakob authored
-
Wenzel Jakob authored
-
- 17 Sep, 2016 1 commit
-
-
Wenzel Jakob authored
-
- 16 Sep, 2016 1 commit
-
-
Jason Rhinelander authored
The custom exception handling added in PR #273 is robust, but is overly complex for declaring the most common simple C++ -> Python exception mapping that needs only to copy `what()`. This add a simpler `py::register_exception<CppExp>(module, "PyExp");` function that greatly simplifies the common basic case of translation of a simple CppException into a simple PythonException, while not removing the more advanced capabilities of defining custom exception handlers.
-
- 13 Sep, 2016 3 commits
-
-
Trent Houliston authored
Allowed durations and non system clocks to be set from floats.
-
Trent Houliston authored
-
Trent Houliston authored
Add unit tests and documentation for the chrono cast.
-