#include <u.h>
#include <libc.h>
#include <bio.h>
#include <mach.h>

static char *(*demanglers[])(char*, char*) = 
{
	demanglegcc2,
	demanglegcc3,
};
	
char*
demangle(char *s, char *buf, int strip)
{
	char *t;
	char *r, *w;
	int i, nangle, nparen;
	
	for(i=0; i<nelem(demanglers); i++){
		t = demanglers[i](s, buf);
		if(t != s)
			break;
	}
	if(t == s || !strip)
		return t;

	/* copy name without <> and () - not right, but convenient */
	/* convert :: to $ - not right, but convenient (should fix acid) */
	nangle = 0;
	nparen = 0;
	for(r=w=buf; *r; r++){
		switch(*r){
		case '<':
			nangle++;
			break;
		case '>':
			nangle--;
			break;
		case '(':
			nparen++;
			break;
		case ')':
			nparen--;
			break;
		default:
			if(nparen == 0 && nangle == 0)
				*w++ = *r;
			break;
		}
	}
	*w = 0;
	return buf;
}

#ifdef TEST
void
main(int argc, char **argv)
{
	int i;

	for(i=1; i<argc; i++){
		print("%s\n", demangle(argv[i], 0));
		print("\t%s\n", demangle(argv[i], 1));
	}
	exits(nil);
}
#endif
