http://d.puremagic.com/issues/show_bug.cgi?id=4852
Summary: core.demangle cannot demangle functions with class/struct return types Product: D Version: D2 Platform: Other OS/Version: Windows Status: NEW Keywords: patch Severity: normal Priority: P2 Component: druntime AssignedTo: s...@invisibleduck.org ReportedBy: r.sagita...@gmx.de --- Comment #0 from Rainer Schuetze <r.sagita...@gmx.de> 2010-09-11 05:05:20 PDT --- There are similar bug reports regarding std.demangle, but as it is reimplemented in core.demangle, I've created this new bug report. for example: _D3dmd6Parser6Parser15parsePrimaryExpMFZC3dmd10Expression10Expression if demangled to dmd dmd.Parser.Parser.parsePrimaryExp() but it should be dmd.Expression.Expression dmd.Parser.Parser.parsePrimaryExp() This is caused by parseLName() not continue reading after eating the first identifier of the fully qualified class name. Index: demangle.d =================================================================== --- demangle.d (revision 390) +++ demangle.d (working copy) @@ -378,20 +378,26 @@ debug(trace) printf( "parseLName+\n" ); debug(trace) scope(success) printf( "parseLName-\n" ); - auto n = decodeNumber(); + while( true ) + { + auto n = decodeNumber(); - if( !n || n > buf.length || n > buf.length - pos ) - error( "LName must be at least 1 character" ); - if( '_' != tok() && !isAlpha( tok() ) ) - error( "Invalid character in LName" ); - foreach( e; buf[pos + 1 .. pos + n] ) - { - if( '_' != e && !isAlpha( e ) && !isDigit( e ) ) + if( !n || n > buf.length || n > buf.length - pos ) + error( "LName must be at least 1 character" ); + if( '_' != tok() && !isAlpha( tok() ) ) error( "Invalid character in LName" ); + foreach( e; buf[pos + 1 .. pos + n] ) + { + if( '_' != e && !isAlpha( e ) && !isDigit( e ) ) + error( "Invalid character in LName" ); + } + + put( buf[pos .. pos + n] ); + pos += n; + if( !isDigit( tok() ) ) + break; + put( "." ); } - - put( buf[pos .. pos + n] ); - pos += n; } /* -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------