[pygccxml-commit] SF.net SVN: pygccxml: [589] pyplusplus_dev
Brought to you by:
mbaas,
roman_yakovenko
|
From: <rom...@us...> - 2006-09-26 08:55:15
|
Revision: 589
http://svn.sourceforge.net/pygccxml/?rev=589&view=rev
Author: roman_yakovenko
Date: 2006-09-26 01:54:57 -0700 (Tue, 26 Sep 2006)
Log Message:
-----------
adding initial support for properties
Modified Paths:
--------------
pyplusplus_dev/pyplusplus/code_creators/__init__.py
pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py
pyplusplus_dev/pyplusplus/module_creator/creator.py
pyplusplus_dev/unittests/test_all.py
Added Paths:
-----------
pyplusplus_dev/unittests/data/properties_to_be_exported.hpp
pyplusplus_dev/unittests/properties_tester.py
Modified: pyplusplus_dev/pyplusplus/code_creators/__init__.py
===================================================================
--- pyplusplus_dev/pyplusplus/code_creators/__init__.py 2006-09-26 08:52:53 UTC (rev 588)
+++ pyplusplus_dev/pyplusplus/code_creators/__init__.py 2006-09-26 08:54:57 UTC (rev 589)
@@ -124,3 +124,5 @@
from exception_translator import exception_translator_register_t
from opaque_type_registrator import opaque_type_registrator_t
+
+from properties import property_t
Modified: pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py
===================================================================
--- pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py 2006-09-26 08:52:53 UTC (rev 588)
+++ pyplusplus_dev/pyplusplus/decl_wrappers/class_wrapper.py 2006-09-26 08:54:57 UTC (rev 589)
@@ -7,6 +7,7 @@
import os
import user_text
+import properties
import decl_wrapper
import scopedef_wrapper
from pygccxml import declarations
@@ -137,6 +138,7 @@
self._null_constructor_body = ''
self._copy_constructor_body = ''
self._exception_translation_code = None
+ self._properties = []
def _get_redefine_operators( self ):
return self._redefine_operators
@@ -310,3 +312,25 @@
if sort:
sorted_members = sort( members )
return sorted_members
+
+ @property
+ def properties( self ):
+ """list of properties"""
+ return self._properties
+
+ def add_property( self, name, fget, fset=None, doc='' ):
+ """adds new property to the class
+
+ @param name: name of the property
+ @type name: str
+
+ @param fget: reference to the class member function
+ @param fset: reference to the class member function, could be None
+ @param doc: documentation string
+ """
+ self._properties.append( properties.property_t( name, fget, fset, doc ) )
+
+ def add_static_property( self, name, fget, fset=None, doc='' ):
+ """adds new static property to the class"""
+ self._properties.append( properties.property_t( name, fget, fset, doc, True ) )
+
Modified: pyplusplus_dev/pyplusplus/module_creator/creator.py
===================================================================
--- pyplusplus_dev/pyplusplus/module_creator/creator.py 2006-09-26 08:52:53 UTC (rev 588)
+++ pyplusplus_dev/pyplusplus/module_creator/creator.py 2006-09-26 08:54:57 UTC (rev 589)
@@ -331,14 +331,14 @@
else:#class declaration:
decl = declarations.class_declaration_traits.get_declaration( naked_type )
opaque_type_registrator = None
- if not id(decl) in self.__exposed_opaque_decls.keys():
+ if id(decl) not in self.__exposed_opaque_decls.keys():
opaque_type_registrator = code_creators.opaque_type_registrator_t( decl )
self.__exposed_opaque_decls[ id(decl) ] = opaque_type_registrator
self.__extmodule.adopt_declaration_creator( opaque_type_registrator )
else:
opaque_type_registrator = self.__exposed_opaque_decls[ id(decl) ]
creator.associated_decl_creators.append(opaque_type_registrator)
-
+
def _adopt_free_operator( self, operator ):
def adopt_operator_impl( operator, found_creators ):
creator = filter( lambda creator: isinstance( creator, code_creators.class_t )
@@ -561,7 +561,7 @@
self.curr_code_creator.adopt_creator( maker )
self.register_opaque_type( maker, self.curr_decl.return_type, self.curr_decl.call_policies )
-
+
# Make sure all required headers are included...
required_headers = getattr(fwrapper, "get_required_headers", lambda : [])()
for header in required_headers:
@@ -654,7 +654,7 @@
self.__types_db.update( f )
if None is f.call_policies:
f.call_policies = self.__call_policies_resolver( f )
-
+
overloads_cls_creator = code_creators.free_fun_overloads_class_t( overloads )
self.__extmodule.adopt_declaration_creator( overloads_cls_creator )
@@ -697,11 +697,11 @@
overloads_cls_creator = code_creators.mem_fun_overloads_class_t( overloads )
self.__extmodule.adopt_declaration_creator( overloads_cls_creator )
-
+
overloads_reg = code_creators.mem_fun_overloads_t( overloads_cls_creator )
cls_creator.adopt_creator( overloads_reg )
overloads_reg.associated_decl_creators.append( overloads_cls_creator )
-
+
self.register_opaque_type( overloads_reg, f.return_type, f.call_policies )
return exposed
@@ -769,6 +769,9 @@
= code_creators.exception_translator_register_t( cls_decl, translator )
cls_cc.adopt_creator( translator_register )
+ for property_def in cls_decl.properties:
+ cls_cc.adopt_creator( code_creators.property_t(property_def) )
+
self.curr_decl = cls_decl
self.curr_code_creator = cls_parent_cc
Added: pyplusplus_dev/unittests/data/properties_to_be_exported.hpp
===================================================================
--- pyplusplus_dev/unittests/data/properties_to_be_exported.hpp (rev 0)
+++ pyplusplus_dev/unittests/data/properties_to_be_exported.hpp 2006-09-26 08:54:57 UTC (rev 589)
@@ -0,0 +1,28 @@
+// 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 __properties_to_be_exported_hpp__
+#define __properties_to_be_exported_hpp__
+
+namespace properties{
+
+struct properties_tester_t{
+ properties_tester_t()
+ : m_count( 0 )
+ {}
+
+ int count() const
+ { return m_count; }
+
+ void set_count( int x )
+ { m_count = x; }
+
+ int m_count;
+};
+
+}
+
+
+#endif//__properties_to_be_exported_hpp__
Added: pyplusplus_dev/unittests/properties_tester.py
===================================================================
--- pyplusplus_dev/unittests/properties_tester.py (rev 0)
+++ pyplusplus_dev/unittests/properties_tester.py 2006-09-26 08:54:57 UTC (rev 589)
@@ -0,0 +1,40 @@
+# 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
+
+class tester_t(fundamental_tester_base.fundamental_tester_base_t):
+ EXTENSION_NAME = 'properties'
+
+ def __init__( self, *args ):
+ fundamental_tester_base.fundamental_tester_base_t.__init__(
+ self
+ , tester_t.EXTENSION_NAME
+ , *args )
+
+ def customize(self, mb ):
+ cls = mb.class_( 'properties_tester_t' )
+ count = cls.member_function( 'count' )
+ set_count = cls.member_function( 'set_count' )
+ count.exclude()
+ set_count.exclude()
+ cls.add_property( "count", count, set_count )
+
+ def run_tests(self, module):
+ pass
+
+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 2006-09-26 08:52:53 UTC (rev 588)
+++ pyplusplus_dev/unittests/test_all.py 2006-09-26 08:54:57 UTC (rev 589)
@@ -62,6 +62,7 @@
import no_init_tester
import overloads_macro_tester
import split_module_tester
+import properties_tester
def create_suite(times):
testers = [
@@ -120,6 +121,7 @@
, no_init_tester
, overloads_macro_tester
, split_module_tester
+ , properties_tester
]
main_suite = unittest.TestSuite()
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|