mirror of
https://github.com/boostorg/python.git
synced 2026-01-24 18:12:43 +00:00
Compare commits
7 Commits
sandbox-br
...
svn-branch
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
93a8db843b | ||
|
|
a3e76d59c3 | ||
|
|
5b36b84444 | ||
|
|
78ec0d12db | ||
|
|
a7c16bf695 | ||
|
|
6d4be7ab3a | ||
|
|
65e74ccf1e |
@@ -835,6 +835,8 @@ namespace boost { namespace python { namespace api
|
||||
object& operator=(object const&);
|
||||
|
||||
PyObject* ptr() const;
|
||||
|
||||
bool is_none() const;
|
||||
};
|
||||
}}}
|
||||
</pre>
|
||||
@@ -895,6 +897,14 @@ PyObject* ptr() const;
|
||||
<dt><b>Returns:</b> a pointer to the internally-held Python
|
||||
object.</dt>
|
||||
</dl>
|
||||
|
||||
<pre>
|
||||
bool is_none() const;
|
||||
</pre>
|
||||
|
||||
<dl class="function-semantics">
|
||||
<dt><b>Returns:</b> result of (ptr() == Py_None)</dt>
|
||||
</dl>
|
||||
<!-- -->
|
||||
|
||||
<h3><a name="proxy-spec"></a>Class template <code>proxy</code></h3>
|
||||
@@ -1101,7 +1111,7 @@ object sum_items(object seq)
|
||||
</pre>
|
||||
<p>Revised
|
||||
<!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
|
||||
27 May, 2008
|
||||
15 March, 2010
|
||||
<!--webbot bot="Timestamp" endspan i-checksum="39359" -->
|
||||
</p>
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ struct value_destroyer<
|
||||
template <class T>
|
||||
static void execute(T const volatile* p)
|
||||
{
|
||||
p->T::~T();
|
||||
p->~T();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -182,8 +182,8 @@ typedef int pid_t;
|
||||
# define Py_REFCNT(o) (((PyObject*)(o))->ob_refcnt)
|
||||
# define Py_SIZE(o) (((PyVarObject*)(o))->ob_size)
|
||||
|
||||
# define PyVarObject_HEAD_INIT(type, size) \
|
||||
PyObject_HEAD_INIT(type) size,
|
||||
# define PyVarObject_HEAD_INIT(type, size) \
|
||||
PyObject_HEAD_INIT(type) size,
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ template <class ExceptionType, class Translate>
|
||||
void register_exception_translator(Translate translate, boost::type<ExceptionType>* = 0)
|
||||
{
|
||||
detail::register_exception_handler(
|
||||
bind<bool>(detail::translate_exception<ExceptionType,Translate>(), _1, _2, translate)
|
||||
boost::bind<bool>(detail::translate_exception<ExceptionType,Translate>(), _1, _2, translate)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
#ifndef OBJECT_CORE_DWA2002615_HPP
|
||||
# define OBJECT_CORE_DWA2002615_HPP
|
||||
|
||||
# define BOOST_PYTHON_OBJECT_HAS_IS_NONE // added 2010-03-15 by rwgk
|
||||
|
||||
# include <boost/python/detail/prefix.hpp>
|
||||
|
||||
# include <boost/type.hpp>
|
||||
@@ -239,7 +241,9 @@ namespace api
|
||||
|
||||
// Underlying object access -- returns a borrowed reference
|
||||
inline PyObject* ptr() const;
|
||||
|
||||
|
||||
inline bool is_none() const;
|
||||
|
||||
private:
|
||||
PyObject* m_ptr;
|
||||
};
|
||||
@@ -539,6 +543,11 @@ inline PyObject* api::object_base::ptr() const
|
||||
return m_ptr;
|
||||
}
|
||||
|
||||
inline bool api::object_base::is_none() const
|
||||
{
|
||||
return (m_ptr == Py_None);
|
||||
}
|
||||
|
||||
//
|
||||
// Converter specialization implementations
|
||||
//
|
||||
|
||||
20
src/exec.cpp
20
src/exec.cpp
@@ -17,15 +17,14 @@ namespace python
|
||||
object BOOST_PYTHON_DECL eval(str string, object global, object local)
|
||||
{
|
||||
// Set suitable default values for global and local dicts.
|
||||
object none;
|
||||
if (global.ptr() == none.ptr())
|
||||
if (global.is_none())
|
||||
{
|
||||
if (PyObject *g = PyEval_GetGlobals())
|
||||
global = object(detail::borrowed_reference(g));
|
||||
else
|
||||
global = dict();
|
||||
}
|
||||
if (local.ptr() == none.ptr()) local = global;
|
||||
if (local.is_none()) local = global;
|
||||
// should be 'char const *' but older python versions don't use 'const' yet.
|
||||
char *s = python::extract<char *>(string);
|
||||
PyObject* result = PyRun_String(s, Py_eval_input, global.ptr(), local.ptr());
|
||||
@@ -36,15 +35,14 @@ object BOOST_PYTHON_DECL eval(str string, object global, object local)
|
||||
object BOOST_PYTHON_DECL exec(str string, object global, object local)
|
||||
{
|
||||
// Set suitable default values for global and local dicts.
|
||||
object none;
|
||||
if (global.ptr() == none.ptr())
|
||||
if (global.is_none())
|
||||
{
|
||||
if (PyObject *g = PyEval_GetGlobals())
|
||||
global = object(detail::borrowed_reference(g));
|
||||
else
|
||||
global = dict();
|
||||
}
|
||||
if (local.ptr() == none.ptr()) local = global;
|
||||
if (local.is_none()) local = global;
|
||||
// should be 'char const *' but older python versions don't use 'const' yet.
|
||||
char *s = python::extract<char *>(string);
|
||||
PyObject* result = PyRun_String(s, Py_file_input, global.ptr(), local.ptr());
|
||||
@@ -55,15 +53,14 @@ object BOOST_PYTHON_DECL exec(str string, object global, object local)
|
||||
object BOOST_PYTHON_DECL exec_statement(str string, object global, object local)
|
||||
{
|
||||
// Set suitable default values for global and local dicts.
|
||||
object none;
|
||||
if (global.ptr() == none.ptr())
|
||||
if (global.is_none())
|
||||
{
|
||||
if (PyObject *g = PyEval_GetGlobals())
|
||||
global = object(detail::borrowed_reference(g));
|
||||
else
|
||||
global = dict();
|
||||
}
|
||||
if (local.ptr() == none.ptr()) local = global;
|
||||
if (local.is_none()) local = global;
|
||||
// should be 'char const *' but older python versions don't use 'const' yet.
|
||||
char *s = python::extract<char *>(string);
|
||||
PyObject* result = PyRun_String(s, Py_single_input, global.ptr(), local.ptr());
|
||||
@@ -77,15 +74,14 @@ object BOOST_PYTHON_DECL exec_statement(str string, object global, object local)
|
||||
object BOOST_PYTHON_DECL exec_file(str filename, object global, object local)
|
||||
{
|
||||
// Set suitable default values for global and local dicts.
|
||||
object none;
|
||||
if (global.ptr() == none.ptr())
|
||||
if (global.is_none())
|
||||
{
|
||||
if (PyObject *g = PyEval_GetGlobals())
|
||||
global = object(detail::borrowed_reference(g));
|
||||
else
|
||||
global = dict();
|
||||
}
|
||||
if (local.ptr() == none.ptr()) local = global;
|
||||
if (local.is_none()) local = global;
|
||||
// should be 'char const *' but older python versions don't use 'const' yet.
|
||||
char *f = python::extract<char *>(filename);
|
||||
#if PY_VERSION_HEX >= 0x03000000
|
||||
|
||||
@@ -144,7 +144,7 @@ PyObject* function::call(PyObject* args, PyObject* keywords) const
|
||||
if (n_keyword_actual > 0 // Keyword arguments were supplied
|
||||
|| n_actual < min_arity) // or default keyword values are needed
|
||||
{
|
||||
if (f->m_arg_names.ptr() == Py_None)
|
||||
if (f->m_arg_names.is_none())
|
||||
{
|
||||
// this overload doesn't accept keywords
|
||||
inner_args = handle<>();
|
||||
@@ -487,7 +487,7 @@ void function::add_to_namespace(
|
||||
}
|
||||
|
||||
// A function is named the first time it is added to a namespace.
|
||||
if (new_func->name().ptr() == Py_None)
|
||||
if (new_func->name().is_none())
|
||||
new_func->m_name = name;
|
||||
|
||||
handle<> name_space_name(
|
||||
@@ -653,7 +653,7 @@ extern "C"
|
||||
static PyObject* function_get_name(PyObject* op, void*)
|
||||
{
|
||||
function* f = downcast<function>(op);
|
||||
if (f->name().ptr() == Py_None)
|
||||
if (f->name().is_none())
|
||||
#if PY_VERSION_HEX >= 0x03000000
|
||||
return PyUnicode_InternFromString("<unnamed Boost.Python function>");
|
||||
#else
|
||||
|
||||
@@ -38,21 +38,21 @@ namespace {
|
||||
}
|
||||
object getinitargs = getattr(instance_obj, "__getinitargs__", none);
|
||||
tuple initargs;
|
||||
if (getinitargs.ptr() != none.ptr()) {
|
||||
if (!getinitargs.is_none()) {
|
||||
initargs = tuple(getinitargs());
|
||||
}
|
||||
result.append(initargs);
|
||||
object getstate = getattr(instance_obj, "__getstate__", none);
|
||||
object instance_dict = getattr(instance_obj, "__dict__", none);
|
||||
long len_instance_dict = 0;
|
||||
if (instance_dict.ptr() != none.ptr()) {
|
||||
if (!instance_dict.is_none()) {
|
||||
len_instance_dict = len(instance_dict);
|
||||
}
|
||||
if (getstate.ptr() != none.ptr()) {
|
||||
if (!getstate.is_none()) {
|
||||
if (len_instance_dict > 0) {
|
||||
object getstate_manages_dict = getattr(
|
||||
instance_obj, "__getstate_manages_dict__", none);
|
||||
if (getstate_manages_dict.ptr() == none.ptr()) {
|
||||
if (getstate_manages_dict.is_none()) {
|
||||
PyErr_SetString(PyExc_RuntimeError,
|
||||
"Incomplete pickle support"
|
||||
" (__getstate_manages_dict__ not set)");
|
||||
|
||||
@@ -37,6 +37,13 @@ rule py-compile-fail ( sources * )
|
||||
return [ compile-fail $(sources) /boost/python//boost_python ] ;
|
||||
}
|
||||
|
||||
rule require-windows ( properties * )
|
||||
{
|
||||
if ! <target-os>windows in $(properties)
|
||||
{
|
||||
return <build>no ;
|
||||
}
|
||||
}
|
||||
|
||||
test-suite python
|
||||
:
|
||||
@@ -184,8 +191,8 @@ bpl-test crossmod_opaque
|
||||
# bpl-test bienstman5 ;
|
||||
# }
|
||||
|
||||
[ bpl-test calling_conventions ]
|
||||
[ bpl-test calling_conventions_mf ]
|
||||
[ bpl-test calling_conventions : : <conditional>@require-windows ]
|
||||
[ bpl-test calling_conventions_mf : : <conditional>@require-windows ]
|
||||
|
||||
# --- unit tests of library components ---
|
||||
|
||||
|
||||
@@ -22,6 +22,10 @@ struct foo
|
||||
*kills++ = n;
|
||||
}
|
||||
int n;
|
||||
|
||||
// This used to cause compiler errors with MSVC 9.0.
|
||||
foo& operator~();
|
||||
foo& T();
|
||||
};
|
||||
|
||||
void assert_destructions(int n)
|
||||
|
||||
@@ -61,11 +61,11 @@ void exec_test()
|
||||
// Register the module with the interpreter
|
||||
if (PyImport_AppendInittab(const_cast<char*>("embedded_hello"),
|
||||
#if PY_VERSION_HEX >= 0x03000000
|
||||
PyInit_embedded_hello
|
||||
PyInit_embedded_hello
|
||||
#else
|
||||
initembedded_hello
|
||||
initembedded_hello
|
||||
#endif
|
||||
) == -1)
|
||||
) == -1)
|
||||
throw std::runtime_error("Failed to add embedded_hello to the interpreter's "
|
||||
"builtin modules");
|
||||
// Retrieve the main module
|
||||
|
||||
Reference in New Issue
Block a user