Skip to content

Commit 4e5fce5

Browse files
committed
[demangler] refactor SpecialSubKind
Code generating the special substitutions in std is a switch statement with each case block containing the same conststruction template. It is more efficient to commonize that after the switch, having determined which SubKind to create. Also, let's sort the cases. Reviewed By: ChuanqiXu Differential Revision: https://reviews.llvm.org/D118131
1 parent 52c7fae commit 4e5fce5

File tree

2 files changed

+24
-30
lines changed

2 files changed

+24
-30
lines changed

libcxxabi/src/demangle/ItaniumDemangle.h

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5448,37 +5448,34 @@ Node *AbstractManglingParser<Derived, Alloc>::parseSubstitution() {
54485448
return nullptr;
54495449

54505450
if (look() >= 'a' && look() <= 'z') {
5451-
Node *SpecialSub;
5451+
SpecialSubKind Kind;
54525452
switch (look()) {
54535453
case 'a':
5454-
++First;
5455-
SpecialSub = make<SpecialSubstitution>(SpecialSubKind::allocator);
5454+
Kind = SpecialSubKind::allocator;
54565455
break;
54575456
case 'b':
5458-
++First;
5459-
SpecialSub = make<SpecialSubstitution>(SpecialSubKind::basic_string);
5457+
Kind = SpecialSubKind::basic_string;
54605458
break;
5461-
case 's':
5462-
++First;
5463-
SpecialSub = make<SpecialSubstitution>(SpecialSubKind::string);
5459+
case 'd':
5460+
Kind = SpecialSubKind::iostream;
54645461
break;
54655462
case 'i':
5466-
++First;
5467-
SpecialSub = make<SpecialSubstitution>(SpecialSubKind::istream);
5463+
Kind = SpecialSubKind::istream;
54685464
break;
54695465
case 'o':
5470-
++First;
5471-
SpecialSub = make<SpecialSubstitution>(SpecialSubKind::ostream);
5466+
Kind = SpecialSubKind::ostream;
54725467
break;
5473-
case 'd':
5474-
++First;
5475-
SpecialSub = make<SpecialSubstitution>(SpecialSubKind::iostream);
5468+
case 's':
5469+
Kind = SpecialSubKind::string;
54765470
break;
54775471
default:
54785472
return nullptr;
54795473
}
5474+
++First;
5475+
auto *SpecialSub = make<SpecialSubstitution>(Kind);
54805476
if (!SpecialSub)
54815477
return nullptr;
5478+
54825479
// Itanium C++ ABI 5.1.2: If a name that would use a built-in <substitution>
54835480
// has ABI tags, the tags are appended to the substitution; the result is a
54845481
// substitutable component.

llvm/include/llvm/Demangle/ItaniumDemangle.h

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5450,37 +5450,34 @@ Node *AbstractManglingParser<Derived, Alloc>::parseSubstitution() {
54505450
return nullptr;
54515451

54525452
if (look() >= 'a' && look() <= 'z') {
5453-
Node *SpecialSub;
5453+
SpecialSubKind Kind;
54545454
switch (look()) {
54555455
case 'a':
5456-
++First;
5457-
SpecialSub = make<SpecialSubstitution>(SpecialSubKind::allocator);
5456+
Kind = SpecialSubKind::allocator;
54585457
break;
54595458
case 'b':
5460-
++First;
5461-
SpecialSub = make<SpecialSubstitution>(SpecialSubKind::basic_string);
5459+
Kind = SpecialSubKind::basic_string;
54625460
break;
5463-
case 's':
5464-
++First;
5465-
SpecialSub = make<SpecialSubstitution>(SpecialSubKind::string);
5461+
case 'd':
5462+
Kind = SpecialSubKind::iostream;
54665463
break;
54675464
case 'i':
5468-
++First;
5469-
SpecialSub = make<SpecialSubstitution>(SpecialSubKind::istream);
5465+
Kind = SpecialSubKind::istream;
54705466
break;
54715467
case 'o':
5472-
++First;
5473-
SpecialSub = make<SpecialSubstitution>(SpecialSubKind::ostream);
5468+
Kind = SpecialSubKind::ostream;
54745469
break;
5475-
case 'd':
5476-
++First;
5477-
SpecialSub = make<SpecialSubstitution>(SpecialSubKind::iostream);
5470+
case 's':
5471+
Kind = SpecialSubKind::string;
54785472
break;
54795473
default:
54805474
return nullptr;
54815475
}
5476+
++First;
5477+
auto *SpecialSub = make<SpecialSubstitution>(Kind);
54825478
if (!SpecialSub)
54835479
return nullptr;
5480+
54845481
// Itanium C++ ABI 5.1.2: If a name that would use a built-in <substitution>
54855482
// has ABI tags, the tags are appended to the substitution; the result is a
54865483
// substitutable component.

0 commit comments

Comments
 (0)