Gyoji Compiler
Loading...
Searching...
No Matches
ns2.hpp
1#include <string>
2#include <memory>
3#include <list>
4#include <map>
5#include <vector>
6
7#include <gyoji-misc/pointers.hpp>
8#include <gyoji-context/source-reference.hpp>
9
10namespace Gyoji::frontend::namespaces {
11
12 class NS2;
13 class NS2Context;
14
26 class NS2Entity {
27 public:
58
60 std::string _name,
61 EntityType _type,
62 NS2Entity *parent,
63 const Gyoji::context::SourceReference & _source_ref
64 );
65 ~NS2Entity();
66
79 const std::string & get_name() const;
80
81 std::string get_fully_qualified_name() const;
82
89 const EntityType & get_type() const;
90
91 NS2Entity* get_parent() const;
92
93 NS2Entity* add_identifier(
94 std::string _name,
95 const Gyoji::context::SourceReference & _source_ref
96 );
97
98 NS2Entity* add_type(
99 std::string _name,
100 const Gyoji::context::SourceReference & _source_ref
101 );
102 NS2Entity* add_class(
103 std::string _name,
104 const Gyoji::context::SourceReference & _source_ref
105 );
106
107 NS2Entity* add_namespace(
108 std::string _namespace,
109 const Gyoji::context::SourceReference & _source_ref
110 );
111
112 NS2Entity* add_entity(std::string _name, Gyoji::owned<NS2Entity> _entity);
113
114 NS2Entity *get_entity(std::string _name) const;
115
116 const Gyoji::context::SourceReference & get_source_ref() const;
117
118 void dump(int indent) const;
119
120
121 private:
122 std::string name;
123 EntityType type;
124 NS2Entity *parent;
125 const Gyoji::context::SourceReference & source_ref;
127 };
128
129 class NS2SearchPaths {
130 public:
131 NS2SearchPaths();
132 ~NS2SearchPaths();
133
139 void add_using(std::string name, NS2Entity *alias);
140
146 NS2Entity *get_name(std::string name);
147
148 const std::vector<std::pair<std::string, NS2Entity*>> & get_aliases() const;
149 private:
160
167 };
168
179 public:
180 NS2Context();
181 ~NS2Context();
182
192 void namespace_using(std::string name, NS2Entity* alias);
193
210 NS2Entity* namespace_find_in(NS2Entity* current, std::string _name) const;
211
213
214 NS2Entity* namespace_find(std::string name) const;
215
216 NS2Entity *get_current() const;
221 void namespace_push(NS2Entity *ns);
222 void namespace_pop();
223
224 void dump() const;
225
226 static const std::string NAMESPACE_DELIMITER;
227 private:
228
235
245 };
246
247};
248
References a location in the source-file.
Definition source-reference.hpp:16
NS2Entity * namespace_find_in(NS2Entity *current, std::string _name) const
Definition ns2.cpp:275
void namespace_using(std::string name, NS2Entity *alias)
Definition ns2.cpp:268
void namespace_push(NS2Entity *ns)
Definition ns2.cpp:350
Entity living inside a namespace.
Definition ns2.hpp:26
const EntityType & get_type() const
Definition ns2.cpp:51
@ ENTITY_TYPE_TYPE
Definition ns2.hpp:39
@ ENTITY_TYPE_LABEL
Definition ns2.hpp:56
@ ENTITY_TYPE_CLASS
Definition ns2.hpp:45
@ ENTITY_TYPE_IDENTIFIER
Definition ns2.hpp:33
const std::string & get_name() const
Definition ns2.cpp:28