aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAndrew Kelley <superjoe30@gmail.com>2016-01-22 23:24:09 -0700
committerAndrew Kelley <superjoe30@gmail.com>2016-01-22 23:24:09 -0700
commitbfceb186319f52011762129c879abbe27eaa0161 (patch)
treec6d875f2168c925ec6ffa15412be849c4a35c55d /src
parente269caae02778c5b15a101c42d2d2d5150af59c8 (diff)
downloadzig-bfceb186319f52011762129c879abbe27eaa0161.tar.gz
zig-bfceb186319f52011762129c879abbe27eaa0161.zip
character literal returns a number literal
Diffstat (limited to 'src')
-rw-r--r--src/analyze.cpp3
-rw-r--r--src/codegen.cpp20
2 files changed, 6 insertions, 17 deletions
diff --git a/src/analyze.cpp b/src/analyze.cpp
index 95896d9a2f..9c9df599dd 100644
--- a/src/analyze.cpp
+++ b/src/analyze.cpp
@@ -3648,7 +3648,8 @@ static TypeTableEntry *analyze_expression(CodeGen *g, ImportTableEntry *import,
return_type = analyze_string_literal_expr(g, import, context, expected_type, node);
break;
case NodeTypeCharLiteral:
- return_type = g->builtin_types.entry_u8;
+ return_type = resolve_expr_const_val_as_unsigned_num_lit(g, node, expected_type,
+ node->data.char_literal.value);
break;
case NodeTypeBoolLiteral:
return_type = resolve_expr_const_val_as_bool(g, node, node->data.bool_literal.value);
diff --git a/src/codegen.cpp b/src/codegen.cpp
index c7313fcde3..dcc3c4dff2 100644
--- a/src/codegen.cpp
+++ b/src/codegen.cpp
@@ -1828,12 +1828,6 @@ static LLVMValueRef gen_var_decl_expr(CodeGen *g, AstNode *node) {
get_resolved_expr(node)->block_context, false, &init_val);
}
-static LLVMValueRef gen_error_literal(CodeGen *g, AstNode *node) {
- assert(node->type == NodeTypeErrorLiteral);
-
- zig_panic("TODO gen_error_literal");
-}
-
static LLVMValueRef gen_symbol(CodeGen *g, AstNode *node) {
assert(node->type == NodeTypeSymbol);
VariableTableEntry *variable = node->data.symbol_expr.variable;
@@ -1953,12 +1947,6 @@ static LLVMValueRef gen_expr(CodeGen *g, AstNode *node) {
return gen_slice_expr(g, node);
case NodeTypeFieldAccessExpr:
return gen_field_access_expr(g, node, false);
- case NodeTypeNullLiteral:
- // caught by constant expression eval codegen
- zig_unreachable();
- case NodeTypeUndefinedLiteral:
- // caught by constant expression eval codegen
- zig_unreachable();
case NodeTypeIfBoolExpr:
return gen_if_bool_expr(g, node);
case NodeTypeIfVarExpr:
@@ -1969,10 +1957,6 @@ static LLVMValueRef gen_expr(CodeGen *g, AstNode *node) {
return gen_for_expr(g, node);
case NodeTypeAsmExpr:
return gen_asm_expr(g, node);
- case NodeTypeErrorLiteral:
- return gen_error_literal(g, node);
- case NodeTypeCharLiteral:
- return LLVMConstInt(LLVMInt8Type(), node->data.char_literal.value, false);
case NodeTypeSymbol:
return gen_symbol(g, node);
case NodeTypeBlock:
@@ -2000,9 +1984,13 @@ static LLVMValueRef gen_expr(CodeGen *g, AstNode *node) {
return gen_container_init_expr(g, node);
case NodeTypeSwitchExpr:
return gen_switch_expr(g, node);
+ case NodeTypeErrorLiteral:
case NodeTypeNumberLiteral:
case NodeTypeBoolLiteral:
case NodeTypeStringLiteral:
+ case NodeTypeCharLiteral:
+ case NodeTypeNullLiteral:
+ case NodeTypeUndefinedLiteral:
// caught by constant expression eval codegen
zig_unreachable();
case NodeTypeRoot: