1. 30 Aug, 2016 1 commit
  2. 29 Aug, 2016 5 commits
    • Fix template trampoline overload lookup failure · 20978263
      Problem
      =======
      
      The template trampoline pattern documented in PR #322 has a problem with
      virtual method overloads in intermediate classes in the inheritance
      chain between the trampoline class and the base class.
      
      For example, consider the following inheritance structure, where `B` is
      the actual class, `PyB<B>` is the trampoline class, and `PyA<B>` is an
      intermediate class adding A's methods into the trampoline:
      
          PyB<B> -> PyA<B> -> B -> A
      
      Suppose PyA<B> has a method `some_method()` with a PYBIND11_OVERLOAD in
      it to overload the virtual `A::some_method()`.  If a Python class `C` is
      defined that inherits from the pybind11-registered `B` and tries to
      provide an overriding `some_method()`, the PYBIND11_OVERLOADs declared
      in PyA<B> fails to find this overloaded method, and thus never invoke it
      (or, if pure virtual and not overridden in PyB<B>, raises an exception).
      
      This happens because the base (internal) `PYBIND11_OVERLOAD_INT` macro
      simply calls `get_overload(this, name)`; `get_overload()` then uses the
      inferred type of `this` to do a type lookup in `registered_types_cpp`.
      This is where it fails: `this` will be a `PyA<B> *`, but `PyA<B>` is
      neither the base type (`B`) nor the trampoline type (`PyB<B>`).  As a
      result, the overload fails and we get a failed overload lookup.
      
      The fix
      =======
      
      The fix is relatively simple: we can cast `this` passed to
      `get_overload()` to a `const B *`, which lets get_overload look up the
      correct class.  Since trampoline classes should be derived from `B`
      classes anyway, this cast should be perfectly safe.
      
      This does require adding the class name as an argument to the
      PYBIND11_OVERLOAD_INT macro, but leaves the public macro signatures
      unchanged.
      Jason Rhinelander committed
    • Merge pull request #371 from jagerman/overload-name-doc-fix · d9b3db3e
      Doc fix for OVERLOAD*_NAME macros
      Wenzel Jakob committed
    • Doc fix for OVERLOAD*_NAME macros · 64830e33
      The documentation says the string-valued python function name goes
      after the C++ function, but it actually goes before it.
      Jason Rhinelander committed
    • Merge pull request #369 from jagerman/check-for-tabs · 7946715d
      Check for style issues during docs build
      Wenzel Jakob committed
    • Merge pull request #370 from jagerman/contributing-test-target · 5d1d380e
      Minor doc fix: ``make test`` -> ``make pytest``
      Wenzel Jakob committed
  3. 28 Aug, 2016 6 commits
  4. 27 Aug, 2016 5 commits
  5. 26 Aug, 2016 6 commits
  6. 25 Aug, 2016 5 commits
  7. 24 Aug, 2016 8 commits
  8. 22 Aug, 2016 4 commits