1 ! (c)2010 Joe Groff bsd license
2 USING: alien alien.c-types alien.libraries alien.strings
3 alien.syntax combinators destructors io.encodings.ascii kernel
4 libc locals sequences system ;
5 IN: alien.cxx.demangle.libstdcxx
9 { [ os macosx? ] [ "/usr/lib/libstdc++.6.0.9.dylib" ] }
10 { [ os unix? ] [ "/usr/lib/libstdc++.so" ] }
11 } cond cdecl add-library
16 FUNCTION: char* __cxa_demangle ( char* mangled_name, char* output_buffer, size_t* length, int* status ) ;
18 ERROR: demangle-memory-allocation-failure ;
19 ERROR: invalid-mangled-name name ;
20 ERROR: invalid-demangle-args name ;
22 : demangle-error ( name status -- )
25 { -1 [ drop demangle-memory-allocation-failure ] }
26 { -2 [ invalid-mangled-name ] }
27 { -3 [ invalid-demangle-args ] }
30 : mangled-name? ( name -- ? )
33 :: demangle ( mangled-name -- c++-name )
36 mangled-name ascii string>alien f length status __cxa_demangle &(free) :> demangled-buf
37 mangled-name status *int demangle-error
38 demangled-buf ascii alien>string