Skip to content

Add support for C++20's char8_t - #147

Open
ergrelet wants to merge 1 commit into
getsentry:masterfrom
ergrelet:130-add-support-for-char8_t
Open

Add support for C++20's char8_t#147
ergrelet wants to merge 1 commit into
getsentry:masterfrom
ergrelet:130-add-support-for-char8_t

Conversation

@ergrelet

Copy link
Copy Markdown

Hi!

Here's a small PR which fixes issue #130.

kjk added a commit to kjk/exp that referenced this pull request Jan 24, 2026
Port of getsentry/pdb#147 which adds C++20's char8_t support.

Co-Authored-By: Claude Opus 4.5 <[email protected]>
kjk added a commit to kjk/exp that referenced this pull request Aug 17, 2026
pdb: pdb2hpp: support * as class name to dump all types

Co-Authored-By: Claude Opus 4.5 <[email protected]>

pdb: pdb2hpp: add char8_t, char16_t, char32_t primitive types

Port of getsentry/pdb#147 which adds C++20's char8_t support.

Co-Authored-By: Claude Opus 4.5 <[email protected]>

pdb: Port src/tpi/primitive.rs to TypeScript

Add src/tpi/primitive.ts with PrimitiveKind numeric constants,
Indirection
constants, parsePrimitiveType(), and primitiveTypeName(). Move
primitiveTypeName from examples/pdb2hpp.ts into the library with full
coverage of all primitive types from the Rust source.

Co-Authored-By: Claude Opus 4.5 <[email protected]>

pdb: update ailog.txt

Port src/tpi/data.rs: fix LF_STRUCTURE19, add missing types

- Fix LF_STRUCTURE19 parsing bug (different field order from LF_STRUCTURE)
- Add LF_STRIDED_ARRAY support with stride field on ArrayType
- Add LF_NESTTYPEEX support (proper field attributes vs padding)
- Add LF_BINTERFACE support in field list parsing
- Add PointerKind/PointerMode enums matching Rust PointerKind/PointerMode
- Add FunctionAttributes interface (calling convention + ctor/returnUdt flags)
- Update ProcedureType and MemberFunctionType to use FunctionAttributes
- Pointer size now auto-computed from PointerKind when not specified

Co-Authored-By: Claude Opus 4.5 <[email protected]>

pdb: Add AliasType support (LF_ALIAS/LF_ALIAS_ST)

Port of getsentry/pdb#134. Adds parsing for typedef/alias type records
which contain an underlying type index and a name.

Co-Authored-By: Claude Opus 4.5 <[email protected]>

pdb: Complete constants.ts port from constants.rs

Add all missing constants from the Rust source including 16-bit legacy
types, list type indices, field list members, numeric leaf constants
(LF_REAL48, LF_COMPLEX*, LF_OCTWORD, LF_DECIMAL, etc.), derived bounds
(LF_ENDOFLEAFRECORD, LF_TYPE_LAST, LF_ID_LAST), and padding bytes
(LF_PAD1-LF_PAD15). Also add LF_NESTTYPEEX_ST and LF_ENUMERATE_ST
handling in the parser.

Co-Authored-By: Claude Opus 4.5 <[email protected]>

pdb: Fix isPureVirtualMethod to recognize PureIntroducingVirtual

Port of getsentry/pdb#135. Add FieldAttributes helper functions
(isStaticMethod, isVirtualMethod, isPureVirtualMethod,
isIntroVirtualMethod) matching the Rust FieldAttributes methods.
isPureVirtualMethod correctly returns true for both PureVirtual and
PureIntroducingVirtual method kinds.

Co-Authored-By: Claude Opus 4.5 <[email protected]>

pdb: Implement VirtualFunctionTable / VirtualTableShape parsing

Port of getsentry/pdb#141. Implements LF_VTSHAPE (packed 4-bit vtable
shape descriptors) and LF_VFTABLE (owner, base, object offset, and
method name list). Adds VirtualTableShapeDescriptor enum and
VirtualTableShapeType interface. Fixes VirtualFunctionTableType fields
to match the Rust struct (owner, base, objectOffset, names).

Co-Authored-By: Claude Opus 4.5 <[email protected]>

pdb: Add isStripped flag to DebugInformation

Port of getsentry/pdb#143. Exposes whether the PDB was built with
/PDBSTRIPPED, meaning it lacks type info, line info, and per-object
CV symbols. Derived from bit 0x2 of the DBI header flags.

Co-Authored-By: Claude Opus 4.5 <[email protected]>

pdb: synthesize section headers from DBI section map

Port of getsentry/pdb PR #154. When no explicit section header stream
exists (as in .NET Crossgen2 .ni.pdb files), synthesize ImageSectionHeaders
from the DBI section map (OMF Segment Map) entries.

