1 ! (c)2010 Joe Groff bsd license
2 USING: alien.c-types alien.data alien.destructors alien.strings
3 alien.syntax combinators destructors io.encodings.ascii kernel
4 libc locals sequences ;
5 IN: alien.cxx.demangle.libstdcxx
7 FUNCTION: char* __cxa_demangle ( char* mangled_name, char* output_buffer, size_t* length, int* status )
9 ERROR: demangle-memory-allocation-failure ;
10 ERROR: invalid-mangled-name name ;
11 ERROR: invalid-demangle-args name ;
13 : demangle-error ( name status -- )
16 { -1 [ drop throw-demangle-memory-allocation-failure ] }
17 { -2 [ throw-invalid-mangled-name ] }
18 { -3 [ throw-invalid-demangle-args ] }
21 : mangled-name? ( name -- ? )
26 :: demangle ( mangled-name -- c++-name )
27 0 ulong <ref> :> length
28 0 int <ref> :> status [
29 mangled-name ascii string>alien f length status __cxa_demangle &(free) :> demangled-buf
30 mangled-name status int deref demangle-error
31 demangled-buf ascii alien>string