Mercurial > projects > ldc
comparison ir/irdsymbol.cpp @ 1146:1860414bf3b7
* Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
* Added #if IN_DMD versioning around DMD backend specific code in the D1 frontend, D2 is currently broken.
* All part of a greater cleanup scheme.
author | Tomas Lindquist Olsen <tomas.l.olsen gmail.com> |
---|---|
date | Thu, 26 Mar 2009 20:45:53 +0100 |
parents | ir/irsymbol.cpp@05c9faedc13c |
children | 229e02867307 |
comparison
equal
deleted
inserted
replaced
1145:40caa8207b3e | 1146:1860414bf3b7 |
---|---|
1 #include "gen/llvm.h" | |
2 #include "ir/ir.h" | |
3 #include "ir/irdsymbol.h" | |
4 #include "ir/irvar.h" | |
5 | |
6 #include "gen/logger.h" | |
7 | |
8 std::set<IrDsymbol*> IrDsymbol::list; | |
9 | |
10 void IrDsymbol::resetAll() | |
11 { | |
12 Logger::println("resetting %u Dsymbols", list.size()); | |
13 std::set<IrDsymbol*>::iterator it; | |
14 for(it = list.begin(); it != list.end(); ++it) | |
15 (*it)->reset(); | |
16 } | |
17 | |
18 IrDsymbol::IrDsymbol() | |
19 { | |
20 bool incr = list.insert(this).second; | |
21 assert(incr); | |
22 reset(); | |
23 } | |
24 | |
25 IrDsymbol::IrDsymbol(const IrDsymbol& s) | |
26 { | |
27 bool incr = list.insert(this).second; | |
28 assert(incr); | |
29 DModule = s.DModule; | |
30 irModule = s.irModule; | |
31 irStruct = s.irStruct; | |
32 irFunc = s.irFunc; | |
33 resolved = s.resolved; | |
34 declared = s.declared; | |
35 initialized = s.initialized; | |
36 defined = s.defined; | |
37 irGlobal = s.irGlobal; | |
38 irLocal = s.irLocal; | |
39 irField = s.irField; | |
40 } | |
41 | |
42 IrDsymbol::~IrDsymbol() | |
43 { | |
44 list.erase(this); | |
45 } | |
46 | |
47 void IrDsymbol::reset() | |
48 { | |
49 DModule = NULL; | |
50 irModule = NULL; | |
51 irStruct = NULL; | |
52 irFunc = NULL; | |
53 resolved = declared = initialized = defined = false; | |
54 irGlobal = NULL; | |
55 irLocal = NULL; | |
56 irField = NULL; | |
57 } | |
58 | |
59 bool IrDsymbol::isSet() | |
60 { | |
61 return (irStruct || irFunc || irGlobal || irLocal || irField); | |
62 } | |
63 | |
64 IrVar* IrDsymbol::getIrVar() | |
65 { | |
66 assert(irGlobal || irLocal || irField); | |
67 return irGlobal ? (IrVar*)irGlobal : irLocal ? (IrVar*)irLocal : (IrVar*)irField; | |
68 } | |
69 | |
70 llvm::Value*& IrDsymbol::getIrValue() { return getIrVar()->value; } |