Mercurial > projects > ldc
diff ir/irdsymbol.cpp @ 1146:1860414bf3b7
* Moved ir/irsymbol.cpp/h into ir/irdsymbol.cpp/h.
* Added #if IN_DMD versioning around DMD backend specific code in the D1 frontend, D2 is currently broken.
* All part of a greater cleanup scheme.
author | Tomas Lindquist Olsen <tomas.l.olsen gmail.com> |
---|---|
date | Thu, 26 Mar 2009 20:45:53 +0100 |
parents | ir/irsymbol.cpp@05c9faedc13c |
children | 229e02867307 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ir/irdsymbol.cpp Thu Mar 26 20:45:53 2009 +0100 @@ -0,0 +1,70 @@ +#include "gen/llvm.h" +#include "ir/ir.h" +#include "ir/irdsymbol.h" +#include "ir/irvar.h" + +#include "gen/logger.h" + +std::set<IrDsymbol*> IrDsymbol::list; + +void IrDsymbol::resetAll() +{ + Logger::println("resetting %u Dsymbols", list.size()); + std::set<IrDsymbol*>::iterator it; + for(it = list.begin(); it != list.end(); ++it) + (*it)->reset(); +} + +IrDsymbol::IrDsymbol() +{ + bool incr = list.insert(this).second; + assert(incr); + reset(); +} + +IrDsymbol::IrDsymbol(const IrDsymbol& s) +{ + bool incr = list.insert(this).second; + assert(incr); + 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; +} + +bool IrDsymbol::isSet() +{ + return (irStruct || irFunc || irGlobal || irLocal || irField); +} + +IrVar* IrDsymbol::getIrVar() +{ + assert(irGlobal || irLocal || irField); + return irGlobal ? (IrVar*)irGlobal : irLocal ? (IrVar*)irLocal : (IrVar*)irField; +} + +llvm::Value*& IrDsymbol::getIrValue() { return getIrVar()->value; }