File tree 2 files changed +39
-37
lines changed
2 files changed +39
-37
lines changed Original file line number Diff line number Diff line change 12
12
#include " ir/irdsymbol.h"
13
13
#include " ir/irvar.h"
14
14
15
- std::set <IrDsymbol*> IrDsymbol::list;
15
+ std::vector <IrDsymbol*> IrDsymbol::list;
16
16
17
17
void IrDsymbol::resetAll ()
18
18
{
19
19
Logger::println (" resetting %zu Dsymbols" , list.size ());
20
- std::set<IrDsymbol*>::iterator it;
21
- for ( it = list.begin (); it ! = list.end (); ++it)
20
+
21
+ for (std::vector<IrDsymbol*>::iterator it = list.begin (), end = list.end (); it != end ; ++it)
22
22
(*it)->reset ();
23
23
}
24
24
25
25
IrDsymbol::IrDsymbol ()
26
26
{
27
- bool incr = list.insert (this ).second ;
28
- assert (incr);
27
+ list.push_back (this );
29
28
reset ();
30
29
}
31
30
32
31
IrDsymbol::IrDsymbol (const IrDsymbol& s)
33
32
{
34
- bool incr = list.insert (this ).second ;
35
- assert (incr);
36
- DModule = s.DModule ;
33
+ list.push_back (this );
34
+ DModule = s.DModule ;
37
35
irModule = s.irModule ;
38
- irAggr = s.irAggr ;
39
- irFunc = s.irFunc ;
36
+ irAggr = s.irAggr ;
37
+ irFunc = s.irFunc ;
38
+ irGlobal = s.irGlobal ;
39
+ irLocal = s.irLocal ;
40
+ irField = s.irField ;
40
41
resolved = s.resolved ;
41
42
declared = s.declared ;
42
43
initialized = s.initialized ;
43
- defined = s.defined ;
44
- irGlobal = s.irGlobal ;
45
- irLocal = s.irLocal ;
46
- irField = s.irField ;
44
+ defined = s.defined ;
47
45
}
48
46
49
47
IrDsymbol::~IrDsymbol ()
50
48
{
51
- list.erase (this );
49
+ if (this == list.back ())
50
+ {
51
+ list.pop_back ();
52
+ return ;
53
+ }
54
+
55
+ std::vector<IrDsymbol*>::iterator it = std::find (list.rbegin (), list.rend (), this ).base ();
56
+ // base() returns the iterator _after_ the found position
57
+ list.erase (--it);
52
58
}
53
59
54
60
void IrDsymbol::reset ()
55
61
{
56
- DModule = NULL ;
62
+ DModule = NULL ;
57
63
irModule = NULL ;
58
- irAggr = NULL ;
59
- irFunc = NULL ;
60
- resolved = declared = initialized = defined = false ;
64
+ irAggr = NULL ;
65
+ irFunc = NULL ;
61
66
irGlobal = NULL ;
62
- irLocal = NULL ;
63
- irField = NULL ;
67
+ irLocal = NULL ;
68
+ irField = NULL ;
69
+ resolved = declared = initialized = defined = false ;
64
70
}
65
71
66
72
bool IrDsymbol::isSet ()
67
73
{
68
- return ( irAggr || irFunc || irGlobal || irLocal || irField) ;
74
+ return irAggr || irFunc || irGlobal || irLocal || irField;
69
75
}
70
76
71
77
IrVar* IrDsymbol::getIrVar ()
Original file line number Diff line number Diff line change 14
14
#ifndef LDC_IR_IRDSYMBOL_H
15
15
#define LDC_IR_IRDSYMBOL_H
16
16
17
- #include < set >
17
+ #include < vector >
18
18
19
19
struct IrModule ;
20
20
struct IrFunction ;
@@ -33,7 +33,7 @@ namespace llvm {
33
33
34
34
struct IrDsymbol
35
35
{
36
- static std::set <IrDsymbol*> list;
36
+ static std::vector <IrDsymbol*> list;
37
37
static void resetAll ();
38
38
39
39
// overload all of these to make sure
@@ -44,25 +44,21 @@ struct IrDsymbol
44
44
45
45
void reset ();
46
46
47
- Module* DModule;
48
-
49
- bool resolved;
50
- bool declared;
51
- bool initialized;
52
- bool defined;
53
-
54
- IrModule* irModule;
55
-
56
- IrAggr* irAggr;
57
-
47
+ Module* DModule;
48
+ IrModule* irModule;
49
+ IrAggr* irAggr;
58
50
IrFunction* irFunc;
59
-
60
- IrGlobal* irGlobal;
51
+ IrGlobal* irGlobal;
61
52
union {
62
53
IrLocal* irLocal;
63
54
IrParameter *irParam;
64
55
};
65
56
IrField* irField;
57
+ bool resolved;
58
+ bool declared;
59
+ bool initialized;
60
+ bool defined;
61
+
66
62
IrVar* getIrVar ();
67
63
llvm::Value*& getIrValue ();
68
64
You can’t perform that action at this time.
0 commit comments