Class: Unmangler::MSVC

Inherits:
Base
  • Object
show all
Defined in:
lib/unmangler/msvc.rb

Defined Under Namespace

Classes: DataType, ParsedSymbol

Constant Summary collapse

UNDNAME_COMPLETE =
0x0000
UNDNAME_NO_LEADING_UNDERSCORES =

Don’t show __ in calling convention

0x0001
UNDNAME_NO_MS_KEYWORDS =

Don’t show calling convention at all

0x0002
UNDNAME_NO_FUNCTION_RETURNS =

Don’t show function/method return value

0x0004
UNDNAME_NO_ALLOCATION_MODEL =
0x0008
UNDNAME_NO_ALLOCATION_LANGUAGE =
0x0010
UNDNAME_NO_MS_THISTYPE =
0x0020
UNDNAME_NO_CV_THISTYPE =
0x0040
UNDNAME_NO_THISTYPE =
0x0060
UNDNAME_NO_ACCESS_SPECIFIERS =

Don’t show access specifier = public/protected/private

0x0080
UNDNAME_NO_THROW_SIGNATURES =
0x0100
UNDNAME_NO_MEMBER_TYPE =

Don’t show static/virtual specifier

0x0200
UNDNAME_NO_RETURN_UDT_MODEL =
0x0400
UNDNAME_32_BIT_DECODE =
0x0800
UNDNAME_NAME_ONLY =

Only report the variable/method name

0x1000
UNDNAME_NO_ARGUMENTS =

Don’t show method arguments

0x2000
UNDNAME_NO_SPECIAL_SYMS =
0x4000
UNDNAME_NO_COMPLEX_TYPE =
0x8000

Instance Method Summary collapse

Methods inherited from Base

#assert, #isdigit, #safe_unmangle, safe_unmangle, unmangle

Instance Method Details

#unmangle(mangled, flags = UNDNAME_COMPLETE) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/unmangler/msvc.rb', line 49

def unmangle mangled, flags = UNDNAME_COMPLETE

  if flags.is_a?(Hash)
    flags = flags.fetch(:args, true) ? UNDNAME_COMPLETE : UNDNAME_NAME_ONLY
  end

  if flags & UNDNAME_NAME_ONLY != 0
    flags |= UNDNAME_NO_FUNCTION_RETURNS | UNDNAME_NO_ACCESS_SPECIFIERS |
      UNDNAME_NO_MEMBER_TYPE | UNDNAME_NO_ALLOCATION_LANGUAGE | UNDNAME_NO_COMPLEX_TYPE
  end

  sym = ParsedSymbol.new
  sym.flags   = flags
  sym.current = StringPtr.new(mangled)

  symbol_demangle(sym) ? sym.result.strip : mangled
end