Changeset 211
- Timestamp:
- 07/06/06 16:10:13 (2 years ago)
- Files:
-
- trunk/meta/demangle.d (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/meta/demangle.d
r210 r211 29 29 { 30 30 static if (wantQualifiedNames != MangledNameType.PrettyName) { 31 // Deal with symbolnameof!(), qualifiednameof!(). 31 // There are only a few types where symbolnameof!(), qualifiednameof!() 32 // make sense. 32 33 static if (str[0]=='C' || str[0]=='S' || str[0]=='E' || str[0]=='T') 33 34 const char [] demangleType = prettyLname!(str[1..$], wantQualifiedNames); 34 else static assert(0, "Demangle error: type '" ~ str ~ "' does not contain a qualified name"); 35 else { 36 static assert(0, "Demangle error: type '" ~ str ~ "' does not contain a qualified name"); 37 } 35 38 } else static if (str[0] == 'A') // dynamic array 36 39 const char [] demangleType = demangleType!(str[1..$], wantQualifiedNames) ~ "[]"; … … 239 242 else static if (str.length>2 && str[0]=='_' && str[1]=='D') 240 243 const char [] getDotName = getQualifiedName!(str[2..$], wantQualifiedNames); 241 else static if (isdigit!(( str[0] ))) { 242 static if (str[getLnameConsumed!(str)..$].length>0) { 244 else { 245 static assert (isdigit!(( str[0] ))); 246 static if ( getLnameConsumed!(str) < str.length && isdigit!(( str[getLnameConsumed!(str)] ))) { 243 247 static if (wantQualifiedNames == MangledNameType.SymbolName) { 244 static if (getLnameConsumed!(str)==str.length) { 245 const char [] getQualifiedName = prettyLname!(getLname!(str), wantQualifiedNames); 246 } else static if ( isdigit!(( str[getLnameConsumed!(str)] ))) { 247 const char [] getQualifiedName = 248 getQualifiedName!(str[getLnameConsumed!(str) .. $], wantQualifiedNames, ""); 249 } else { 250 const char [] getQualifiedName = prettyLname!(getLname!(str), wantQualifiedNames); 251 } 248 // For symbol names, only display the last symbol 249 const char [] getQualifiedName = 250 getQualifiedName!(str[getLnameConsumed!(str) .. $], wantQualifiedNames, ""); 252 251 } else { 253 // Qualified and pretty names 252 // Qualified and pretty names display everything 254 253 const char [] getQualifiedName = dotstr 255 254 ~ prettyLname!(getLname!(str), wantQualifiedNames) … … 259 258 const char [] getQualifiedName = dotstr ~ prettyLname!(getLname!(str), wantQualifiedNames); 260 259 } 261 } else const char [] getQualifiedName = ""; 262 } 263 264 // BUG: This isn't correct. It's making getQualifiedName() unnecessarily complicated. 260 } 261 } 262 265 263 template getQualifiedNameConsumed (char [] str) 266 264 { 267 265 static if (str.length>1 && isdigit!(( str[0] )) ) { 268 static if (getLnameConsumed!(str) < = str.length) {266 static if (getLnameConsumed!(str) < str.length && isdigit!(( str[getLnameConsumed!(str)] ))) { 269 267 const int getQualifiedNameConsumed = getLnameConsumed!(str) 270 268 + getQualifiedNameConsumed!(str[getLnameConsumed!(str) .. $]); 271 269 } else { 272 const int getQualifiedNameConsumed = str.length;270 const int getQualifiedNameConsumed = getLnameConsumed!(str); 273 271 } 274 272 } else static if (str.length>1 && str[0]=='_' && str[1]=='D') { 275 273 const int getQualifiedNameConsumed = get_DnameConsumed!(str) 276 274 + getQualifiedNameConsumed!(str[get_DnameConsumed!(str)..$]); 277 } else const int getQualifiedNameConsumed=0;275 } else static assert(0); 278 276 } 279 277
