aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/backend/rust-mangle.cc
diff options
context:
space:
mode:
authorCohenArthur <arthur.cohen@epita.fr>2021-10-18 11:02:58 +0200
committerCohenArthur <arthur.cohen@epita.fr>2021-10-18 11:21:36 +0200
commitfd9d37c68ca363503ef5a515c7e409a3b15b43e1 (patch)
tree077e274f574e210a0fbb6bbb7f29669d21ba1a3f /gcc/rust/backend/rust-mangle.cc
parent35f6d0ffa6a6688016b65f5265522e17ccb248f8 (diff)
downloadgcc-fd9d37c68ca363503ef5a515c7e409a3b15b43e1.zip
gcc-fd9d37c68ca363503ef5a515c7e409a3b15b43e1.tar.gz
gcc-fd9d37c68ca363503ef5a515c7e409a3b15b43e1.tar.bz2
util: Add rust-base62 implementation from rustc
Diffstat (limited to 'gcc/rust/backend/rust-mangle.cc')
-rw-r--r--gcc/rust/backend/rust-mangle.cc25
1 files changed, 2 insertions, 23 deletions
diff --git a/gcc/rust/backend/rust-mangle.cc b/gcc/rust/backend/rust-mangle.cc
index b1f9115..15ac3b1 100644
--- a/gcc/rust/backend/rust-mangle.cc
+++ b/gcc/rust/backend/rust-mangle.cc
@@ -1,5 +1,6 @@
#include "rust-mangle.h"
#include "fnv-hash.h"
+#include "rust-base62.h"
#include <algorithm>
// FIXME: Rename those to legacy_*
@@ -155,28 +156,6 @@ v0_simple_type_prefix (const TyTy::BaseType *ty)
gcc_unreachable ();
}
-// FIXME: Is this present somewhere in libbiberty already?
-static std::string
-v0_base62_integer (uint64_t x)
-{
- const static std::string base_64
- = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@$";
- std::string buffer (128, '\0');
- size_t idx = 0;
- size_t base = 62;
-
- do
- {
- buffer[idx] = base_64[(x % base)];
- idx++;
- x = x / base;
- }
- while (x != 0);
-
- std::reverse (buffer.begin (), buffer.begin () + idx);
- return buffer.substr (0, idx);
-}
-
// Add an underscore-terminated base62 integer to the mangling string.
// This corresponds to the `<base-62-number>` grammar in the v0 mangling RFC:
// - 0 is encoded as "_"
@@ -185,7 +164,7 @@ static void
v0_add_integer_62 (std::string &mangled, uint64_t x)
{
if (x > 0)
- mangled.append (v0_base62_integer (x - 1));
+ mangled.append (base62_integer (x - 1));
mangled.append ("_");
}