From 4a4ff9d4b21e7ed94524314ca496bd17c84fc4ed Mon Sep 17 00:00:00 2001 From: John Wiegley Date: Wed, 11 Nov 2009 02:58:06 -0500 Subject: Value.basetype in Python returns a Value's base type --- src/py_value.cc | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'src/py_value.cc') diff --git a/src/py_value.cc b/src/py_value.cc index 9653b0e1..c8e4de72 100644 --- a/src/py_value.cc +++ b/src/py_value.cc @@ -47,6 +47,22 @@ BOOST_PYTHON_MEMBER_FUNCTION_OVERLOADS(set_string_overloads, set_string, 0, 2) namespace { + PyObject * py_base_type(value_t& value) { + if (value.is_boolean()) { + return (PyObject *)&PyBool_Type; + } + else if (value.is_long()) { + return (PyObject *)&PyInt_Type; + } + else if (value.is_string()) { + return (PyObject *)&PyUnicode_Type; + } + else { + object typeobj(object(value).attr("__class__")); + return typeobj.ptr(); + } + } + expr_t py_value_getattr(const value_t& value, const string& name) { if (value.is_scope()) { @@ -305,6 +321,8 @@ void export_value() .def("label", &value_t::label) .def("valid", &value_t::valid) + + .def("basetype", py_base_type) ; scope().attr("NULL_VALUE") = NULL_VALUE; -- cgit v1.2.3