aboutsummaryrefslogtreecommitdiff
path: root/src/codegen.cpp
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2016-01-23 00:34:47 -0700
committerAndrew Kelley <superjoe30@gmail.com>2016-01-23 00:34:59 -0700
commita922d5d42a3ba9bbded0740e1eb3246e7b57ad2a (patch)
treef62821f2a88dd807ca28362379cd4b1e01974275 /src/codegen.cpp
parent1543043bf5b5633de485dccee88872a3d4f6c454 (diff)
downloadzig-a922d5d42a3ba9bbded0740e1eb3246e7b57ad2a.tar.gz
zig-a922d5d42a3ba9bbded0740e1eb3246e7b57ad2a.zip
implement literal error values
See #23
Diffstat (limited to 'src/codegen.cpp')
-rw-r--r--src/codegen.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/codegen.cpp b/src/codegen.cpp
index 08d191a505..e81437c66a 100644
--- a/src/codegen.cpp
+++ b/src/codegen.cpp
@@ -284,6 +284,13 @@ static LLVMValueRef gen_cast_expr(CodeGen *g, AstNode *node) {
zig_unreachable();
case CastOpNoop:
return expr_val;
+ case CastOpErrToInt:
+ assert(actual_type->id == TypeTableEntryIdError);
+ if (actual_type->data.error.child_type->size_in_bits == 0) {
+ return expr_val;
+ } else {
+ zig_panic("TODO");
+ }
case CastOpMaybeWrap:
{
assert(cast_expr->tmp_ptr);
@@ -2122,6 +2129,12 @@ static LLVMValueRef gen_const_val(CodeGen *g, TypeTableEntry *type_entry, ConstE
} else {
return global_value;
}
+ } else if (type_entry->id == TypeTableEntryIdError) {
+ if (type_entry->data.error.child_type->size_in_bits == 0) {
+ return LLVMConstInt(g->err_tag_type->type_ref, const_val->data.x_err->value, false);
+ } else {
+ zig_panic("TODO");
+ }
} else {
zig_unreachable();
}