LLVM: lib/Demangle/MicrosoftDemangleNodes.cpp Source File (original) (raw)

1

2

3

4

5

6

7

8

9

10

11

12

15#include

16#include

17

18using namespace llvm;

20

21#define OUTPUT_ENUM_CLASS_VALUE(Enum, Value, Desc) \

22 case Enum::Value: \

23 OB << Desc; \

24 break;

25

26

28 if (OB.empty())

29 return;

30

31 char C = OB.back();

32 if (std::isalnum(C) || C == '>')

33 OB << " ";

34}

35

37 switch (Q) {

39 OB << "const";

40 break;

42 OB << "volatile";

43 break;

45 OB << "__restrict";

46 break;

47 default:

48 break;

49 }

50}

51

54 if (!(Q & Mask))

55 return NeedSpace;

56

57 if (NeedSpace)

58 OB << " ";

59

61 return true;

62}

63

65 bool SpaceAfter) {

67 return;

68

69 size_t Pos1 = OB.getCurrentPosition();

73 size_t Pos2 = OB.getCurrentPosition();

74 if (SpaceAfter && Pos2 > Pos1)

75 OB << " ";

76}

77

80

81 switch (CC) {

82 case CallingConv::Cdecl:

83 OB << "__cdecl";

84 break;

85 case CallingConv::Fastcall:

86 OB << "__fastcall";

87 break;

88 case CallingConv::Pascal:

89 OB << "__pascal";

90 break;

91 case CallingConv::Regcall:

92 OB << "__regcall";

93 break;

94 case CallingConv::Stdcall:

95 OB << "__stdcall";

96 break;

97 case CallingConv::Thiscall:

98 OB << "__thiscall";

99 break;

100 case CallingConv::Eabi:

101 OB << "__eabi";

102 break;

103 case CallingConv::Vectorcall:

104 OB << "__vectorcall";

105 break;

106 case CallingConv::Clrcall:

107 OB << "__clrcall";

108 break;

110 OB << "__attribute__((__swiftcall__)) ";

111 break;

112 case CallingConv::SwiftAsync:

113 OB << "__attribute__((__swiftasynccall__)) ";

114 break;

115 default:

116 break;

117 }

118}

119

122 this->output(OB, Flags);

123 std::string_view SV = OB;

124 std::string Owned(SV.begin(), SV.end());

125 std::free(OB.getBuffer());

126 return Owned;

127}

128

157

159 output(OB, Flags, ", ");

160}

161

163 std::string_view Separator) const {

165 return;

167 Nodes[0]->output(OB, Flags);

168 for (size_t I = 1; I < Count; ++I) {

169 OB << Separator;

170 Nodes[I]->output(OB, Flags);

171 }

172}

173

176 switch (Char) {

178 OB << "L\"";

179 break;

181 OB << "\"";

182 break;

184 OB << "u\"";

185 break;

187 OB << "U\"";

188 break;

189 }

192 OB << "...";

193}

194

200

204 OB << "{";

206 OB << "&";

207

209 Symbol->output(OB, Flags);

211 OB << ", ";

212 }

213

218 }

220 OB << "}";

221}

222

226 return;

227 OB << "<";

229 OB << ">";

230}

231

235 OB << "`dynamic atexit destructor for ";

236 else

237 OB << "`dynamic initializer for ";

238

240 OB << "`";

242 OB << "''";

243 } else {

244 OB << "'";

245 Name->output(OB, Flags);

246 OB << "''";

247 }

248}

249

254

267 "operator[]");

276 "operator->*");

283 "operator>=");

299 "operator&=");

301 "operator|=");

303 "operator^=");

306 "`vector deleting dtor'");

308 "`default ctor closure'");

310 "`scalar deleting dtor'");

312 "`vector ctor iterator'");

314 "`vector dtor iterator'");

316 "`vector vbase ctor iterator'");

318 "`virtual displacement map'");

320 "`eh vector ctor iterator'");

322 "`eh vector dtor iterator'");

324 "`eh vector vbase ctor iterator'");

326 "`copy ctor closure'");

328 "`local vftable ctor closure'");

331 "operator delete[]");

333 "`managed vector ctor iterator'");

335 "`managed vector dtor iterator'");

337 "`EH vector copy ctor iterator'");

339 "`EH vector vbase copy ctor iterator'");

341 "`vector copy ctor iterator'");

343 "`vector vbase copy constructor iterator'");

345 "`managed vector vbase copy constructor iterator'");

347 "operator co_await");

351 break;

352 }

354}

355

359 OB << "`local static thread guard'";

360 else

361 OB << "`local static guard'";

364}

365

368 OB << "operator";

370 OB << " ";

372}

373

376 OB << "~";

377 Class->output(OB, Flags);

379}

380

383 OB << "operator \"\"" << Name;

385}

386

391 OB << "public: ";

393 OB << "protected: ";

395 OB << "private: ";

396 }

397

401 OB << "static ";

402 }

