aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Demangle/RustDemangle.cpp
diff options
context:
space:
mode:
authorTomasz Miąsko <tomasz.miasko@gmail.com>2021-05-14 00:00:00 +0000
committerTomasz Miąsko <tomasz.miasko@gmail.com>2021-05-15 09:47:17 +0200
commitfc0f2bb91d01963647392cbba1fe37a6f2d9f3bf (patch)
tree8735c1b95d1f059c3881647682fdcf8b3b2510b6 /llvm/lib/Demangle/RustDemangle.cpp
parentdbf8cc7b6625ed3547e49b2faecdde3337b1ea6d (diff)
downloadllvm-fc0f2bb91d01963647392cbba1fe37a6f2d9f3bf.zip
llvm-fc0f2bb91d01963647392cbba1fe37a6f2d9f3bf.tar.gz
llvm-fc0f2bb91d01963647392cbba1fe37a6f2d9f3bf.tar.bz2
[Demangle][Rust] Parse bool constants
Reviewed By: dblaikie Differential Revision: https://reviews.llvm.org/D102518
Diffstat (limited to 'llvm/lib/Demangle/RustDemangle.cpp')
-rw-r--r--llvm/lib/Demangle/RustDemangle.cpp18
1 files changed, 17 insertions, 1 deletions
diff --git a/llvm/lib/Demangle/RustDemangle.cpp b/llvm/lib/Demangle/RustDemangle.cpp
index 1bc9d47..3a9e75f 100644
--- a/llvm/lib/Demangle/RustDemangle.cpp
+++ b/llvm/lib/Demangle/RustDemangle.cpp
@@ -411,11 +411,14 @@ void Demangler::demangleConst() {
case BasicType::USize:
demangleConstInt();
break;
+ case BasicType::Bool:
+ demangleConstBool();
+ break;
case BasicType::Placeholder:
print('_');
break;
default:
- // FIXME demangle backreferences, bool constants, and char constants.
+ // FIXME demangle backreferences and char constants.
Error = true;
break;
}
@@ -439,6 +442,19 @@ void Demangler::demangleConstInt() {
}
}
+// <const-data> = "0_" // false
+// | "1_" // true
+void Demangler::demangleConstBool() {
+ StringView HexDigits;
+ parseHexNumber(HexDigits);
+ if (HexDigits == "0")
+ print("false");
+ else if (HexDigits == "1")
+ print("true");
+ else
+ Error = true;
+}
+
// <undisambiguated-identifier> = ["u"] <decimal-number> ["_"] <bytes>
Identifier Demangler::parseIdentifier() {
bool Punycode = consumeIf('u');