aboutsummaryrefslogtreecommitdiff
path: root/src/zig_llvm.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2016-01-11 00:25:17 -0700
committerAndrew Kelley <superjoe30@gmail.com>2016-01-11 00:25:17 -0700
commit2061cd50c0ec6cfcac60ea98f49e4333a4f508f1 (patch)
tree7c119d25686d9ad86282ec58c8e1a43698f27e7f /src/zig_llvm.cpp
parentb147ff5b60ebb32ec5a3c1f6da82601201d5ad9a (diff)
downloadzig-2061cd50c0ec6cfcac60ea98f49e4333a4f508f1.tar.gz
zig-2061cd50c0ec6cfcac60ea98f49e4333a4f508f1.zip
resolve enum types and emit debug info
Diffstat (limited to 'src/zig_llvm.cpp')
-rw-r--r--src/zig_llvm.cpp46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/zig_llvm.cpp b/src/zig_llvm.cpp
index 122ddf4843..699963f5d3 100644
--- a/src/zig_llvm.cpp
+++ b/src/zig_llvm.cpp
@@ -161,6 +161,32 @@ LLVMZigDIType *LLVMZigCreateDebugArrayType(LLVMZigDIBuilder *dibuilder, uint64_t
return reinterpret_cast<LLVMZigDIType*>(di_type);
}
+LLVMZigDIEnumerator *LLVMZigCreateDebugEnumerator(LLVMZigDIBuilder *dibuilder, const char *name, int64_t val) {
+ DIEnumerator *di_enumerator = reinterpret_cast<DIBuilder*>(dibuilder)->createEnumerator(name, val);
+ return reinterpret_cast<LLVMZigDIEnumerator*>(di_enumerator);
+}
+
+LLVMZigDIType *LLVMZigCreateDebugEnumerationType(LLVMZigDIBuilder *dibuilder, LLVMZigDIScope *scope,
+ const char *name, LLVMZigDIFile *file, unsigned line_number, uint64_t size_in_bits,
+ uint64_t align_in_bits, LLVMZigDIEnumerator **enumerator_array, int enumerator_array_len,
+ LLVMZigDIType *underlying_type, const char *unique_id)
+{
+ SmallVector<Metadata *, 8> fields;
+ for (int i = 0; i < enumerator_array_len; i += 1) {
+ DIEnumerator *dienumerator = reinterpret_cast<DIEnumerator*>(enumerator_array[i]);
+ fields.push_back(dienumerator);
+ }
+ DIType *di_type = reinterpret_cast<DIBuilder*>(dibuilder)->createEnumerationType(
+ reinterpret_cast<DIScope*>(scope),
+ name,
+ reinterpret_cast<DIFile*>(file),
+ line_number, size_in_bits, align_in_bits,
+ reinterpret_cast<DIBuilder*>(dibuilder)->getOrCreateArray(fields),
+ reinterpret_cast<DIType*>(underlying_type),
+ unique_id);
+ return reinterpret_cast<LLVMZigDIType*>(di_type);
+}
+
LLVMZigDIType *LLVMZigCreateDebugMemberType(LLVMZigDIBuilder *dibuilder, LLVMZigDIScope *scope,
const char *name, LLVMZigDIFile *file, unsigned line, uint64_t size_in_bits,
uint64_t align_in_bits, uint64_t offset_in_bits, unsigned flags, LLVMZigDIType *type)
@@ -174,6 +200,26 @@ LLVMZigDIType *LLVMZigCreateDebugMemberType(LLVMZigDIBuilder *dibuilder, LLVMZig
return reinterpret_cast<LLVMZigDIType*>(di_type);
}
+LLVMZigDIType *LLVMZigCreateDebugUnionType(LLVMZigDIBuilder *dibuilder, LLVMZigDIScope *scope,
+ const char *name, LLVMZigDIFile *file, unsigned line_number, uint64_t size_in_bits,
+ uint64_t align_in_bits, unsigned flags, LLVMZigDIType **types_array, int types_array_len,
+ unsigned run_time_lang, const char *unique_id)
+{
+ SmallVector<Metadata *, 8> fields;
+ for (int i = 0; i < types_array_len; i += 1) {
+ DIType *ditype = reinterpret_cast<DIType*>(types_array[i]);
+ fields.push_back(ditype);
+ }
+ DIType *di_type = reinterpret_cast<DIBuilder*>(dibuilder)->createUnionType(
+ reinterpret_cast<DIScope*>(scope),
+ name,
+ reinterpret_cast<DIFile*>(file),
+ line_number, size_in_bits, align_in_bits, flags,
+ reinterpret_cast<DIBuilder*>(dibuilder)->getOrCreateArray(fields),
+ run_time_lang, unique_id);
+ return reinterpret_cast<LLVMZigDIType*>(di_type);
+}
+
LLVMZigDIType *LLVMZigCreateDebugStructType(LLVMZigDIBuilder *dibuilder, LLVMZigDIScope *scope,
const char *name, LLVMZigDIFile *file, unsigned line_number, uint64_t size_in_bits,
uint64_t align_in_bits, unsigned flags, LLVMZigDIType *derived_from,