Co-Authored-By: Claude Opus 4.5 <[email protected]>

pdb: port symbol module from Rust to idiomatic TypeScript

Restructures src/symbols.ts into src/symbol/ directory matching the Rust
source layout:

- symbol/constants.ts: All S_* symbol kind constants, CPUType enum,
  SourceLanguage enum, ThunkKind enum, TrampolineType enum
- symbol/annotations.ts: BinaryAnnotation types and BinaryAnnotationsIter
  for parsing inline site line programs
- symbol/index.ts: Full symbol types and parsing with:
  - Expanded ProcedureFlags (8 flags vs previous 4)
  - Structured CompileFlags, LocalVariableFlags, ExportSymbolFlags,
    SeparatedCodeFlags instead of raw numbers
  - New symbol types: ThunkSymbol, SeparatedCodeSymbol,
    MultiRegisterVariableSymbol, CallSiteInfoSymbol, EnvironmentBlockSymbol
  - Added managed field to ConstantSymbol and DataSymbol
  - Added dpc field to ProcedureSymbol
  - Added invocations to InlineSiteSymbol
  - LabelSymbol.flags now uses ProcedureFlags
  - CompileFlagsSymbol now has structured fields (language, cpuType,
    frontendVersion, backendVersion)
  - S_ALIGN/S_SKIP padding records now skipped in iterator
  - Helper functions: symbolStartsScope, symbolEndsScope

Co-Authored-By: Claude Opus 4.5 <[email protected]>

pdb: add DefRange symbol parsing (S_DEFRANGE_REGISTER et al.)

These symbols describe where local variables are stored at various code
locations in optimized builds. Not present in the original Rust library.

Implements all 7 DefRange variants:
- S_DEFRANGE (0x113f)
- S_DEFRANGE_SUBFIELD (0x1140)
- S_DEFRANGE_REGISTER (0x1141)
- S_DEFRANGE_FRAMEPOINTER_REL (0x1142)
- S_DEFRANGE_SUBFIELD_REGISTER (0x1143)
- S_DEFRANGE_FRAMEPOINTER_REL_FULL_SCOPE (0x1144)
- S_DEFRANGE_REGISTER_REL (0x1145)

Co-Authored-By: Claude Opus 4.5 <[email protected]>

pdb: add S_CALLEES/S_CALLERS symbol parsing

These symbols list the functions called by or calling a given function,
used for call graph analysis. Not present in the original Rust library.

Co-Authored-By: Claude Opus 4.5 <[email protected]>

pdb: add S_INLINEES symbol parsing

Lists all inlined function IDs in a module. Not present in the original
Rust library.

Co-Authored-By: Claude Opus 4.5 <[email protected]>

pdb: implement S_FRAMECOOKIE (0x113a) symbol parsing

Not in the Rust repo - implemented from cvinfo.h documentation.
Adds FrameCookieSymbol with offset, register, cookieType, and flags fields,
plus FrameCookieType enum (Copy, XorStackPointer, XorBasePointer, XorR13).

Co-Authored-By: Claude Opus 4.5 <[email protected]>

pdb: implement S_FILESTATIC (0x1153) symbol parsing

Not in the Rust repo - implemented from cvinfo.h documentation.
Adds FileStaticSymbol with type, modFilenameOffset, flags (LocalVariableFlags),
and name fields.

Co-Authored-By: Claude Opus 4.5 <[email protected]>

pdb: implement S_HEAPALLOCSITE (0x115e) symbol parsing

Not in the Rust repo - implemented from cvinfo.h documentation.
Adds HeapAllocationSiteSymbol with offset (section offset of call site),
instructionLength, and type (type of the allocated object).

Co-Authored-By: Claude Opus 4.5 <[email protected]>

pdb: update claude.md and ailog.txt

pdb: add source file/module comments to pdb2hpp output

Uses the IPI stream's UdtModuleSourceLine/UdtSourceLine records to resolve
which source file and module each type was defined in, printing it as a
comment above each class/struct/enum definition.

Co-Authored-By: Claude Opus 4.5 <[email protected]>

pdb: implement managed procedure and slot symbol parsing

Port getsentry/pdb#146 to TypeScript. Adds support for:
- S_TOKENREF (TokenReference) - reference to a managed procedure
- S_LMANPROC/S_GMANPROC (ManagedProcedure) - .NET managed procedures
- S_MANSLOT/S_MANSLOT_ST (ManagedSlot) - managed local variable slots
- S_OEM (OEM) - OEM symbol information

S_ENVBLOCK, S_SECTION, and S_COFFGROUP were already implemented.

Co-Authored-By: Claude Opus 4.5 <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant