libcpp, c, middle-end: Optimize initializers using #embed in C
[official-gcc.git] / gcc / rust / backend / rust-mangle.h
blob2a84b6b1deaaf2018883efab23d7ed808098dc40
1 // This file is part of GCC.
3 // GCC is free software; you can redistribute it and/or modify it under
4 // the terms of the GNU General Public License as published by the Free
5 // Software Foundation; either version 3, or (at your option) any later
6 // version.
8 // GCC is distributed in the hope that it will be useful, but WITHOUT ANY
9 // WARRANTY; without even the implied warranty of MERCHANTABILITY or
10 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
11 // for more details.
13 // You should have received a copy of the GNU General Public License
14 // along with GCC; see the file COPYING3. If not see
15 // <http://www.gnu.org/licenses/>.
17 #ifndef RUST_MANGLE_H
18 #define RUST_MANGLE_H
20 #include "rust-system.h"
21 #include "rust-tyty.h"
23 namespace Rust {
24 namespace Compile {
26 class Context;
28 class Mangler
30 public:
31 enum MangleVersion
33 // Values defined in rust/lang.opt
34 LEGACY = 0,
35 V0 = 1,
38 // this needs to support Legacy and V0 see github #429 or #305
39 std::string mangle_item (Rust::Compile::Context *ctx,
40 const TyTy::BaseType *ty,
41 const Resolver::CanonicalPath &path) const;
43 static void set_mangling (int frust_mangling_value)
45 version = static_cast<MangleVersion> (frust_mangling_value);
48 private:
49 static enum MangleVersion version;
52 std::string
53 legacy_mangle_item (const TyTy::BaseType *ty,
54 const Resolver::CanonicalPath &path);
56 std::string
57 v0_mangle_item (Rust::Compile::Context *ctx, const TyTy::BaseType *ty,
58 const Resolver::CanonicalPath &path);
60 } // namespace Compile
61 } // namespace Rust
62 #endif // RUST_MANGLE_H