Skip to content

Commit 2835344

Browse files
committed
lib_misc: cleanup C++ names demangler code
1 parent e9a4cf0 commit 2835344

1 file changed

Lines changed: 41 additions & 15 deletions

File tree

bld/lib_misc/c/demangle.c

Lines changed: 41 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -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

16031611
static 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

Comments
 (0)