| Age | Commit message (Collapse) | Author |
|
Substitution table and scoping:
- Fix generic lambda auto parameters: save/replace m_templateSubstitute
with 'auto' placeholders for lambda-local T_/T0_/T1_ resolution
- Fix local-name template scoping with m_inLocalName flag
- Fix substitution table off-by-one for all-type template args
- Fix pointer-to-member type (case 'M'): set substitute=true per ABI
- Fix multi-character seq-id parsing (S10_, S11_, etc.)
- Fix DemangleUnresolvedType decltype (DT/Dt) prefix consumption
- Add forward template ref support for cv conversion operators
- Fix sr qualifier-list PushType and conditional E handling
- Fix multi-level sr scope resolution without N prefix
- Fix sr + unscoped template substitution table tracking
- Fix I...E argument pack handling (GCC I...E vs J...E)
- Fix Dp pack expansion to show '...' for concrete types
Expression formatting:
- Fix L_Z embedded mangled name template scope isolation
- Handle LZ<encoding>E function address template args
- cl expression: callable(args) format with function substitute tracking
- dt/pt expressions: obj.member and obj->member directly
- fp_/fp<N>_ placeholders in decltype return types
- Fix fL function-param scope validation
- Fix DemangleBaseUnresolvedName 'on' prefix consumption
Type names (Itanium ABI spec compliance):
- x/y: "long long"/"unsigned long long"
- a: "signed char" (distinct from 'c' = "char")
- n/o: "__int128"/"unsigned __int128"
- g: "__float128" via FloatType altName
- Dd/Df/De: "decimal64"/"decimal32"/"decimal128"
- Dh: "_Float16"
- Dp: always show "..." for pack expansion
- Fix 'n' literal: __int128 not __uint128
- Fix dot extension spacing
Cleanup:
- Remove unused NextIsOneOf, ReadUntil, DemangleInitializer
- Guard GetRaw/GetTemplateType/PrintTables behind GNUDEMANGLE_DEBUG
- Remove unreachable GetNameType C/D cases
- Remove dead BinaryExpression "." check
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
|
Replace the TypeBuilder-based demangling path with a lightweight
DemangledTypeNode representation that defers type object construction
until the symbol is fully parsed. This avoids repeated heap allocation
and ref-count churn during recursive descent.
Key changes:
- Add DemangledTypeNode / demangled_type_node.{h,cpp}: a compact IR
that mirrors the type grammar without allocating BN Type objects
- Use a thread_local demangler instance to amortize vector allocations
across calls
- Also commonize some of the demangled string length calculations.
Result: ~3x throughput improvement on a 180K-symbol corpus with
97.7% success rate (matching the previous implementation).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
|
|
|
|
Turns out, this is a rather hot path on initial binary loading (>50% runtime), and trying to pipe it all through the FFI makes it really slow. Like 100% slower. Ouch. Now, the demangler plugins are written with a bunch of #ifdef macros to allow for building both as a plugin and directly into the core. There is no functionality change here apart from regaining the lost performance.
|
|
Closes #467
|