python 3.2 compatiblity (closes #56)
diff --git a/example/example2.py b/example/example2.py
index f42ee49..4220134 100755
--- a/example/example2.py
+++ b/example/example2.py
@@ -30,11 +30,11 @@
instance.print_dict_2(dict_result)
set_result = instance.get_set()
-set_result.add(u'key3')
+set_result.add('key3')
instance.print_set(set_result)
set_result = instance.get_set2()
-set_result.add(u'key3')
+set_result.add('key3')
instance.print_set_2(set_result)
list_result = instance.get_list()
diff --git a/include/pybind11/common.h b/include/pybind11/common.h
index 334ec13..1f3f1cb 100644
--- a/include/pybind11/common.h
+++ b/include/pybind11/common.h
@@ -10,25 +10,57 @@
#pragma once
#if !defined(NAMESPACE_BEGIN)
-#define NAMESPACE_BEGIN(name) namespace name {
+# define NAMESPACE_BEGIN(name) namespace name {
#endif
#if !defined(NAMESPACE_END)
-#define NAMESPACE_END(name) }
+# define NAMESPACE_END(name) }
#endif
#if !defined(PYBIND11_EXPORT)
-#if defined(WIN32) || defined(_WIN32)
-#define PYBIND11_EXPORT __declspec(dllexport)
-#else
-#define PYBIND11_EXPORT __attribute__ ((visibility("default")))
-#endif
-#endif
-#if defined(_MSC_VER)
-#define PYBIND11_NOINLINE __declspec(noinline)
-#else
-#define PYBIND11_NOINLINE __attribute__ ((noinline))
+# if defined(WIN32) || defined(_WIN32)
+# define PYBIND11_EXPORT __declspec(dllexport)
+# else
+# define PYBIND11_EXPORT __attribute__ ((visibility("default")))
+# endif
#endif
+#if defined(_MSC_VER)
+# define PYBIND11_NOINLINE __declspec(noinline)
+#else
+# define PYBIND11_NOINLINE __attribute__ ((noinline))
+#endif
+
+/// Include Python header, disable linking to pythonX_d.lib on Windows in debug mode
+#if defined(_MSC_VER)
+# define HAVE_ROUND
+# pragma warning(push)
+# pragma warning(disable: 4510 4610 4512 4005)
+# if _DEBUG
+# define _DEBUG_MARKER
+# undef _DEBUG
+# endif
+#endif
+
+#include <Python.h>
+#include <frameobject.h>
+
+#ifdef isalnum
+# undef isalnum
+# undef isalpha
+# undef islower
+# undef isspace
+# undef isupper
+# undef tolower
+# undef toupper
+#endif
+
+#if defined(_MSC_VER)
+# if defined(_DEBUG_MARKER)
+# define _DEBUG
+# undef _DEBUG_MARKER
+#endif
+# pragma warning(pop)
+#endif
#include <vector>
#include <string>
@@ -37,35 +69,6 @@
#include <unordered_map>
#include <memory>
-/// Include Python header, disable linking to pythonX_d.lib on Windows in debug mode
-#if defined(_MSC_VER)
-#define HAVE_ROUND
-#pragma warning(push)
-#pragma warning(disable: 4510 4610 4512 4005)
-#if _DEBUG
-#define _DEBUG_MARKER
-#undef _DEBUG
-#endif
-#endif
-#include <Python.h>
-#include <frameobject.h>
-#ifdef isalnum
-#undef isalnum
-#undef isalpha
-#undef islower
-#undef isspace
-#undef isupper
-#undef tolower
-#undef toupper
-#endif
-#if defined(_MSC_VER)
-#if defined(_DEBUG_MARKER)
-#define _DEBUG
-#undef _DEBUG_MARKER
-#endif
-#pragma warning(pop)
-#endif
-
#if PY_MAJOR_VERSION >= 3 /// Compatibility macros for various Python versions
#define PYBIND11_BYTES_CHECK PyBytes_Check
#define PYBIND11_BYTES_FROM_STRING PyBytes_FromString
diff --git a/include/pybind11/pytypes.h b/include/pybind11/pytypes.h
index 8f52471..10488c3 100644
--- a/include/pybind11/pytypes.h
+++ b/include/pybind11/pytypes.h
@@ -248,13 +248,13 @@
}
operator std::string() const {
-#if PY_MAJOR_VERSION >= 3
+#if PY_MAJOR_VERSION >= 3 && PY_MINOR_VERSION >= 3
return PyUnicode_AsUTF8(m_ptr);
#else
object temp(PyUnicode_AsUTF8String(m_ptr), false);
if (temp.ptr() == nullptr)
pybind11_fail("Unable to extract string contents!");
- return PyString_AsString(temp.ptr());
+ return PYBIND11_BYTES_AS_STRING(temp.ptr());
#endif
}
};