annotate ir/irdsymbol.cpp @ 1650:40bd4a0d4870

Update to work with LLVM 2.7. Removed use of dyn_cast, llvm no compiles without exceptions and rtti by default. We do need exceptions for the libconfig stuff, but rtti isn't necessary (anymore). Debug info needs to be rewritten, as in LLVM 2.7 the format has completely changed. To have something to look at while rewriting, the old code has been wrapped inside #ifndef DISABLE_DEBUG_INFO , this means that you have to define this to compile at the moment. Updated tango 0.99.9 patch to include updated EH runtime code, which is needed for LLVM 2.7 as well.
author Tomas Lindquist Olsen
date Wed, 19 May 2010 12:42:32 +0200
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; }