404 OB << "virtual ";

405

407 OB << "extern \"C\" ";

408 }

409

412 OB << " ";

413 }

414

417}

418

422 OB << "(";

424 Params->output(OB, Flags);

425 else

426 OB << "void";

427

429 if (OB.back() != '(')

430 OB << ", ";

431 OB << "...";

432 }

433 OB << ")";

434 }

435

437 OB << " const";

439 OB << " volatile";

441 OB << " __restrict";

443 OB << " __unaligned";

444

446 OB << " noexcept";

447

449 OB << " &";

451 OB << " &&";

452

455}

456

458 OB << "[thunk]: ";

459

461}

462

465 OB << "`adjustor{" << ThisAdjust.StaticOffset << "}'";

468 OB << "`vtordispex{" << ThisAdjust.VBPtrOffset << ", "

470 << ", " << ThisAdjust.StaticOffset << "}'";

471 } else {

472 OB << "`vtordisp{" << ThisAdjust.VtordispOffset << ", "

474 }

475 }

476

478}

479

482

483

487 } else

488 Pointee->outputPre(OB, Flags);

489

491

493 OB << "__unaligned ";

494

496 OB << "(";

498 OB << "(";

502 OB << " ";

503 }

504

507 OB << "::";

508 }

509

512 OB << "*";

513 break;

515 OB << "&";

516 break;

518 OB << "&&";

519 break;

520 default:

522 }

524

527}

528

532 OB << ")";

533

534 Pointee->outputPost(OB, Flags);

535}

536

539 switch (Tag) {

544 }

545 OB << " ";

546 }

549}

550

552

557

562 if (ILN->Value != 0)

563 ILN->output(OB, Flags);

564}

565

569 return;

570

573 OB << "][";

575 }

576}

577

579 OB << "[";

581 OB << "]";

582

584}

585

587 Name->output(OB, Flags);

588}

589

593 Name->output(OB, Flags);

594 Signature->outputPost(OB, Flags);

595}

596

599 OB << "__ptrauth(";

601 OB << ")";

602}

603

605 const char *AccessSpec = nullptr;

606 bool IsStatic = true;

607 switch (SC) {

609 AccessSpec = "private";

610 break;

612 AccessSpec = "public";

613 break;

615 AccessSpec = "protected";

616 break;

617 default:

618 IsStatic = false;

619 break;

620 }

622 OB << AccessSpec << ": ";

624 OB << "static ";

625

627 Type->outputPre(OB, Flags);

629 }

630 Name->output(OB, Flags);

632 Type->outputPost(OB, Flags);

633}

634

639

643

646 OB << "`RTTI Base Class Descriptor at (";

648 << this->Flags;

649 OB << ")'";

650}

651

654 Name->output(OB, Flags);

655}

656

661

664 Name->output(OB, Flags);

666 OB << "{for `";

668 OB << "'}";

669 }

670}

assert(UImm &&(UImm !=~static_cast< T >(0)) &&"Invalid immediate!")

static void outputCallingConvention(OutputBuffer &OB, CallingConv CC)

Definition MicrosoftDemangleNodes.cpp:78

#define OUTPUT_ENUM_CLASS_VALUE(Enum, Value, Desc)

Definition MicrosoftDemangleNodes.cpp:21

static void outputSingleQualifier(OutputBuffer &OB, Qualifiers Q)

Definition MicrosoftDemangleNodes.cpp:36

static bool outputQualifierIfPresent(OutputBuffer &OB, Qualifiers Q, Qualifiers Mask, bool NeedSpace)

Definition MicrosoftDemangleNodes.cpp:52

static void outputQualifiers(OutputBuffer &OB, Qualifiers Q, bool SpaceBefore, bool SpaceAfter)

Definition MicrosoftDemangleNodes.cpp:64

static void outputSpaceIfNecessary(OutputBuffer &OB)

Definition MicrosoftDemangleNodes.cpp:27

CallingConv Namespace - This namespace contains an enum with a value for the well-known calling conve...

@ Swift

Calling convention for Swift.

@ C

The default llvm calling convention, compatible with C.

@ ManVectorVbaseCopyCtorIter

@ EHVectorVbaseCopyCtorIter

@ LocalVftableCtorClosure

@ VectorVbaseCopyCtorIter

This is an optimization pass for GlobalISel generic memory operations.

void outputPost(OutputBuffer &OB, OutputFlags Flags) const override

Definition MicrosoftDemangleNodes.cpp:578

void outputOneDimension(OutputBuffer &OB, OutputFlags Flags, Node *N) const

Definition MicrosoftDemangleNodes.cpp:558

NodeArrayNode * Dimensions

void outputPre(OutputBuffer &OB, OutputFlags Flags) const override

Definition MicrosoftDemangleNodes.cpp:553

void outputDimensionsImpl(OutputBuffer &OB, OutputFlags Flags) const

Definition MicrosoftDemangleNodes.cpp:566

