--- /dev/null
+/* $Id$
+
+This file is part of libmspcore
+Copyright © 2007 Mikko Rasa, Mikkosoft Productions
+Distributed under the LGPL
+*/
+#include "demangle.h"
+
+using namespace std;
+
+namespace Msp {
+namespace Debug {
+
+string demangle_gcc3(const string &sym)
+{
+ string result;
+
+ if(sym.compare(0, 2, "_Z"))
+ return result;
+
+ string::const_iterator i=sym.begin()+2;
+
+ bool nested=(*i=='N');
+ bool first=true;
+ while(first || (nested && *i!='E'))
+ {
+ unsigned len=0;
+ for(; isdigit(*i); ++i)
+ len=len*10+(*i-'0');
+ string::const_iterator j=i+len;
+
+ if(!first)
+ result.append("::");
+ result.append(i, j);
+
+ first=false;
+ }
+
+ if(nested)
+ ++i;
+
+ for(; i!=sym.end(); ++i)
+ {
+ bool ref=(*i=='R');
+ if(ref) ++i;
+ }
+}
+
+} // namespace Debug
+} // namespace Msp