annotate ir/irdsymbol.cpp @ 1638:0de4525a9ed6

Apply workaround for #395 by klickverbot.
author Christian Kamm <kamm incasoftware de>
date Mon, 08 Mar 2010 20:06:08 +0100
parents 229e02867307
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
173
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
1 #include "gen/llvm.h"
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
2 #include "ir/ir.h"
1146
1860414bf3b7 * Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
Tomas Lindquist Olsen <tomas.l.olsen gmail.com>
parents: 877
diff changeset
3 #include "ir/irdsymbol.h"
173
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
4 #include "ir/irvar.h"
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
5
177
cea8dcfa76df [svn r193] Fixed: abstract classes implementing interfaces now output proper Interface info arrays. (null vtables).
lindquist
parents: 175
diff changeset
6 #include "gen/logger.h"
cea8dcfa76df [svn r193] Fixed: abstract classes implementing interfaces now output proper Interface info arrays. (null vtables).
lindquist
parents: 175
diff changeset
7
173
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
8 std::set<IrDsymbol*> IrDsymbol::list;
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
9
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
10 void IrDsymbol::resetAll()
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
11 {
1372
229e02867307 Fix format-string bugs by adding __attribute__((__format__)) in all applicable
Frits van Bommel <fvbommel wxs.nl>
parents: 1146
diff changeset
12 Logger::println("resetting %zu Dsymbols", list.size());
173
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
13 std::set<IrDsymbol*>::iterator it;
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
14 for(it = list.begin(); it != list.end(); ++it)
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
15 (*it)->reset();
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
16 }
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
17
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
18 IrDsymbol::IrDsymbol()
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
19 {
877
05c9faedc13c Move adding IrSymbols to global list out of assert.
Christian Kamm <kamm incasoftware de>
parents: 177
diff changeset
20 bool incr = list.insert(this).second;
05c9faedc13c Move adding IrSymbols to global list out of assert.
Christian Kamm <kamm incasoftware de>
parents: 177
diff changeset
21 assert(incr);
173
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
22 reset();
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
23 }
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
24
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
25 IrDsymbol::IrDsymbol(const IrDsymbol& s)
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
26 {
877
05c9faedc13c Move adding IrSymbols to global list out of assert.
Christian Kamm <kamm incasoftware de>
parents: 177
diff changeset
27 bool incr = list.insert(this).second;
05c9faedc13c Move adding IrSymbols to global list out of assert.
Christian Kamm <kamm incasoftware de>
parents: 177
diff changeset
28 assert(incr);
173
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
29 DModule = s.DModule;
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
30 irModule = s.irModule;
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
31 irStruct = s.irStruct;
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
32 irFunc = s.irFunc;
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
33 resolved = s.resolved;
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
34 declared = s.declared;
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
35 initialized = s.initialized;
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
36 defined = s.defined;
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
37 irGlobal = s.irGlobal;
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
38 irLocal = s.irLocal;
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
39 irField = s.irField;
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
40 }
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
41
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
42 IrDsymbol::~IrDsymbol()
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
43 {
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
44 list.erase(this);
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
45 }
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
46
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
47 void IrDsymbol::reset()
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
48 {
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
49 DModule = NULL;
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
50 irModule = NULL;
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
51 irStruct = NULL;
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
52 irFunc = NULL;
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
53 resolved = declared = initialized = defined = false;
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
54 irGlobal = NULL;
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
55 irLocal = NULL;
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
56 irField = NULL;
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
57 }
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
58
175
c44e6a711885 [svn r191] Fixed: array literals did not support all type/storage combinations.
lindquist
parents: 174
diff changeset
59 bool IrDsymbol::isSet()
c44e6a711885 [svn r191] Fixed: array literals did not support all type/storage combinations.
lindquist
parents: 174
diff changeset
60 {
c44e6a711885 [svn r191] Fixed: array literals did not support all type/storage combinations.
lindquist
parents: 174
diff changeset
61 return (irStruct || irFunc || irGlobal || irLocal || irField);
c44e6a711885 [svn r191] Fixed: array literals did not support all type/storage combinations.
lindquist
parents: 174
diff changeset
62 }
c44e6a711885 [svn r191] Fixed: array literals did not support all type/storage combinations.
lindquist
parents: 174
diff changeset
63
173
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
64 IrVar* IrDsymbol::getIrVar()
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
65 {
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
66 assert(irGlobal || irLocal || irField);
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
67 return irGlobal ? (IrVar*)irGlobal : irLocal ? (IrVar*)irLocal : (IrVar*)irField;
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
68 }
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
69
db9890b3fb64 [svn r189] moving IR data back into DMD frontend nodes
ChristianK
parents:
diff changeset
70 llvm::Value*& IrDsymbol::getIrValue() { return getIrVar()->value; }