annotate ir/irdsymbol.cpp @ 1351:8d501abecd24

Initial (but disabled) fix for ticket #294 , the actual part that fixes the bug is in a #if 0 block as I'm afraid it will cause regressions. I'm most likely not going to be around tonight, and maybe not tomorrow as well, so I'm pushing it in case someone wants to run some serious testing/investigate the problem noted in llvmhelpers.cpp : realignOffset .
author Tomas Lindquist Olsen <tomas.l.olsen gmail com>
date Thu, 14 May 2009 17:20:17 +0200
parents 1860414bf3b7
children 229e02867307
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 {
177
cea8dcfa76df [svn r193] Fixed: abstract classes implementing interfaces now output proper Interface info arrays. (null vtables).
lindquist
parents: 175
diff changeset
12 Logger::println("resetting %u 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; }