Package pyplusplus :: Package messages :: Module warnings_

Source Code for Module pyplusplus.messages.warnings_

  1  # Copyright 2004-2008 Roman Yakovenko. 
  2  # Distributed under the Boost Software License, Version 1.0. (See 
  3  # accompanying file LICENSE_1_0.txt or copy at 
  4  # http://www.boost.org/LICENSE_1_0.txt) 
  5   
  6  """This package defines all user messages (warnings + errors), which will be 
  7  reported to user. 
  8  """ 
9 10 -class message_type(str):
11 """implementation details"""
12 - def __new__(self, value, identifier=None):
13 return str.__new__(self, value )
14
15 - def __init__(self, value, identifier=None):
16 self.__identifier = identifier
17 18 @property
19 - def identifier( self ):
20 return self.__identifier
21
22 - def __mod__( self, values ):
23 str_value = super( message_type, self ).__str__() 24 return self.__class__( str_value % values, self.identifier )
25
26 -class warning( message_type ):
27 prefix = 'warning'
28
29 -class compilation_error( message_type ):
30 prefix = 'compilation error'
31
32 -class execution_error( message_type ):
33 prefix = 'execution error'
34
35 -class code_generation_error( message_type ):
36 prefix = 'code generation error'
37 38 39 W0000 = warning( '%s' ) #general message, usefull in few cases 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