1. 26 Jun, 2017 1 commit
  2. 25 Jun, 2017 1 commit
  3. 24 Jun, 2017 7 commits
  4. 23 Jun, 2017 2 commits
  5. 20 Jun, 2017 1 commit
    • Jason Rhinelander's avatar
      Switch debian docker images to stretch · e067c584
      Jason Rhinelander authored
      Debian stretch was just released, so `debian:testing` and
      `debian:stetch` are starting to diverge; this commit keeps the travis-ci
      docker image on stretch for gcc6 and clang3.9.
      
      Debian has also moved gcc 7 from experimental to unstable, so this
      switches the gcc7 build to `sid`.  Once it migrates to `testing` I'll
      switch the gcc 7 build docker image to `testing` and take it out of
      failure-allowed.
      e067c584
  6. 15 Jun, 2017 2 commits
  7. 14 Jun, 2017 2 commits
    • Jason Rhinelander's avatar
      Make check-style.sh work on stock macOS · d080f833
      Jason Rhinelander authored
      ./tools/check-style.sh fails on stock OS X currently; this fixes it:
      
      - use pipes directly rather than exec redirection (macOS's ancient
        version of bash fails with the latter)
      - macOS's ancient bash doesn't support '\e' escapes in `echo -e`;
        replace with \033 instead
      - BSD grep doesn't support GREP_COLORS, but does allow GREP_COLOR.
        Adding both doesn't hurt GNU grep: GREP_COLOR is deprecated, and won't
        be used when GREP_COLORS is set.
      - BSD grep doesn't collapse multiple /'s in the listed filename, so
        failures under `include/` would should up as
        `include//pybind11/whatever.h`.  This removes the / from the include
        directory argument.
      
      Minor other changes:
      - The CRLF detection runs with -l, so GREP_COLORS wasn't doing
        anything; removed it.
      - The trailing whitespace test would trigger on CRLFs, but the CR would
        result in messed up output.  Changed the test to just match trailing
        spaces and tabs, rather than all whitespace.
      d080f833
    • Jason Rhinelander's avatar
      travis-ci: clang 4.0: install and use ldd-4.0 · 404bcf25
      Jason Rhinelander authored
      The clang 4.0/cpp17 build wasn't enabling -flto because the system
      linker didn't like the output generated by clang for some reason.  This
      switches the build to use llvm's lld instead, which lets -flto work
      again (and links considerably faster, too).
      404bcf25
  8. 12 Jun, 2017 2 commits
    • Jason Rhinelander's avatar
      Upgrade pypy to 5.8, use pre-built numpy/scipy wheels · 2cc1916e
      Jason Rhinelander authored
      numpy 1.13.0 fails with pypy 5.7.1, so this upgrades to 5.8.0.  I've
      also uploaded pre-built .whl files to imaginary.ca (checked every 4
      hours and rebuilt if needed), and list that as an extra pypi location
      under the pypy pip install to avoid the long travis pypy build times for
      a new release or branch.
      2cc1916e
    • Jason Rhinelander's avatar
      Support multiple inheritance from python · e45c2114
      Jason Rhinelander authored
      This commit allows multiple inheritance of pybind11 classes from
      Python, e.g.
      
          class MyType(Base1, Base2):
              def __init__(self):
                  Base1.__init__(self)
                  Base2.__init__(self)
      
      where Base1 and Base2 are pybind11-exported classes.
      
      This requires collapsing the various builtin base objects
      (pybind11_object_56, ...) introduced in 2.1 into a single
      pybind11_object of a fixed size; this fixed size object allocates enough
      space to contain either a simple object (one base class & small* holder
      instance), or a pointer to a new allocation that can contain an
      arbitrary number of base classes and holders, with holder size
      unrestricted.
      
      * "small" here means having a sizeof() of at most 2 pointers, which is
      enough to fit unique_ptr (sizeof is 1 ptr) and shared_ptr (sizeof is 2
      ptrs).
      
      To minimize the performance impact, this repurposes
      `internals::registered_types_py` to store a vector of pybind-registered
      base types.  For direct-use pybind types (e.g. the `PyA` for a C++ `A`)
      this is simply storing the same thing as before, but now in a vector;
      for Python-side inherited types, the map lets us avoid having to do a
      base class traversal as long as we've seen the class before.  The
      change to vector is needed for multiple inheritance: Python types
      inheriting from multiple registered bases have one entry per base.
      e45c2114
  9. 10 Jun, 2017 3 commits
    • Dean Moldovan's avatar
      Fix py::make_iterator's __next__() for past-the-end calls · caedf74a
      Dean Moldovan authored
      Fixes #896.
      
      From Python docs: "Once an iterator’s `__next__()` method raises
      `StopIteration`, it must continue to do so on subsequent calls.
      Implementations that do not obey this property are deemed broken."
      caedf74a
    • Dean Moldovan's avatar
      Don't let pytest discover tests from test_cmake_build and test_embed · 17cc39c8
      Dean Moldovan authored
      pytest raises an error if it recurses into these directories.
      17cc39c8
    • Ben Frederickson's avatar
      Fix passing in utf8 encoded strings with python 2 · 74b501cd
      Ben Frederickson authored
      Passing utf8 encoded strings from python to a C++ function taking a
      std::string was broken.  The previous version was trying to call
      'PyUnicode_FromObject' on this data, which failed to convert the string
      to unicode with the default ascii codec. Also this incurs an unnecessary
      conversion to unicode for data this is immediately converted back to
      utf8.
      
      Fix by treating python 2 strings the same python 3 bytes objects, and just
      copying over the data if possible.
      74b501cd
  10. 08 Jun, 2017 4 commits
    • Jason Rhinelander's avatar
      Remove feature macro for <experimental/optional> · 0365d491
      Jason Rhinelander authored
      libc++ 3.8 (and possibly others--including the derived version on OS X),
      doesn't define the macro, but does support std::experimental::optional.
      This removes the extra macro check and just assumes the header existing
      is enough, which is what we do for <optional> and <variant>.
      0365d491
    • Dean Moldovan's avatar
      Enable detection of private operator new on MSVC · e27ea47c
      Dean Moldovan authored
      MSVC 2015 Update 3 and 2017 can handle enough expression SFINAE
      to make this work now.
      e27ea47c
    • Matthew Chan's avatar
      Update basics.rst · 6223b18c
      Matthew Chan authored
      Fix spelling
      6223b18c
    • Jason Rhinelander's avatar
      Destroy internals if created during Py_Finalize() · 4edb1ce2
      Jason Rhinelander authored
      Py_Finalize could potentially invoke code that calls `get_internals()`,
      which could create a new internals object if one didn't exist.
      `finalize_interpreter()` didn't catch this because it only used the
      pre-finalize interpreter pointer status; if this happens, it results in
      the internals pointer not being properly destroyed with the interpreter,
      which leaks, and also causes a `get_internals()` under a future
      interpreter to return an internals object that is wrong in various ways.
      4edb1ce2
  11. 07 Jun, 2017 2 commits
  12. 06 Jun, 2017 1 commit
    • eirrgang's avatar
      Explicitly define copy/move constructors for accessor · 91bbe2f2
      eirrgang authored
      `accessor` currently relies on an implicit default copy constructor, but that is deprecated in C++11 when a copy assignment operator is present and can, in some cases, raise deprecation warnings (see #888).  This commit explicitly specifies the default copy constructor and also adds a default move constructor.
      91bbe2f2
  13. 31 May, 2017 1 commit
  14. 30 May, 2017 3 commits
    • Jason Rhinelander's avatar
      std::reference_wrapper: non-generic types; no None · acedd6c7
      Jason Rhinelander authored
      This reimplements the std::reference_wrapper<T> caster to be a shell
      around the underlying T caster (rather than assuming T is a generic
      type), which lets it work for things like `std::reference_wrapper<int>`
      or anything else custom type caster with a lvalue cast operator.
      
      This also makes it properly fail when None is provided, just as an
      ordinary lvalue reference argument would similarly fail.
      
      This also adds a static assert to test that T has an appropriate type
      caster.  It triggers for casters like `std::pair`, which have
      return-by-value cast operators.  (In theory this could be supported by
      storing a local temporary for such types, but that's beyond the scope
      of this PR).
      
      This also replaces `automatic` or `take_ownership` return value policies
      with `automatic_reference` as taking ownership of a reference inside a
      reference_wrapper is not valid.
      acedd6c7
    • Jason Rhinelander's avatar
      Move reference_wrapper test from test_issues to test_python_types · 7cdf9f1a
      Jason Rhinelander authored
      test_issues is deprecated, and the following commit adds other, related
      reference_wrapper tests.
      7cdf9f1a
    • Dean Moldovan's avatar
      Filter warnings on pytest >= v3.1 · 005fde6a
      Dean Moldovan authored
      The new version of pytest now reports Python warnings by default. This
      commit filters out some third-party extension warnings which are not
      useful for pybind11 tests.
      005fde6a
  15. 29 May, 2017 3 commits
    • Dean Moldovan's avatar
      Replace PYBIND11_PLUGIN with PYBIND11_MODULE · 443ab594
      Dean Moldovan authored
      This commit also adds `doc()` to `object_api` as a shortcut for the
      `attr("__doc__")` accessor.
      
      The module macro changes from:
      ```c++
      PYBIND11_PLUGIN(example) {
          pybind11::module m("example", "pybind11 example plugin");
          m.def("add", [](int a, int b) { return a + b; });
          return m.ptr();
      }
      ```
      
      to:
      
      ```c++
      PYBIND11_MODULE(example, m) {
          m.doc() = "pybind11 example plugin";
          m.def("add", [](int a, int b) { return a + b; });
      }
      ```
      
      Using the old macro results in a deprecation warning. The warning
      actually points to the `pybind11_init` function (since attributes
      don't bind to macros), but the message should be quite clear:
      "PYBIND11_PLUGIN is deprecated, use PYBIND11_MODULE".
      443ab594
    • Yannick Jadoul's avatar
      Convenience constructor templates for buffer_info (#860) · b700c5d6
      Yannick Jadoul authored
      * Added template constructors to buffer_info that can deduce the item size, format string, and number of dimensions from the pointer type and the shape container
      
      * Implemented actual buffer_info constructor as private delegate constructor taking rvalue reference as a workaround for the evaluation order move problem on GCC 4.8
      b700c5d6
    • Dean Moldovan's avatar
      Fix buffer protocol inheritance · 427e4afc
      Dean Moldovan authored
      Fixes #878.
      427e4afc
  16. 28 May, 2017 5 commits