void output(OutputBuffer &OB, OutputFlags Flags) const override

Definition MicrosoftDemangleNodes.cpp:366

void outputPost(OutputBuffer &OB, OutputFlags Flags) const override

Definition MicrosoftDemangleNodes.cpp:638

void outputPre(OutputBuffer &OB, OutputFlags Flags) const override

Definition MicrosoftDemangleNodes.cpp:635

IdentifierNode * Identifier

void output(OutputBuffer &OB, OutputFlags Flags) const override

Definition MicrosoftDemangleNodes.cpp:232

VariableSymbolNode * Variable

void output(OutputBuffer &OB, OutputFlags Flags) const override

Definition MicrosoftDemangleNodes.cpp:174

std::string_view DecodedString

void outputPre(OutputBuffer &OB, OutputFlags Flags) const override

Definition MicrosoftDemangleNodes.cpp:387

void outputPost(OutputBuffer &OB, OutputFlags Flags) const override

Definition MicrosoftDemangleNodes.cpp:419

FunctionRefQualifier RefQualifier

CallingConv CallConvention

FunctionSignatureNode * Signature

void output(OutputBuffer &OB, OutputFlags Flags) const override

Definition MicrosoftDemangleNodes.cpp:590

NodeArrayNode * TemplateParams

DEMANGLE_ABI void outputTemplateParameters(OutputBuffer &OB, OutputFlags Flags) const

Definition MicrosoftDemangleNodes.cpp:223

void output(OutputBuffer &OB, OutputFlags Flags) const override

Definition MicrosoftDemangleNodes.cpp:195

void output(OutputBuffer &OB, OutputFlags Flags) const override

Definition MicrosoftDemangleNodes.cpp:255

IntrinsicFunctionKind Operator

void output(OutputBuffer &OB, OutputFlags Flags) const override

Definition MicrosoftDemangleNodes.cpp:381

void output(OutputBuffer &OB, OutputFlags Flags) const override

Definition MicrosoftDemangleNodes.cpp:356

void output(OutputBuffer &OB, OutputFlags Flags) const override

Definition MicrosoftDemangleNodes.cpp:652

void output(OutputBuffer &OB, OutputFlags Flags) const override

Definition MicrosoftDemangleNodes.cpp:250

void output(OutputBuffer &OB, OutputFlags Flags) const override

Definition MicrosoftDemangleNodes.cpp:158

virtual void output(OutputBuffer &OB, OutputFlags Flags) const =0

DEMANGLE_ABI std::string toString(OutputFlags Flags=OF_Default) const

Definition MicrosoftDemangleNodes.cpp:120

void output(OutputBuffer &OB, OutputFlags Flags) const override

Definition MicrosoftDemangleNodes.cpp:597

NodeArrayNode * Components

QualifiedNameNode * ClassParent

void outputPost(OutputBuffer &OB, OutputFlags Flags) const override

Definition MicrosoftDemangleNodes.cpp:529

PointerAuthQualifierNode * PointerAuthQualifier

void outputPre(OutputBuffer &OB, OutputFlags Flags) const override

Definition MicrosoftDemangleNodes.cpp:480

void outputPre(OutputBuffer &OB, OutputFlags Flags) const override

Definition MicrosoftDemangleNodes.cpp:129

void output(OutputBuffer &OB, OutputFlags Flags) const override

Definition MicrosoftDemangleNodes.cpp:640

NodeArrayNode * Components

void output(OutputBuffer &OB, OutputFlags Flags) const override

Definition MicrosoftDemangleNodes.cpp:644

NodeArrayNode * TargetNames

void output(OutputBuffer &OB, OutputFlags Flags) const override

Definition MicrosoftDemangleNodes.cpp:662

void output(OutputBuffer &OB, OutputFlags Flags) const override

Definition MicrosoftDemangleNodes.cpp:374

void output(OutputBuffer &OB, OutputFlags Flags) const override

Definition MicrosoftDemangleNodes.cpp:586

QualifiedNameNode * QualifiedName

void outputPost(OutputBuffer &OB, OutputFlags Flags) const override

Definition MicrosoftDemangleNodes.cpp:551

void outputPre(OutputBuffer &OB, OutputFlags Flags) const override

Definition MicrosoftDemangleNodes.cpp:537

void output(OutputBuffer &OB, OutputFlags Flags) const override

Definition MicrosoftDemangleNodes.cpp:201

std::array< int64_t, 3 > ThunkOffsets

void outputPost(OutputBuffer &OB, OutputFlags Flags) const override

Definition MicrosoftDemangleNodes.cpp:463

void outputPre(OutputBuffer &OB, OutputFlags Flags) const override

Definition MicrosoftDemangleNodes.cpp:457

void output(OutputBuffer &OB, OutputFlags Flags) const override

Definition MicrosoftDemangleNodes.cpp:604

void output(OutputBuffer &OB, OutputFlags Flags) const override

Definition MicrosoftDemangleNodes.cpp:657