[pygccxml-commit] SF.net SVN: pygccxml:[1548] pygccxml_dev/pygccxml
Brought to you by:
mbaas,
roman_yakovenko
|
From: <rom...@us...> - 2009-01-07 22:21:33
|
Revision: 1548
http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1548&view=rev
Author: roman_yakovenko
Date: 2009-01-07 22:21:28 +0000 (Wed, 07 Jan 2009)
Log Message:
-----------
adding more intelligent "mangled" name
Modified Paths:
--------------
pygccxml_dev/pygccxml/declarations/calldef.py
pygccxml_dev/pygccxml/declarations/declaration.py
pygccxml_dev/pygccxml/declarations/variable.py
pygccxml_dev/pygccxml/parser/patcher.py
pygccxml_dev/pygccxml/parser/source_reader.py
Modified: pygccxml_dev/pygccxml/declarations/calldef.py
===================================================================
--- pygccxml_dev/pygccxml/declarations/calldef.py 2009-01-07 18:54:07 UTC (rev 1547)
+++ pygccxml_dev/pygccxml/declarations/calldef.py 2009-01-07 22:21:28 UTC (rev 1548)
@@ -593,6 +593,15 @@
def __init__( self, *args, **keywords ):
free_calldef_t.__init__( self, *args, **keywords )
+ def get_mangled_name( self ):
+ if not self._mangled and not self._demangled \
+ and not '<' in self.name and not self.overloads:
+ #it is possible we deal with C function, so lets put it name as mangled one
+ return self.name
+ else:
+ return self._mangled
+
+
class free_operator_t( free_calldef_t, operator_t ):
"""describes free operator declaration"""
def __init__( self, *args, **keywords ):
Modified: pygccxml_dev/pygccxml/declarations/declaration.py
===================================================================
--- pygccxml_dev/pygccxml/declarations/declaration.py 2009-01-07 18:54:07 UTC (rev 1547)
+++ pygccxml_dev/pygccxml/declarations/declaration.py 2009-01-07 22:21:28 UTC (rev 1548)
@@ -216,8 +216,11 @@
@type: bool
""")
+ def get_mangled_name( self ):
+ return self._mangled
+
def _get_mangled( self ):
- return self._mangled
+ return self.get_mangled_name()
def _set_mangled( self, mangled ):
self._mangled = mangled
mangled = property( _get_mangled, _set_mangled
Modified: pygccxml_dev/pygccxml/declarations/variable.py
===================================================================
--- pygccxml_dev/pygccxml/declarations/variable.py 2009-01-07 18:54:07 UTC (rev 1547)
+++ pygccxml_dev/pygccxml/declarations/variable.py 2009-01-07 22:21:28 UTC (rev 1548)
@@ -80,3 +80,10 @@
def i_depend_on_them( self, recursive=True ):
return [ dependencies.dependency_info_t( self, self.type ) ]
+
+ def get_mangled_name( self ):
+ if not self._mangled and not self._demangled \
+ and not isinstance( self.parent, class_declaration.class_t ):
+ return self.name
+ else:
+ return self._mangled
Modified: pygccxml_dev/pygccxml/parser/patcher.py
===================================================================
--- pygccxml_dev/pygccxml/parser/patcher.py 2009-01-07 18:54:07 UTC (rev 1547)
+++ pygccxml_dev/pygccxml/parser/patcher.py 2009-01-07 22:21:28 UTC (rev 1548)
@@ -186,4 +186,9 @@
default_arg_patcher( decl )
if isinstance( decl, declarations.casting_operator_t):
_casting_oper_patcher_( decl )
-
\ No newline at end of file
+
+def fix_mangled( decls ):
+ suffix = ' *INTERNAL* '
+ for d in decls:
+ if d.mangled and d.mangled.endswith( suffix ):
+ d.mangled = d.mangled[:-len( suffix )]
Modified: pygccxml_dev/pygccxml/parser/source_reader.py
===================================================================
--- pygccxml_dev/pygccxml/parser/source_reader.py 2009-01-07 18:54:07 UTC (rev 1547)
+++ pygccxml_dev/pygccxml/parser/source_reader.py 2009-01-07 22:21:28 UTC (rev 1548)
@@ -316,6 +316,7 @@
#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_calldef_decls( scanner_.calldefs(), scanner_.enums() )
+ patcher.fix_mangled( decls.itervalues() )
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.
|