Line data Source code
1 : // Copyright (C) 2025-2026 Free Software Foundation, Inc.
2 :
3 : // This file is part of GCC.
4 :
5 : // GCC is free software; you can redistribute it and/or modify it under
6 : // the terms of the GNU General Public License as published by the Free
7 : // Software Foundation; either version 3, or (at your option) any later
8 : // version.
9 :
10 : // GCC is distributed in the hope that it will be useful, but WITHOUT ANY
11 : // WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 : // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13 : // for more details.
14 :
15 : // You should have received a copy of the GNU General Public License
16 : // along with GCC; see the file COPYING3. If not see
17 : // <http://www.gnu.org/licenses/>.
18 :
19 : #ifndef RUST_GGC_H
20 : #define RUST_GGC_H
21 :
22 : #include "rust-system.h"
23 : #include "tree.h"
24 :
25 : namespace Rust {
26 :
27 : // forward declare
28 : class Identifier;
29 :
30 : namespace GGC {
31 :
32 : class Ident
33 : {
34 : tree inner;
35 :
36 : public:
37 : Ident (const char *str);
38 : Ident (const std::string &str);
39 : Ident (const Rust::Identifier &ident);
40 :
41 : bool operator== (const Ident &other) const { return inner == other.inner; }
42 : bool operator== (const std::string &other) const;
43 :
44 : const char *c_str () const { return IDENTIFIER_POINTER (inner); }
45 : size_t size () const { return IDENTIFIER_LENGTH (inner); }
46 :
47 : bool empty () const { return !size (); }
48 :
49 : std::string as_string () const
50 : {
51 : return std::string (c_str (), c_str () + size ());
52 : }
53 :
54 319775 : tree as_tree () const { return inner; }
55 : };
56 :
57 : static inline bool
58 : operator== (const std::string &a, const Ident &b)
59 : {
60 : return b == a;
61 : }
62 :
63 : } // namespace GGC
64 :
65 : } // namespace Rust
66 :
67 : #endif // RUST_GGC_H
|