Revision: 1012
http://svn.sourceforge.net/pygccxml/?rev=1012&view=rev
Author: roman_yakovenko
Date: 2007-04-21 10:21:44 -0700 (Sat, 21 Apr 2007)
Log Message:
-----------
adding another set of performance optimizations, basically to reduce the number of "isinstance" calls
Modified Paths:
--------------
pygccxml_dev/pygccxml/parser/patcher.py
pygccxml_dev/pygccxml/parser/scanner.py
pygccxml_dev/pygccxml/parser/source_reader.py
Modified: pygccxml_dev/pygccxml/parser/patcher.py
===================================================================
--- pygccxml_dev/pygccxml/parser/patcher.py 2007-04-20 20:22:23 UTC (rev 1011)
+++ pygccxml_dev/pygccxml/parser/patcher.py 2007-04-21 17:21:44 UTC (rev 1012)
@@ -177,12 +177,11 @@
_casting_oper_patcher_ = casting_operator_patcher_t()
-def fix_decls(decls, enums):
+def fix_calldef_decls(decls, enums):
default_arg_patcher = default_argument_patcher_t(enums)
#decls should be flat list of all declarations, you want to apply patch on
for decl in decls:
- if isinstance( decl, declarations.calldef_t ):
- default_arg_patcher( decl )
+ default_arg_patcher( decl )
if isinstance( decl, declarations.casting_operator_t):
_casting_oper_patcher_( decl )
Modified: pygccxml_dev/pygccxml/parser/scanner.py
===================================================================
--- pygccxml_dev/pygccxml/parser/scanner.py 2007-04-20 20:22:23 UTC (rev 1011)
+++ pygccxml_dev/pygccxml/parser/scanner.py 2007-04-21 17:21:44 UTC (rev 1012)
@@ -127,7 +127,7 @@
#mapping from id -> decl
self.__declarations = {}
#list of all read declarations
- self.__all_declarations = []
+ self.__calldefs = []
#list of enums I need later
self.__enums = []
#mapping from id -> type
@@ -157,8 +157,8 @@
def declarations(self):
return self.__declarations
- def all_declarations( self ):
- return self.__all_declarations
+ def calldefs( self ):
+ return self.__calldefs
def enums(self):
return self.__enums
@@ -194,7 +194,6 @@
self.__read_access( attrs )
element_id = attrs.get(XML_AN_ID, None)
if isinstance( obj, declaration_t ):
- self.__all_declarations.append( obj )
self.__update_membership( attrs )
self.__declarations[ element_id ] = obj
if not isinstance( obj, namespace_t ):
@@ -335,10 +334,11 @@
argument.default_value = None
self.__inst.arguments.append( argument )
- def __read_calldef( self, calldef, attrs ):
+ def __read_calldef( self, calldef, attrs, is_declaration ):
#destructor for example doesn't have return type
calldef.return_type = attrs.get( XML_AN_RETURNS, None )
- if isinstance( calldef, declaration_t ):
+ if is_declaration:
+ self.__calldefs.append( calldef )
calldef.name = attrs.get(XML_AN_NAME, '')
calldef.has_extern = attrs.get( XML_AN_EXTERN, False )
throw_stmt = attrs.get( XML_AN_THROW, None )
@@ -352,10 +352,10 @@
calldef.does_throw = True
calldef.exceptions = throw_stmt.split()
- def __read_member_function( self, calldef, attrs ):
- self.__read_calldef( calldef, attrs )
+ def __read_member_function( self, calldef, attrs, is_declaration ):
+ self.__read_calldef( calldef, attrs, is_declaration )
calldef.has_const = attrs.get( XML_AN_CONST, False )
- if isinstance( calldef, declaration_t ):
+ if is_declaration:
calldef.has_static = attrs.get( XML_AN_STATIC, False )
if attrs.has_key( XML_AN_PURE_VIRTUAL ):
calldef.virtuality = VIRTUALITY_TYPES.PURE_VIRTUAL
@@ -368,12 +368,12 @@
def __read_function_type(self, attrs):
answer = free_function_type_t()
- self.__read_calldef( answer, attrs )
+ self.__read_calldef( answer, attrs, False )
return answer
def __read_method_type(self, attrs):
answer = member_function_type_t()
- self.__read_member_function( answer, attrs )
+ self.__read_member_function( answer, attrs, False )
return answer
def __read_typedef(self, attrs ):
@@ -420,33 +420,33 @@
def __read_casting_operator(self, attrs ):
operator = self.__decl_factory.create_casting_operator()
- self.__read_member_function( operator, attrs )
+ self.__read_member_function( operator, attrs, True )
return operator
def __read_constructor( self, attrs ):
constructor = self.__decl_factory.create_constructor()
- self.__read_member_function( constructor, attrs )
+ self.__read_member_function( constructor, attrs, True )
return constructor
def __read_function(self, attrs):
gfunction = self.__decl_factory.create_free_function()
- self.__read_calldef( gfunction, attrs )
+ self.__read_calldef( gfunction, attrs, True )
return gfunction
def __read_method(self, attrs):
mfunction = self.__decl_factory.create_member_function()
- self.__read_member_function( mfunction, attrs )
+ self.__read_member_function( mfunction, attrs, True )
return mfunction
def __read_destructor(self, attrs):
destructor = self.__decl_factory.create_destructor()
- self.__read_member_function( destructor, attrs )
+ self.__read_member_function( destructor, attrs, True )
destructor.name = '~' + destructor.name
return destructor
def __read_free_operator(self, attrs ):
operator = self.__decl_factory.create_free_operator()
- self.__read_member_function( operator, attrs )
+ self.__read_member_function( operator, attrs, True )
if 'new' in operator.name or 'delete' in operator.name:
operator.name = 'operator ' + operator.name
else:
@@ -455,7 +455,7 @@
def __read_member_operator(self, attrs):
operator = self.__decl_factory.create_member_operator()
- self.__read_member_function( operator, attrs )
+ self.__read_member_function( operator, attrs, True )
if 'new' in operator.name or 'delete' in operator.name:
operator.name = 'operator ' + operator.name
else:
Modified: pygccxml_dev/pygccxml/parser/source_reader.py
===================================================================
--- pygccxml_dev/pygccxml/parser/source_reader.py 2007-04-20 20:22:23 UTC (rev 1011)
+++ pygccxml_dev/pygccxml/parser/source_reader.py 2007-04-21 17:21:44 UTC (rev 1012)
@@ -338,7 +338,7 @@
#template< typename X>
#void ddd(){ typedef typename X::Y YY;}
#if I will fail on this bug next time, the right way to fix it may be different
- patcher.fix_decls( scanner_.all_declarations(), scanner_.enums() )
+ patcher.fix_calldef_decls( scanner_.calldefs(), scanner_.enums() )
decls = filter( lambda inst: isinstance( inst, namespace_t ) and not inst.parent
, decls.itervalues() )
return ( decls, files.values() )
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|