]> git.wh0rd.org - ICEs.git/blame - 321197/pyside.ii.6
more
[ICEs.git] / 321197 / pyside.ii.6
CommitLineData
bd3239d2
MF
1class QString { public: inline QString(const char *ch); };
2class QGenericArgument {};
3class QWebPage {
4 public:
5 template <typename T> inline void qt_check_for_QOBJECT_macro(const T &_q_argument);
6 class ExtensionOption {};
7};
8namespace boost {
9 namespace mpl {
10 template< bool C_ > struct bool_;
11 typedef bool_<false> false_;
12 template< bool C_ > struct bool_ {
13 static const bool value = C_;
14 };
15 template< typename T, T N > struct integral_c {
16 static const T value = N;
17 };
18 }
19 template <class T, T val> struct integral_constant
20 : public mpl::integral_c<T, val>
21 {};
22
23 namespace detail {
24 template <typename T> struct cv_traits_imp {};
25 }
26
27 template< typename T > struct is_reference : ::boost::integral_constant<bool,false> {};
28 template< typename T > struct remove_cv {
29 typedef typename boost::detail::cv_traits_imp<T*> type;
30 };
31 template< typename T > struct is_integral : ::boost::integral_constant<bool,false> {};
32 template< typename T > struct is_float : ::boost::integral_constant<bool,false> {};
33 namespace type_traits {
34 template <bool b1, bool b2, bool b3 = false, bool b4 = false, bool b5 = false, bool b6 = false, bool b7 = false> struct ice_or;
35 template <> struct ice_or<false, false, false, false, false, false, false> {
36 static const bool value = false;
37 };
38 }
39
40 namespace detail {
41 template< typename T > struct is_arithmetic_impl {
42 static const bool value = (::boost::type_traits::ice_or< ::boost::is_integral<T>::value, ::boost::is_float<T>::value >::value);
43 };
44 }
45
46 template< typename T > struct is_arithmetic : ::boost::integral_constant<bool,::boost::detail::is_arithmetic_impl<T>::value> {};
47
48 namespace type_traits {
49 template <typename T> struct is_mem_fun_pointer_impl {
50 static const bool value = false;
51 };
52 template <bool b1, bool b2, bool b3 = true, bool b4 = true, bool b5 = true, bool b6 = true, bool b7 = true> struct ice_and;
53 template <bool b1, bool b2, bool b3, bool b4, bool b5, bool b6, bool b7> struct ice_and {
54 static const bool value = false;
55 };
56 template <bool b> struct ice_not {
57 static const bool value = true;
58 };
59 }
60 template< typename T > struct is_member_function_pointer : ::boost::integral_constant<bool,::boost::type_traits::is_mem_fun_pointer_impl<typename remove_cv<T>::type>::value> {};
61 template< typename T > struct is_member_pointer : ::boost::integral_constant<bool,::boost::is_member_function_pointer<T>::value> {};
62
63 namespace detail {
64 template< typename T > struct is_pointer_helper {
65 static const bool value = false;
66 };
67 template< typename T > struct is_pointer_impl {
68 static const bool value = (::boost::type_traits::ice_and< ::boost::detail::is_pointer_helper<typename remove_cv<T>::type>::value , ::boost::type_traits::ice_not< ::boost::is_member_pointer<T>::value >::value >::value);
69 };
70 }
71 template< typename T > struct is_pointer : ::boost::integral_constant<bool,::boost::detail::is_pointer_impl<T>::value> {};
72
73 struct na {};
74
75 namespace mpl {
76 template< bool C , typename T1 , typename T2 > struct if_c { typedef T2 type; };
77
78 template< typename T1 = na , typename T2 = na , typename T3 = na > struct if_ {
79 private: typedef if_c< static_cast<bool>(T1::value) , T2 , T3 > almost_type_;
80 public: typedef typename almost_type_::type type;
81 };
82 }
83
84 namespace python {
85 template<typename T> class is_handle {
86 public: static const bool value = false;
87 };
88 namespace detail {
89 template<typename T> struct is_borrowed_ptr {
90 static const bool value = false;
91 };
92 template <class T> struct is_auto_ptr : mpl::false_ {};
93 template <class T> struct copy_ctor_mutates_rhs : is_auto_ptr<T> {};
94 }
95
96 namespace converter {
97 template <class T> struct rvalue_from_python_storage {};
98 template <class T> struct rvalue_from_python_data : rvalue_from_python_storage<T> { ~rvalue_from_python_data(); };
99
100 template <class> struct pyobject_traits;
101 template <class T> struct handle_object_manager_traits : pyobject_traits<typename T::element_type> {};
102 template <class T> struct default_object_manager_traits {
103 static const bool is_specialized = python::detail::is_borrowed_ptr<T>::value;
104 };
105
106 template <class T> struct object_manager_traits : mpl::if_c< is_handle<T>::value , handle_object_manager_traits<T> , default_object_manager_traits<T> >::type {};
107 template <class T> struct is_object_manager : mpl::bool_<object_manager_traits<T>::is_specialized> {};
108 }
109
110 class object;
111 }
112
113 namespace detail {
114 template <typename T, bool isp, bool b1> struct ct_imp { typedef const T& param_type; };
115 }
116
117 template <typename T> struct call_traits {
118 typedef typename boost::detail::ct_imp< T, ::boost::is_pointer<T>::value, ::boost::is_arithmetic<T>::value >::param_type param_type;
119 };
120
121 namespace python {
122 namespace converter {
123 template <class Ptr> struct extract_pointer {};
124 template <class Ref> struct extract_reference {};
125 template <class T> struct extract_rvalue {
126 typedef typename mpl::if_< python::detail::copy_ctor_mutates_rhs<T> , T& , typename call_traits<T>::param_type >::type result_type;
127 mutable rvalue_from_python_data<T> m_data;
128 };
129 template <class T> struct extract_object_manager {};
130 template <class T> struct select_extract {
131 static const bool obj_mgr = is_object_manager<T>::value;
132 static const bool ptr = is_pointer<T>::value;
133 static const bool ref = is_reference<T>::value;
134 typedef typename mpl::if_c< obj_mgr , extract_object_manager<T> , typename mpl::if_c< ptr , extract_pointer<T> , typename mpl::if_c< ref , extract_reference<T> , extract_rvalue<T> >::type >::type >::type type;
135 };
136 }
137 template <class T> struct extract : converter::select_extract<T>::type {
138 private: typedef typename converter::select_extract<T>::type base;
139 public: typedef typename base::result_type result_type;
140 operator result_type() const {}
141 extract(object const&);
142 };
143 }
144}
145struct QHashData {
146 static QHashData shared_null;
147};
148template <class Key, class T> class QHash {
149 public: inline QHash() { }
150 T &operator[](const Key &key);
151};
152 class type_details {
153 typedef QGenericArgument(*func_python_to_cpp_type)(const boost::python::object&, const char*);
154 public: template<typename T> static type_details* create_object_type_details(const char* type_name) {}
155
156 template<typename T> static type_details* create_value_type_details(const char* type_name) {
157 type_details* self = new type_details();
158 self->m_func_python_to_cpp = &python_to_value_type<T>;
159 }
160 func_python_to_cpp_type m_func_python_to_cpp;
161 template <class T> static QGenericArgument python_to_value_type(const boost::python::object& obj, const char *type_name) {
162 T* val = new T(boost::python::extract<T>(obj));
163 }
164 };
165
166 class type_manager {
167 public: static type_manager& instance();
168 template<typename T> void register_value_type(const char* type_name) {
169 m_type_map[type_name] = type_details::create_value_type_details<T>(type_name);
170 }
171 QHash<QString, type_details* > m_type_map;
172 };
173class qwebpage_extensionoption_wrapper
174{
175static void define_python_class();
176};
177void qwebpage_extensionoption_wrapper::define_python_class() {
178type_manager::instance().register_value_type<QWebPage::ExtensionOption >("QWebPage::ExtensionOption");
179}