1
2
3
4
5
6 """This package defines all user messages (warnings + errors), which will be
7 reported to user.
8 """
11 """implementation details"""
12 - def __new__(self, value, identifier=None):
14
15 - def __init__(self, value, identifier=None):
17
18 @property
20 return self.__identifier
21
25
28
30 prefix = 'compilation error'
31
34
36 prefix = 'code generation error'
37
38
39 W0000 = warning( '%s' )
40
41 W1000 = compilation_error(
42 'Py++, by default, does not expose internal compilers declarations. '
43 'Names of those declarations usually start with "__".' )
44
45 W1001 = compilation_error(
46 'Py++, by default, does not expose internal declarations. '
47 'GCC-XML reports that these declaration belong to "<internal>" header.' )
48
49 W1002 = compilation_error(
50 'Py++, by default, does not expose compiler generated declarations.' )
51
52 W1003 = warning(
53 'Virtual functions that returns const reference cannot be overridden from Python. '
54 'Reason: boost::python::override::operator()(...) saves the result of the marshaling '
55 '(from Python to C++) on the stack. Thus operator() returns reference '
56 'to a temporary variable. Consider to use "Function Transformation" functionality '
57 'to solve the problem.' )
58
59 W1004 = compilation_error(
60 'Boost.Python library can not expose function, which takes as argument/returns '
61 'pointer to function. '
62 ' See http://www.boost.org/libs/python/doc/v2/faq.html#funcptr for more information.' )
63
64 W1005 = compilation_error(
65 'Py++ cannot expose function that takes as argument/returns instance of non-public class. '
66 'Generated code will not compile.' )
67
68 W1006 = compilation_error(
69 'Py++ need your help to expose function that takes as argument/returns C++ arrays. '
70 'Take a look on "Function Transformation" functionality and define the transformation.' )
71
72 W1007 = warning(
73 'The function has more than %d arguments ( %d ). '
74 'You should adjust BOOST_PYTHON_MAX_ARITY macro. '
75 'For more information see: http://www.boost.org/libs/python/doc/v2/configuration.html' )
76
77 W1008 = warning(
78 'The function returns non-const reference to "Python immutable" type. '
79 'The value cannot be modified from Python. ' )
80
81 W1009 = execution_error(
82 'The function takes as argument (name=%s, pos=%d) non-const reference '
83 'to Python immutable type - function could not be called from Python. '
84 'Take a look on "Function Transformation" functionality and define the transformation.' )
85
86 W1010 = execution_error(
87 'The function introduces registration order problem. '
88 'For more information about the problem read next document: '
89 'http://language-binding.net/pyplusplus/documentation/functions/registration_order.html '
90 'Problematic functions list: %s' )
91
92 W1011 = warning( "Py++ doesn't export private not virtual functions." )
93
94 W1012 = compilation_error( 'Py++ does not exports compiler generated constructors.' )
95
96 W1013 = compilation_error( "Py++ doesn't export private constructor." )
97
98 W1014 = compilation_error(
99 '"%s" is not supported. '
100 'See Boost.Python documentation: http://www.boost.org/libs/python/doc/v2/operators.html#introduction.' )
101
102 W1015 = compilation_error( "Py++ doesn't export private operators." )
103
104 W1016 = warning(
105 'Py++ does not exports non-const casting operators with user defined type as return value. '
106 'This could be changed in future.' )
107
108 W1017 = compilation_error( "Py++ doesn't export non-public casting operators." )
109
110 W1018 = compilation_error( 'Py++ can not expose anonymous class "%s", declared in a namespace.' )
111
112 W1019 = compilation_error( 'Py++ can not expose private class.' )
113
114 W1020 = warning( "Py++ will generate class wrapper - hand written code should be added to the wrapper class" )
115
116 W1021 = warning( "Py++ will generate class wrapper - hand written code should be added to the wrapper class null constructor body" )
117
118 W1022 = warning( "Py++ will generate class wrapper - hand written code should be added to the wrapper class copy constructor body" )
119
120 W1023 = warning(
121 "Py++ will generate class wrapper - there are few functions that should be redefined in class wrapper. "
122 "The functions are: %s." )
123
124 W1024 = warning( 'Py++ will generate class wrapper - class contains "%s" - bit field member variable' )
125
126 W1025 = warning( 'Py++ will generate class wrapper - class contains "%s" - T* member variable' )
127
128 W1026 = warning( 'Py++ will generate class wrapper - class contains "%s" - T& member variable' )
129
130 W1027 = warning( 'Py++ will generate class wrapper - class contains "%s" - array member variable' )
131
132 W1028 = warning( 'Py++ will generate class wrapper - class contains definition of nested class "%s", which requires wrapper class' )
133
134 W1029 = warning( "Py++ will generate class wrapper - hand written code should be added to the wrapper class constructor body" )
135
136 W1030 = warning( 'Py++ will generate class wrapper - class contains "%s" - [pure] virtual member function' )
137
138 W1031 = warning( 'Py++ will generate class wrapper - user asked to expose non - public member function "%s"' )
139
140 W1032 = execution_error(
141 "Boost.Python library does not support enums with duplicate values. "
142 "You can read more about this here: "
143 "http://boost.org/libs/python/todo.html#support-for-enums-with-duplicate-values . "
144 "The quick work around is to add new class variable to the exported enum, from Python. " )
145
146 W1033 = compilation_error( "Py++ can not expose anonymous variables" )
147
148 W1034 = compilation_error( "Py++ can not expose alignment bit." )
149
150 W1035 = compilation_error( "Py++ can not expose static pointer member variables. This could be changed in future." )
151
152 W1036 = compilation_error( "Py++ can not expose pointer to Python immutable member variables. This could be changed in future." )
153
154 W1037 = compilation_error(
155 "Boost.Python library can not expose variables, which are pointer to function."
156 " See http://www.boost.org/libs/python/doc/v2/faq.html#funcptr for more information." )
157
158 W1038 = compilation_error( "Py++ can not expose variables of with anonymous type." )
159
160 W1039 = compilation_error( "Py++ doesn't expose private or protected member variables." )
161
162 W1040 = execution_error(
163 'The declaration is unexposed, but there are other declarations, which refer to it. '
164 'This could cause "no to_python converter found" run time error. '
165 'Declarations: %s' )
166
167 W1041 = warning(
168 'Property "%s" could not be created. There is another exposed declaration with the same name( alias )." '
169 'The property will make it inaccessible.' )
170
171 W1042 = warning(
172 'Py++ can not find out container value_type( mapped_type ). '
173 'The container class is template instantiation declaration and not definition. '
174 'This container class will be exported, but there is a possibility, that '
175 'generated code will not compile or will lack some functionality. '
176 'The solution to the problem is to create a variable of the class.' )
177
178 W1043 = warning( 'Py++ created an ugly alias ("%s") for template instantiated class.' )
179
180 W1044 = warning( 'Py++ created an ugly alias ("%s") for function wrapper.' )
181
182 W1045 = compilation_error(
183 'Py++ does not expose static arrays with unknown size. '
184 'You can fix this by setting array size to the actual one.'
185 'For more information see "array_t" class documentation.' )
186
187 W1046 = warning(
188 'The virtual function was declared with empty throw. '
189 'Adding the ability to override the function from Python breaks the exception specification. '
190 'The function wrapper can throw any exception. '
191 'In case of exception in run-time, the behaviour of the program is undefined! ' )
192
193 W1047 = warning(
194 'There are two or more classes that use same alias("%s"). '
195 'Duplicated aliases causes few problems, but the main one is that some '
196 'of the classes will not be exposed to Python.'
197 'Other classes : %s' )
198
199 W1048 = warning(
200 'There are two or more aliases within "pyplusplus::aliases" namespace for '
201 'the class. Py++ selected "%s" as class alias. Other aliases: %s' )
202
203 W1049 = warning(
204 'This method could not be overriden in Python - method returns reference '
205 'to local variable!' )
206
207 W1050 = compilation_error(
208 'The function returns "%s" type. You have to specify a call policies.'
209 'Be sure to take a look on Py++ defined call policies: '
210 'http://language-binding.net/pyplusplus/documentation/functions/call_policies.html#py-defined-call-policies' )
211
212 W1051 = warning(
213 'The function takes as argument (name=%s, pos=%d) "%s" type. '
214 'You have to specify a call policies or to use "Function Transformation" '
215 'functionality.' )
216
217 W1052 = warning(
218 'Py++ will not expose free operator "%s" - all classes, this operator works on, are excluded.' )
219
220 W1053 = warning(
221 'Py++ will not expose function "%s" - the function has variable-argument list, spicified by ellipsis (...).' )
222
223 W1054 = compilation_error( 'Py++ can not expose unions.' )
224
225 W1055 = warning( "Py++ will generate class wrapper - hand written code should be added to the wrapper class destructor body" )
226
227 W1056 = compilation_error( "Py++ can not expose array of pointers of Python immutable types. Take a look on 'ctypes integration' feature." )
228
229 W1057 = compilation_error( 'Py++ can not expose "%s" - it does not belong to named class.' )
230
231 W1058 = compilation_error( 'Py++ can not expose "%s" it belongs to anonymous class'
232 ' and requires additional code to expose.'
233 ' This could be changed in future.')
234
235 W1059 = compilation_error( 'Py++ can not expose "%s" - it requires additional code to expose.'
236 ' This could be changed in future.')
237
238 W1060 = compilation_error( 'Py++ can not expose "%s" - it has name, Py++ only exposes anonymous unions.'
239 ' This could be changed in future.')
240
241 W1061 = compilation_error( 'Py++ can not expose "%s" - its type is "%s".'
242 ' This could be changed in future.')
243
244 W1062 = compilation_error( '"%s" contains "fake constructor" "%s", that was excluded.'
245 ' Py++ will not generate "__init__" method, based on that function.')
246
247 W1063 = compilation_error( '"%s" contains "fake constructor" "%s", that is exportable.'
248 ' Py++ will not generate "__init__" method, based on that function.')
249
250 W1064 = compilation_error( 'Py++ can not expose "%s" as "fake constructor" of "%s".'
251 ' Only the following function types supported: %s' )
252
253 W1065 = code_generation_error(
254 'There are two or more classes that use same class wrapper alias("%s"). '
255 'Duplicated class wrapper aliases causes few problems, but the main one is that during '
256 'files generation Py++ uses class wrapper aliases for the file names. '
257 'Py++ will rewrite the file content and at best will introduce compile time error. '
258 'The worst case scenario: you will discover the problem during run-time.'
259 'Use `wrapper_alias` property to change class wrapper alias value'
260 'Other classes : %s' )
261
262
263 warnings = globals()
264
265 all_warning_msgs = []
266
267 for identifier, explanation in warnings.items():
268 if len( identifier ) != 5:
269 continue
270 if identifier[0] != 'W':
271 continue
272 try:
273 int( identifier[1:] )
274 except:
275 continue
276 msg = '%s %s: %s' % ( explanation.__class__.prefix, identifier, str(explanation) )
277 msg_inst = explanation.__class__( msg, identifier )
278 globals()[ identifier ] = msg_inst
279 all_warning_msgs.append( msg_inst )
280
281
282 del warnings
283 del identifier
284 del explanation
285
286
287 if __name__ == '__main__':
288 x = W1051 % ( 'xxxxxxxx', 122, 'yyyyyyyyyy' )
289 print x
290 print x.__class__.__name__
291
292 print '\n\n\n'
293
294 y = W1000
295 print y
296