@@ -153,6 +153,9 @@ typedef struct output_desc {
153153 boolbit scope_name : 1 ;
154154 boolbit base_name : 1 ;
155155 boolbit dllimport : 1 ;
156+ #if 0 || defined( TEST )
157+ int status ;
158+ #endif
156159} output_desc ;
157160
158161// the simple demangler uses these to output & count chars in the output buffer
@@ -1542,10 +1545,13 @@ static bool mangled_name( output_desc *data )
15421545 return ( false );
15431546}
15441547
1545- static bool full_mangled_name ( output_desc * data )
1548+ static void full_mangled_name ( output_desc * data )
15461549{
15471550 unsigned advances ;
15481551
1552+ #if 0 || defined( TEST )
1553+ data -> status = 0 ;
1554+ #endif
15491555 advances = 1 ;
15501556 if ( data -> end == NULL || ( data -> end - data -> input ) >= IMPORT_PREFIX_LEN ) {
15511557 if ( CHECK_IMPORT_PREFIX ( data -> input ) ) {
@@ -1564,22 +1570,26 @@ static bool full_mangled_name( output_desc *data )
15641570 for ( ; advances != 0 ; -- advances ) {
15651571 advanceChar ( data );
15661572 if ( currChar ( data ) == NULL_CHAR ) {
1567- return ( false ) ;
1573+ return ;
15681574 }
15691575 }
1570- return ( mangled_name ( data ) );
1576+ #if 0 || defined( TEST )
1577+ data -> status = mangled_name ( data );
1578+ #else
1579+ mangled_name ( data );
1580+ #endif
15711581 }
15721582 break ;
15731583 }
1574- return ( false );
15751584}
15761585
1577- static void do_demangle ( output_desc * data )
1578- {
15791586#if 0 || defined( TEST )
1587+ static void disp_demangle_status ( output_desc * data )
1588+ {
15801589 char const * input = data -> input ;
15811590
1582- if ( !full_mangled_name ( data ) ) {
1591+ if ( data -> status == -1 ) {
1592+ } else if ( data -> status == 0 ) {
15831593 if ( ! no_errors ) {
15841594 ++ errors ;
15851595 printf ( "ERROR: full_mangled_name failed\n" );
@@ -1595,17 +1605,18 @@ static void do_demangle( output_desc *data )
15951605 printf ( "-->%s<--\n" , input );
15961606 }
15971607 }
1598- #else
1599- full_mangled_name ( data );
1600- #endif
16011608}
1609+ #endif
16021610
16031611static void do_copy ( output_desc * data )
16041612{
16051613 char const * ptr ;
16061614 size_t len ;
16071615 char c ;
16081616
1617+ #if 0 || defined( TEST )
1618+ data -> status = -1 ;
1619+ #endif
16091620 ptr = data -> input ;
16101621 len = 0 ;
16111622 c = currChar ( data );
@@ -1719,11 +1730,14 @@ size_t __demangle_l( // DEMANGLE A C++ NAME
17191730 len = strlen ( input );
17201731 init_descriptor ( & data , & demangleEmit , & data , input , len , buff , buff_size );
17211732 if ( __is_mangled ( input , len ) ) {
1722- do_demangle ( & data );
1733+ full_mangled_name ( & data );
17231734 } else {
17241735 do_copy ( & data );
17251736 }
17261737 outlen = terminateOutput ( & data );
1738+ #if 0 || defined( TEST )
1739+ disp_demangle_status ( & data );
1740+ #endif
17271741 /* size does not include '\0' */
17281742 return ( outlen );
17291743}
@@ -1882,11 +1896,14 @@ size_t __demangle_r( // DEMANGLE A C++ NAME
18821896 init_descriptor ( & data , & demangleEmit , & data , input , len , buff , buff_size );
18831897 data .suppress_output = 0 ;
18841898 if ( __is_mangled ( input , len ) ) {
1885- do_demangle ( & data );
1899+ full_mangled_name ( & data );
18861900 } else {
18871901 do_copy ( & data );
18881902 }
18891903 outlen = terminateOutput ( & data );
1904+ #if 0 || defined( TEST )
1905+ disp_demangle_status ( & data );
1906+ #endif
18901907 if ( buffp != NULL ) {
18911908 * buffp = data .output ;
18921909 }
@@ -1916,7 +1933,10 @@ bool __scope_name( // EXTRACT A C++ SCOPE
19161933 init_descriptor ( & data , & demangleEmit , & data , input , len , NULL , 0 );
19171934 data .scope_name = true;
19181935 data .scope_index = index ;
1919- do_demangle ( & data );
1936+ full_mangled_name ( & data );
1937+ #if 0 || defined( TEST )
1938+ disp_demangle_status ( & data );
1939+ #endif
19201940 if ( data .scope_len != 0 ) {
19211941 * scopep = data .scope_ptr ;
19221942 * scope_sizep = data .scope_len ;
@@ -1941,11 +1961,14 @@ size_t __demangled_basename( // CREATE DEMANGLED BASE NAME
19411961 data .suppress_output = 0 ;
19421962 data .base_name = true;
19431963 if ( __is_mangled ( input , len ) ) {
1944- do_demangle ( & data );
1964+ full_mangled_name ( & data );
19451965 } else {
19461966 do_copy ( & data );
19471967 }
19481968 outlen = terminateOutput ( & data );
1969+ #if 0 || defined( TEST )
1970+ disp_demangle_status ( & data );
1971+ #endif
19491972 /* size does not include '\0' */
19501973 return ( outlen );
19511974}
@@ -2015,10 +2038,13 @@ void __parse_mangled_name( // PARSE MANGLED NAME
20152038 init_descriptor ( & data , ofn , cookie , input , len , NULL , 0 );
20162039 data .suppress_output = 0 ;
20172040 if ( __is_mangled ( input , len ) ) {
2018- do_demangle ( & data );
2041+ full_mangled_name ( & data );
20192042 } else {
20202043 do_copy ( & data );
20212044 }
2045+ #if 0 || defined( TEST )
2046+ disp_demangle_status ( & data );
2047+ #endif
20222048}
20232049
20242050#endif // TEST
0 commit comments