[pygccxml-commit] SF.net SVN: pygccxml:[1398] pyplusplus_dev
Brought to you by:
mbaas,
roman_yakovenko
|
From: <rom...@us...> - 2008-08-20 06:20:38
|
Revision: 1398
http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1398&view=rev
Author: roman_yakovenko
Date: 2008-08-20 06:20:45 +0000 (Wed, 20 Aug 2008)
Log Message:
-----------
improve dependencies_manager.py class algorithm
add new test
Modified Paths:
--------------
pyplusplus_dev/pyplusplus/decl_wrappers/decl_wrapper.py
pyplusplus_dev/pyplusplus/decl_wrappers/properties.py
pyplusplus_dev/pyplusplus/file_writers/multiple_files.py
pyplusplus_dev/pyplusplus/module_creator/dependencies_manager.py
pyplusplus_dev/pyplusplus/module_creator/types_database.py
pyplusplus_dev/unittests/test_all.py
Added Paths:
-----------
pyplusplus_dev/unittests/data/return_auto_ptr_to_be_exported.hpp
pyplusplus_dev/unittests/return_auto_ptr_tester.py
Modified: pyplusplus_dev/pyplusplus/decl_wrappers/decl_wrapper.py
===================================================================
--- pyplusplus_dev/pyplusplus/decl_wrappers/decl_wrapper.py 2008-08-18 18:58:51 UTC (rev 1397)
+++ pyplusplus_dev/pyplusplus/decl_wrappers/decl_wrapper.py 2008-08-20 06:20:45 UTC (rev 1398)
@@ -185,10 +185,11 @@
return messages.filter_disabled_msgs( msgs, self.__msgs_to_ignore )
@property
- def disabled_messaged( self ):
+ def disabled_messages( self ):
"""list of messages to ignore"""
return self.__msgs_to_ignore
-
+ disabled_messaged = disabled_messages
+
def disable_messages( self, *args ):
"""set messages, which should not be reported to you
Modified: pyplusplus_dev/pyplusplus/decl_wrappers/properties.py
===================================================================
--- pyplusplus_dev/pyplusplus/decl_wrappers/properties.py 2008-08-18 18:58:51 UTC (rev 1397)
+++ pyplusplus_dev/pyplusplus/decl_wrappers/properties.py 2008-08-20 06:20:45 UTC (rev 1398)
@@ -262,7 +262,7 @@
def __report_illegal_property( self, property_ ):
logger = _logging_.loggers.declarations
- if not messages.filter_disabled_msgs([messages.W1041], property_.fget.parent.disabled_messaged ):
+ if not messages.filter_disabled_msgs([messages.W1041], property_.fget.parent.disabled_messages ):
return #user disabled property warning
logger.warn( "%s;%s" % ( property_.fget.parent, messages.W1041 % property_ ) )
Modified: pyplusplus_dev/pyplusplus/file_writers/multiple_files.py
===================================================================
--- pyplusplus_dev/pyplusplus/file_writers/multiple_files.py 2008-08-18 18:58:51 UTC (rev 1397)
+++ pyplusplus_dev/pyplusplus/file_writers/multiple_files.py 2008-08-20 06:20:45 UTC (rev 1398)
@@ -155,7 +155,7 @@
return self.create_value_traits_header_name( value_class )
except RuntimeError, error:
decls_logger = _logging_.loggers.declarations
- if not messages.filter_disabled_msgs([messages.W1042], code_creator.declaration.disabled_messaged ):
+ if not messages.filter_disabled_msgs([messages.W1042], code_creator.declaration.disabled_messages ):
return #user disabled property warning
decls_logger.warn( "%s;%s" % ( code_creator.declaration, messages.W1042 ) )
Modified: pyplusplus_dev/pyplusplus/module_creator/dependencies_manager.py
===================================================================
--- pyplusplus_dev/pyplusplus/module_creator/dependencies_manager.py 2008-08-18 18:58:51 UTC (rev 1397)
+++ pyplusplus_dev/pyplusplus/module_creator/dependencies_manager.py 2008-08-20 06:20:45 UTC (rev 1398)
@@ -81,29 +81,44 @@
, dependencies )
return dependencies
+ def __has_unexposed_dependency( self, exported_ids, depend_on_decl ):
+ sptr_traits = declarations.smart_pointer_traits
+
+ if None is depend_on_decl:
+ return
+
+ if self.__is_std_decl( depend_on_decl ):
+ return
+
+ if sptr_traits.is_smart_pointer( depend_on_decl ):
+ try:
+ value_type = sptr_traits.value_type( depend_on_decl )
+ return self.__has_unexposed_dependency( exported_ids, value_type )
+ except RuntimeError:
+ pass
+
+ if isinstance( depend_on_decl, decl_wrappers.decl_wrapper_t ):
+ if depend_on_decl.already_exposed:
+ return
+ if isinstance( depend_on_decl, declarations.class_types ):
+ if depend_on_decl.opaque:
+ return
+ if isinstance( depend_on_decl, declarations.variable_t ):
+ if not decl.expose_value:
+ return
+
+ return id( depend_on_decl ) not in exported_ids
+
def __find_out_used_but_not_exported( self ):
used_not_exported = []
exported_ids = set( map( lambda d: id( d ), self.__exported_decls ) )
for decl in self.__exported_decls:
- for dependency in self.__build_dependencies( decl ):
- depend_on_decl = dependency.find_out_depend_on_declaration()
- if None is depend_on_decl:
- continue
- if self.__is_std_decl( depend_on_decl ):
- continue
- if isinstance( depend_on_decl, decl_wrappers.decl_wrapper_t ):
- if depend_on_decl.already_exposed:
- continue
- if isinstance( depend_on_decl, declarations.class_types ):
- if depend_on_decl.opaque:
- continue
- if isinstance( decl, declarations.variable_t ):
- if not decl.expose_value:
- continue
- if id( depend_on_decl ) not in exported_ids:
- report = messages.filter_disabled_msgs([messages.W1040], depend_on_decl.disabled_messaged )
- if report:
- used_not_exported.append( dependency )
+ for dependency in self.__build_dependencies( decl ):
+ depend_on_decl = dependency.find_out_depend_on_declaration()
+ if self.__has_unexposed_dependency( exported_ids, depend_on_decl ):
+ if messages.filter_disabled_msgs([messages.W1040], depend_on_decl.disabled_messages ):
+ #need to report dependency errors
+ used_not_exported.append(dependency)
return used_not_exported
def __group_by_unexposed( self, dependencies ):
Modified: pyplusplus_dev/pyplusplus/module_creator/types_database.py
===================================================================
--- pyplusplus_dev/pyplusplus/module_creator/types_database.py 2008-08-18 18:58:51 UTC (rev 1397)
+++ pyplusplus_dev/pyplusplus/module_creator/types_database.py 2008-08-20 06:20:45 UTC (rev 1398)
@@ -75,7 +75,7 @@
container_cls.indexing_suite.element_type
except RuntimeError:
decls_logger = _logging_.loggers.declarations
- if not messages.filter_disabled_msgs([messages.W1042], container_cls.disabled_messaged ):
+ if not messages.filter_disabled_msgs([messages.W1042], container_cls.disabled_messages ):
return #user disabled property warning
decls_logger.warn( "%s;%s" % ( container_cls, messages.W1042 ) )
self.__containers.add( container_cls )
Added: pyplusplus_dev/unittests/data/return_auto_ptr_to_be_exported.hpp
===================================================================
--- pyplusplus_dev/unittests/data/return_auto_ptr_to_be_exported.hpp (rev 0)
+++ pyplusplus_dev/unittests/data/return_auto_ptr_to_be_exported.hpp 2008-08-20 06:20:45 UTC (rev 1398)
@@ -0,0 +1,52 @@
+// Copyright 2004 Roman Yakovenko.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef __return_auto_ptr_to_be_exported_hpp__
+#define __return_auto_ptr_to_be_exported_hpp__
+#include "boost/shared_ptr.hpp"
+#include <memory>
+
+
+namespace smart_pointers{
+
+struct r_input_t{
+ r_input_t(unsigned int rows, unsigned int cols)
+ : m_rows(rows)
+ , m_cols(cols)
+ {}
+
+ unsigned int rows() const {return m_rows;}
+ unsigned int cols() const {return m_cols;}
+
+private:
+ unsigned int m_rows;
+ unsigned int m_cols;
+};
+
+
+class generic_input_t
+{
+public:
+ // Pure virtual function to convert to the required type
+ virtual std::auto_ptr<r_input_t> create_r_input() = 0;
+
+ virtual boost::shared_ptr<r_input_t> create_r_input_shared() = 0;
+};
+
+
+// Function which converts generic_input_t to r_input_t
+std::auto_ptr<r_input_t> process_input(generic_input_t& input)
+{
+ return input.create_r_input();
+}
+
+boost::shared_ptr<r_input_t> process_input_shared(generic_input_t& input)
+{
+ return input.create_r_input_shared();
+}
+
+}
+
+#endif//__return_auto_ptr_to_be_exported_hpp__
Added: pyplusplus_dev/unittests/return_auto_ptr_tester.py
===================================================================
--- pyplusplus_dev/unittests/return_auto_ptr_tester.py (rev 0)
+++ pyplusplus_dev/unittests/return_auto_ptr_tester.py 2008-08-20 06:20:45 UTC (rev 1398)
@@ -0,0 +1,66 @@
+# Copyright 2004 Roman Yakovenko.
+# Distributed under the Boost Software License, Version 1.0. (See
+# accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+import os
+import sys
+import unittest
+import fundamental_tester_base
+from pyplusplus import code_creators
+from pyplusplus import messages
+
+class tester_t(fundamental_tester_base.fundamental_tester_base_t):
+ EXTENSION_NAME = 'return_auto_ptr'
+
+ def __init__( self, *args ):
+ fundamental_tester_base.fundamental_tester_base_t.__init__(
+ self
+ , tester_t.EXTENSION_NAME
+ , *args )
+
+ def customize( self, mb ):
+ pass
+ #~ r_input = mb.class_( 'r_input_t' )
+ #~ r_input.held_type = 'std::auto_ptr< %s >' % r_input.decl_string
+
+ def create_py_input( self, module, rows, cols ):
+ class py_input_t( module.generic_input_t ):
+ def __init__( self, rows, cols ):
+ module.generic_input_t.__init__( self )
+ self.rows = rows
+ self.cols = cols
+
+ def create_r_input( self ):
+ return module.r_input_t( self.rows, self.cols )
+
+ def create_r_input_shared( self ):
+ return module.r_input_t( self.rows, self.cols )
+
+ return py_input_t(rows, cols)
+
+ def run_tests( self, module):
+ a = self.create_py_input( module, 3, 7 )
+ c = a.create_r_input()
+ self.failUnless( c.rows() == 3 and c.cols() == 7 )
+ try:
+ b = module.process_input(a)
+ self.failUnless( b.rows() == 3 and b.cols() == 7 )
+ except TypeError, err:
+ print err
+
+ c = a.create_r_input_shared()
+ self.failUnless( c.rows() == 3 and c.cols() == 7 )
+ b = module.process_input_shared(a)
+ self.failUnless( b.rows() == 3 and b.cols() == 7 )
+
+def create_suite():
+ suite = unittest.TestSuite()
+ suite.addTest( unittest.makeSuite(tester_t))
+ return suite
+
+def run_suite():
+ unittest.TextTestRunner(verbosity=2).run( create_suite() )
+
+if __name__ == "__main__":
+ run_suite()
Modified: pyplusplus_dev/unittests/test_all.py
===================================================================
--- pyplusplus_dev/unittests/test_all.py 2008-08-18 18:58:51 UTC (rev 1397)
+++ pyplusplus_dev/unittests/test_all.py 2008-08-20 06:20:45 UTC (rev 1398)
@@ -108,6 +108,7 @@
import unions_tester
import cp_return_addressof_tester
import make_constructor_tester
+import return_auto_ptr_tester
#import ogre_generate_tester
testers = [
@@ -204,6 +205,7 @@
, unions_tester
, cp_return_addressof_tester
, make_constructor_tester
+ , return_auto_ptr_tester
# , ogre_generate_tester too much time
]
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|