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; }