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; }