File tree 2 files changed +27
-43
lines changed
2 files changed +27
-43
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 ;
37
- irModule = s.irModule ;
38
- irAggr = s.irAggr ;
39
- irFunc = s.irFunc ;
40
- resolved = s.resolved ;
41
- declared = s.declared ;
42
- initialized = s.initialized ;
43
- defined = s.defined ;
44
- irGlobal = s.irGlobal ;
45
- irLocal = s.irLocal ;
46
- irField = s.irField ;
33
+ list.push_back (this );
34
+ memcpy (this , &s, sizeof (IrDsymbol));
47
35
}
48
36
49
37
IrDsymbol::~IrDsymbol ()
50
38
{
51
- list.erase (this );
39
+ if (this == list.back ())
40
+ {
41
+ list.pop_back ();
42
+ return ;
43
+ }
44
+
45
+ std::vector<IrDsymbol*>::iterator it = std::find (list.rbegin (), list.rend (), this ).base ();
46
+ list.erase (it);
52
47
}
53
48
54
49
void IrDsymbol::reset ()
55
50
{
56
- DModule = NULL ;
57
- irModule = NULL ;
58
- irAggr = NULL ;
59
- irFunc = NULL ;
60
- resolved = declared = initialized = defined = false ;
61
- irGlobal = NULL ;
62
- irLocal = NULL ;
63
- irField = NULL ;
51
+ memset (this , 0 , sizeof (IrDsymbol));
64
52
}
65
53
66
54
bool IrDsymbol::isSet ()
67
55
{
68
- return (irAggr || irFunc || irGlobal || irLocal || irField) ;
56
+ return (size_t ) irAggr | ( size_t ) irFunc | ( size_t ) irGlobal | ( size_t ) irLocal | ( size_t )irField ;
69
57
}
70
58
71
59
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