mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-26 07:02:11 +00:00
fix severe regression involving character arrays (fixes #137)
This commit is contained in:
parent
cf8b30287b
commit
17cdb06c1b
@ -119,9 +119,8 @@ set(PYBIND11_EXAMPLES
|
|||||||
example/example11.cpp
|
example/example11.cpp
|
||||||
example/example12.cpp
|
example/example12.cpp
|
||||||
example/example13.cpp
|
example/example13.cpp
|
||||||
|
example/issues.cpp
|
||||||
)
|
)
|
||||||
set(PYBIND11_FIRSTEXAMPLE 1)
|
|
||||||
list(LENGTH PYBIND11_EXAMPLES PYBIND11_LASTEXAMPLE)
|
|
||||||
|
|
||||||
# Create the binding library
|
# Create the binding library
|
||||||
add_library(example SHARED
|
add_library(example SHARED
|
||||||
@ -208,8 +207,9 @@ if (MSVC OR CMAKE_CXX_COMPILER_ID MATCHES "Intel")
|
|||||||
set(RUN_TEST ${RUN_TEST} --relaxed)
|
set(RUN_TEST ${RUN_TEST} --relaxed)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
foreach(i RANGE ${PYBIND11_FIRSTEXAMPLE} ${PYBIND11_LASTEXAMPLE})
|
foreach(VALUE ${PYBIND11_EXAMPLES})
|
||||||
add_test(NAME example${i} COMMAND ${RUN_TEST} example${i})
|
string(REGEX REPLACE "^example/(.+).cpp$" "\\1" EXAMPLE_NAME "${VALUE}")
|
||||||
|
add_test(NAME ${EXAMPLE_NAME} COMMAND ${RUN_TEST} ${EXAMPLE_NAME})
|
||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
if (PYBIND11_INSTALL)
|
if (PYBIND11_INSTALL)
|
||||||
|
@ -22,6 +22,7 @@ void init_ex10(py::module &);
|
|||||||
void init_ex11(py::module &);
|
void init_ex11(py::module &);
|
||||||
void init_ex12(py::module &);
|
void init_ex12(py::module &);
|
||||||
void init_ex13(py::module &);
|
void init_ex13(py::module &);
|
||||||
|
void init_issues(py::module &);
|
||||||
|
|
||||||
PYBIND11_PLUGIN(example) {
|
PYBIND11_PLUGIN(example) {
|
||||||
py::module m("example", "pybind example plugin");
|
py::module m("example", "pybind example plugin");
|
||||||
@ -39,6 +40,7 @@ PYBIND11_PLUGIN(example) {
|
|||||||
init_ex11(m);
|
init_ex11(m);
|
||||||
init_ex12(m);
|
init_ex12(m);
|
||||||
init_ex13(m);
|
init_ex13(m);
|
||||||
|
init_issues(m);
|
||||||
|
|
||||||
return m.ptr();
|
return m.ptr();
|
||||||
}
|
}
|
||||||
|
18
example/issues.cpp
Normal file
18
example/issues.cpp
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
/*
|
||||||
|
example/issues.cpp -- collection of testcases for miscellaneous issues
|
||||||
|
|
||||||
|
Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.ch>
|
||||||
|
|
||||||
|
All rights reserved. Use of this source code is governed by a
|
||||||
|
BSD-style license that can be found in the LICENSE file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "example.h"
|
||||||
|
|
||||||
|
|
||||||
|
void init_issues(py::module &m) {
|
||||||
|
py::module m2 = m.def_submodule("issues");
|
||||||
|
|
||||||
|
// #137: const char* isn't handled properly
|
||||||
|
m2.def("print_cchar", [](const char *string) { std::cout << string << std::endl; });
|
||||||
|
}
|
8
example/issues.py
Normal file
8
example/issues.py
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
from __future__ import print_function
|
||||||
|
import sys
|
||||||
|
sys.path.append('.')
|
||||||
|
|
||||||
|
from example.issues import print_cchar
|
||||||
|
|
||||||
|
print_cchar("const char *")
|
1
example/issues.ref
Normal file
1
example/issues.ref
Normal file
@ -0,0 +1 @@
|
|||||||
|
const char *
|
@ -401,8 +401,6 @@ public:
|
|||||||
operator char() { if (value.length() > 0) return value[0]; else return '\0'; }
|
operator char() { if (value.length() > 0) return value[0]; else return '\0'; }
|
||||||
|
|
||||||
static PYBIND11_DESCR name() { return type_descr(_(PYBIND11_STRING_NAME)); }
|
static PYBIND11_DESCR name() { return type_descr(_(PYBIND11_STRING_NAME)); }
|
||||||
protected:
|
|
||||||
std::string value;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
template <> class type_caster<wchar_t> : public type_caster<std::wstring> {
|
template <> class type_caster<wchar_t> : public type_caster<std::wstring> {
|
||||||
@ -420,8 +418,6 @@ public:
|
|||||||
operator wchar_t() { if (value.length() > 0) return value[0]; else return L'\0'; }
|
operator wchar_t() { if (value.length() > 0) return value[0]; else return L'\0'; }
|
||||||
|
|
||||||
static PYBIND11_DESCR name() { return type_descr(_(PYBIND11_STRING_NAME)); }
|
static PYBIND11_DESCR name() { return type_descr(_(PYBIND11_STRING_NAME)); }
|
||||||
protected:
|
|
||||||
std::wstring value;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T1, typename T2> class type_caster<std::pair<T1, T2>> {
|
template <typename T1, typename T2> class type_caster<std::pair<T1, T2>> {
|
||||||
|
Loading…
Reference in New Issue
Block a user