no more TypeId. use g->builtin_types.

This commit is contained in:
Josh Wolfe
2015-11-30 15:36:58 -07:00
parent b77c423f77
commit ef482ece7c
3 changed files with 32 additions and 48 deletions

View File

@@ -72,11 +72,11 @@ static LLVMZigDIType *to_llvm_debug_type(AstNode *type_node) {
return type_node->codegen_node->data.type_node.entry->di_type;
}
static bool type_is_unreachable(AstNode *type_node) {
static bool type_is_unreachable(CodeGen *g, AstNode *type_node) {
assert(type_node->type == NodeTypeType);
assert(type_node->codegen_node);
assert(type_node->codegen_node->data.type_node.entry);
return type_node->codegen_node->data.type_node.entry->id == TypeIdUnreachable;
return type_node->codegen_node->data.type_node.entry == g->builtin_types.entry_unreachable;
}
static void add_debug_source_node(CodeGen *g, AstNode *node) {
@@ -137,7 +137,7 @@ static LLVMValueRef gen_fn_call_expr(CodeGen *g, AstNode *node) {
LLVMValueRef result = LLVMZigBuildCall(g->builder, fn_table_entry->fn_value,
param_values, actual_param_count, fn_table_entry->calling_convention, "");
if (type_is_unreachable(fn_table_entry->proto_node->data.fn_proto.return_type)) {
if (type_is_unreachable(g, fn_table_entry->proto_node->data.fn_proto.return_type)) {
return LLVMBuildUnreachable(g->builder);
} else {
return result;
@@ -509,7 +509,7 @@ void code_gen(CodeGen *g) {
LLVMSetLinkage(fn, fn_table_entry->internal_linkage ? LLVMInternalLinkage : LLVMExternalLinkage);
if (type_is_unreachable(fn_proto->return_type)) {
if (type_is_unreachable(g, fn_proto->return_type)) {
LLVMAddFunctionAttr(fn, LLVMNoReturnAttribute);
}
LLVMSetFunctionCallConv(fn, fn_table_entry->calling_convention);
@@ -589,27 +589,15 @@ static Buf *to_c_type(CodeGen *g, AstNode *type_node) {
TypeTableEntry *type_entry = type_node->codegen_node->data.type_node.entry;
assert(type_entry);
switch (type_entry->id) {
case TypeIdUserDefined:
zig_panic("TODO");
break;
case TypeIdPointer:
zig_panic("TODO");
break;
case TypeIdU8:
g->c_stdint_used = true;
return buf_create_from_str("uint8_t");
case TypeIdI32:
g->c_stdint_used = true;
return buf_create_from_str("int32_t");
case TypeIdVoid:
zig_panic("TODO");
break;
case TypeIdUnreachable:
zig_panic("TODO");
break;
if (type_entry == g->builtin_types.entry_u8) {
g->c_stdint_used = true;
return buf_create_from_str("uint8_t");
} else if (type_entry == g->builtin_types.entry_i32) {
g->c_stdint_used = true;
return buf_create_from_str("int32_t");
} else {
zig_panic("TODO");
}
zig_unreachable();
}
static void generate_h_file(CodeGen *g) {