Mercurial > projects > ldc
diff ir/irsymbol.cpp @ 173:db9890b3fb64 trunk
[svn r189] moving IR data back into DMD frontend nodes
author | ChristianK |
---|---|
date | Tue, 06 May 2008 07:56:03 +0200 |
parents | |
children | 16e676ae5ab4 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ir/irsymbol.cpp Tue May 06 07:56:03 2008 +0200 @@ -0,0 +1,60 @@ +#include "gen/llvm.h" +#include "ir/ir.h" +#include "ir/irsymbol.h" +#include "ir/irvar.h" + +std::set<IrDsymbol*> IrDsymbol::list; + +void IrDsymbol::resetAll() +{ + std::set<IrDsymbol*>::iterator it; + for(it = list.begin(); it != list.end(); ++it) + (*it)->reset(); +} + +IrDsymbol::IrDsymbol() +{ + list.insert(this); + reset(); +} + +IrDsymbol::IrDsymbol(const IrDsymbol& s) +{ + list.insert(this); + DModule = s.DModule; + irModule = s.irModule; + irStruct = s.irStruct; + irFunc = s.irFunc; + resolved = s.resolved; + declared = s.declared; + initialized = s.initialized; + defined = s.defined; + irGlobal = s.irGlobal; + irLocal = s.irLocal; + irField = s.irField; +} + +IrDsymbol::~IrDsymbol() +{ + list.erase(this); +} + +void IrDsymbol::reset() +{ + DModule = NULL; + irModule = NULL; + irStruct = NULL; + irFunc = NULL; + resolved = declared = initialized = defined = false; + irGlobal = NULL; + irLocal = NULL; + irField = NULL; +} + +IrVar* IrDsymbol::getIrVar() +{ + assert(irGlobal || irLocal || irField); + return irGlobal ? (IrVar*)irGlobal : irLocal ? (IrVar*)irLocal : (IrVar*)irField; +} + +llvm::Value*& IrDsymbol::getIrValue() { return getIrVar()->value; }