diff gen/structs.h @ 88:058d3925950e trunk

[svn r92] Fixed support for statically initialized unions. lots of bugfixes as cleanups too.
author lindquist
date Tue, 06 Nov 2007 10:03:14 +0100
parents
children 5071469303d4
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/gen/structs.h	Tue Nov 06 10:03:14 2007 +0100
@@ -0,0 +1,49 @@
+#ifndef LLVMD_GEN_STRUCTS_H
+#define LLVMD_GEN_STRUCTS_H
+
+struct StructInitializer;
+const llvm::Type* DtoStructType(Type* t);
+llvm::Value* DtoStructZeroInit(llvm::Value* v);
+llvm::Value* DtoStructCopy(llvm::Value* dst, llvm::Value* src);
+llvm::Constant* DtoConstStructInitializer(StructInitializer* si);
+llvm::Value* DtoIndexStruct(llvm::Value* ptr, StructDeclaration* sd, Type* t, unsigned os, std::vector<unsigned>& idxs);
+
+struct DUnionField
+{
+    unsigned offset;
+    size_t size;
+    std::vector<const llvm::Type*> types;
+    llvm::Constant* init;
+    size_t initsize;
+
+    DUnionField() {
+        offset = 0;
+        size = 0;
+        init = NULL;
+        initsize = 0;
+    }
+};
+
+struct DUnionIdx
+{
+    unsigned idx,idxos;
+    llvm::Constant* c;
+
+    DUnionIdx()
+    : idx(0), c(0) {}
+    DUnionIdx(unsigned _idx, unsigned _idxos, llvm::Constant* _c)
+    : idx(_idx), idxos(_idxos), c(_c) {}
+    bool operator<(const DUnionIdx& i) const {
+        return (idx < i.idx) || (idx == i.idx && idxos < i.idxos);
+    }
+};
+
+class DUnion
+{
+    std::vector<DUnionField> fields;
+public:
+    DUnion();
+    llvm::Constant* getConst(std::vector<DUnionIdx>& in);
+};
+
+#endif