-! (c)2010 Joe Groff bsd license
-USING: alien alien.c-types alien.libraries alien.strings
+! Copyright (C) 2010 Joe Groff.
+! See http://factorcode.org/license.txt for BSD license.
+USING: alien.c-types alien.data alien.destructors alien.strings
alien.syntax combinators destructors io.encodings.ascii kernel
-libc locals sequences system ;
+libc sequences ;
IN: alien.cxx.demangle.libstdcxx
-<<
-"libstdc++" {
- { [ os macosx? ] [ "/usr/lib/libstdc++.6.0.9.dylib" ] }
- { [ os unix? ] [ "/usr/lib/libstdc++.so" ] }
-} cond cdecl add-library
->>
-
-LIBRARY: libstdc++
-
-FUNCTION: char* __cxa_demangle ( char* mangled_name, char* output_buffer, size_t* length, int* status ) ;
+FUNCTION: char* __cxa_demangle ( char* mangled_name, char* output_buffer, size_t* length, int* status )
ERROR: demangle-memory-allocation-failure ;
ERROR: invalid-mangled-name name ;
: mangled-name? ( name -- ? )
"_Z" head? ;
+DESTRUCTOR: (free)
+
:: demangle ( mangled-name -- c++-name )
- 0 <ulong> :> length
- 0 <int> :> status [
+ 0 ulong <ref> :> length
+ 0 int <ref> :> status [
mangled-name ascii string>alien f length status __cxa_demangle &(free) :> demangled-buf
- mangled-name status *int demangle-error
+ mangled-name status int deref demangle-error
demangled-buf ascii alien>string
] with-destructors ;