2017-08-25 18:34:26 -04:00
|
|
|
! Copyright (C) 2010 Joe Groff.
|
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
2014-11-21 09:57:21 -05:00
|
|
|
USING: alien.c-types alien.data alien.destructors alien.strings
|
|
|
|
alien.syntax combinators destructors io.encodings.ascii kernel
|
|
|
|
libc locals sequences ;
|
2010-04-14 16:16:04 -04:00
|
|
|
IN: alien.cxx.demangle.libstdcxx
|
|
|
|
|
2015-07-19 19:25:30 -04:00
|
|
|
FUNCTION: char* __cxa_demangle ( char* mangled_name, char* output_buffer, size_t* length, int* status )
|
2010-04-14 16:16:04 -04:00
|
|
|
|
|
|
|
ERROR: demangle-memory-allocation-failure ;
|
|
|
|
ERROR: invalid-mangled-name name ;
|
|
|
|
ERROR: invalid-demangle-args name ;
|
|
|
|
|
|
|
|
: demangle-error ( name status -- )
|
|
|
|
{
|
|
|
|
{ 0 [ drop ] }
|
2015-08-13 19:13:05 -04:00
|
|
|
{ -1 [ drop demangle-memory-allocation-failure ] }
|
|
|
|
{ -2 [ invalid-mangled-name ] }
|
|
|
|
{ -3 [ invalid-demangle-args ] }
|
2010-04-14 16:16:04 -04:00
|
|
|
} case ;
|
|
|
|
|
|
|
|
: mangled-name? ( name -- ? )
|
|
|
|
"_Z" head? ;
|
|
|
|
|
2014-11-20 22:51:10 -05:00
|
|
|
DESTRUCTOR: (free)
|
|
|
|
|
2010-04-14 16:16:04 -04:00
|
|
|
:: demangle ( mangled-name -- c++-name )
|
2010-10-20 18:42:53 -04:00
|
|
|
0 ulong <ref> :> length
|
|
|
|
0 int <ref> :> status [
|
2010-04-14 16:16:04 -04:00
|
|
|
mangled-name ascii string>alien f length status __cxa_demangle &(free) :> demangled-buf
|
2010-10-20 18:42:53 -04:00
|
|
|
mangled-name status int deref demangle-error
|
2010-04-14 16:16:04 -04:00
|
|
|
demangled-buf ascii alien>string
|
|
|
|
] with-destructors ;
|