From 651dc31247c2f637925ed6a6e92c8bc1a19efd5c Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Thu, 25 Aug 2016 17:25:18 -0700 Subject: implement null as a literal type --- src/codegen.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/codegen.cpp') diff --git a/src/codegen.cpp b/src/codegen.cpp index 12ba5378ac..82f7084159 100644 --- a/src/codegen.cpp +++ b/src/codegen.cpp @@ -875,6 +875,9 @@ static LLVMValueRef gen_cast_expr(CodeGen *g, AstNode *node) { return cast_expr->tmp_ptr; } + case CastOpNullToMaybe: + // handled by constant expression evaluator + zig_unreachable(); case CastOpErrorWrap: { assert(wanted_type->id == TypeTableEntryIdErrorUnion); @@ -3806,6 +3809,7 @@ static LLVMValueRef gen_const_val(CodeGen *g, TypeTableEntry *type_entry, ConstE case TypeTableEntryIdNumLitFloat: case TypeTableEntryIdNumLitInt: case TypeTableEntryIdUndefLit: + case TypeTableEntryIdNullLit: case TypeTableEntryIdVoid: case TypeTableEntryIdNamespace: case TypeTableEntryIdGenericFn: @@ -4311,6 +4315,12 @@ static void define_builtin_types(CodeGen *g) { entry->deep_const = true; g->builtin_types.entry_undef = entry; } + { + TypeTableEntry *entry = new_type_table_entry(TypeTableEntryIdNullLit); + buf_init_from_str(&entry->name, "(null)"); + entry->deep_const = true; + g->builtin_types.entry_null = entry; + } for (int int_size_i = 0; int_size_i < array_length(int_sizes_in_bits); int_size_i += 1) { int size_in_bits = int_sizes_in_bits[int_size_i]; -- cgit v1.2.3