[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. |