diff options
| author | Andrew Kelley <superjoe30@gmail.com> | 2016-01-11 00:25:17 -0700 |
|---|---|---|
| committer | Andrew Kelley <superjoe30@gmail.com> | 2016-01-11 00:25:17 -0700 |
| commit | 2061cd50c0ec6cfcac60ea98f49e4333a4f508f1 (patch) | |
| tree | 7c119d25686d9ad86282ec58c8e1a43698f27e7f /src/zig_llvm.cpp | |
| parent | b147ff5b60ebb32ec5a3c1f6da82601201d5ad9a (diff) | |
| download | zig-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.cpp | 46 |
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, |
