From a922d5d42a3ba9bbded0740e1eb3246e7b57ad2a Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Sat, 23 Jan 2016 00:34:47 -0700 Subject: implement literal error values See #23 --- src/codegen.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'src/codegen.cpp') 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(); } -- cgit v1.2.3