authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-04-24 16:33:41-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2016-04-24 16:33:52-07:00
log3886fdc19b624e6fa47dcd02b627548bc7a7ada0
treeb73b5f700b5514e78c48d755086fe21dc12099aa
parent8583fd7f9f96887fe685354662b1fc076ebeb031

rename unknown_size_array to slice


4 files changed, 23 insertions(+), 23 deletions(-)

src/all_types.hpp+1-1
...@@ -870,7 +870,7 @@ struct TypeTableEntryStruct {...@@ -870,7 +870,7 @@ struct TypeTableEntryStruct {
870 TypeStructField *fields;870 TypeStructField *fields;
871 uint64_t size_bytes;871 uint64_t size_bytes;
872 bool is_invalid; // true if any fields are invalid872 bool is_invalid; // true if any fields are invalid
873 bool is_unknown_size_array;873 bool is_slice;
874 BlockContext *block_context;874 BlockContext *block_context;
875875
876 // set this flag temporarily to detect infinite loops876 // set this flag temporarily to detect infinite loops
src/analyze.cpp+12-12
...@@ -454,7 +454,7 @@ static void slice_type_common_init(CodeGen *g, TypeTableEntry *child_type,...@@ -454,7 +454,7 @@ static void slice_type_common_init(CodeGen *g, TypeTableEntry *child_type,
454454
455 unsigned element_count = 2;455 unsigned element_count = 2;
456 entry->data.structure.is_packed = false;456 entry->data.structure.is_packed = false;
457 entry->data.structure.is_unknown_size_array = true;457 entry->data.structure.is_slice = true;
458 entry->data.structure.src_field_count = element_count;458 entry->data.structure.src_field_count = element_count;
459 entry->data.structure.gen_field_count = element_count;459 entry->data.structure.gen_field_count = element_count;
460 entry->data.structure.fields = allocate<TypeStructField>(element_count);460 entry->data.structure.fields = allocate<TypeStructField>(element_count);
...@@ -1762,8 +1762,8 @@ static bool types_match_const_cast_only(TypeTableEntry *expected_type, TypeTable...@@ -1762,8 +1762,8 @@ static bool types_match_const_cast_only(TypeTableEntry *expected_type, TypeTable
1762 // unknown size array const1762 // unknown size array const
1763 if (expected_type->id == TypeTableEntryIdStruct &&1763 if (expected_type->id == TypeTableEntryIdStruct &&
1764 actual_type->id == TypeTableEntryIdStruct &&1764 actual_type->id == TypeTableEntryIdStruct &&
1765 expected_type->data.structure.is_unknown_size_array &&1765 expected_type->data.structure.is_slice &&
1766 actual_type->data.structure.is_unknown_size_array &&1766 actual_type->data.structure.is_slice &&
1767 (!actual_type->data.structure.fields[0].type_entry->data.pointer.is_const ||1767 (!actual_type->data.structure.fields[0].type_entry->data.pointer.is_const ||
1768 expected_type->data.structure.fields[0].type_entry->data.pointer.is_const))1768 expected_type->data.structure.fields[0].type_entry->data.pointer.is_const))
1769 {1769 {
...@@ -1966,9 +1966,9 @@ static bool types_match_with_implicit_cast(CodeGen *g, TypeTableEntry *expected_...@@ -1966,9 +1966,9 @@ static bool types_match_with_implicit_cast(CodeGen *g, TypeTableEntry *expected_
1966 return true;1966 return true;
1967 }1967 }
19681968
1969 // implicit constant sized array to unknown size array conversion1969 // implicit array to slice conversion
1970 if (expected_type->id == TypeTableEntryIdStruct &&1970 if (expected_type->id == TypeTableEntryIdStruct &&
1971 expected_type->data.structure.is_unknown_size_array &&1971 expected_type->data.structure.is_slice &&
1972 actual_type->id == TypeTableEntryIdArray &&1972 actual_type->id == TypeTableEntryIdArray &&
1973 types_match_const_cast_only(1973 types_match_const_cast_only(
1974 expected_type->data.structure.fields[0].type_entry->data.pointer.child_type,1974 expected_type->data.structure.fields[0].type_entry->data.pointer.child_type,
...@@ -2273,7 +2273,7 @@ static TypeTableEntry *analyze_container_init_expr(CodeGen *g, ImportTableEntry...@@ -2273,7 +2273,7 @@ static TypeTableEntry *analyze_container_init_expr(CodeGen *g, ImportTableEntry
2273 if (container_type->id == TypeTableEntryIdInvalid) {2273 if (container_type->id == TypeTableEntryIdInvalid) {
2274 return container_type;2274 return container_type;
2275 } else if (container_type->id == TypeTableEntryIdStruct &&2275 } else if (container_type->id == TypeTableEntryIdStruct &&
2276 !container_type->data.structure.is_unknown_size_array &&2276 !container_type->data.structure.is_slice &&
2277 (kind == ContainerInitKindStruct || (kind == ContainerInitKindArray &&2277 (kind == ContainerInitKindStruct || (kind == ContainerInitKindArray &&
2278 container_init_expr->entries.length == 0)))2278 container_init_expr->entries.length == 0)))
2279 {2279 {
...@@ -2352,7 +2352,7 @@ static TypeTableEntry *analyze_container_init_expr(CodeGen *g, ImportTableEntry...@@ -2352,7 +2352,7 @@ static TypeTableEntry *analyze_container_init_expr(CodeGen *g, ImportTableEntry
2352 }2352 }
2353 return container_type;2353 return container_type;
2354 } else if (container_type->id == TypeTableEntryIdStruct &&2354 } else if (container_type->id == TypeTableEntryIdStruct &&
2355 container_type->data.structure.is_unknown_size_array &&2355 container_type->data.structure.is_slice &&
2356 kind == ContainerInitKindArray)2356 kind == ContainerInitKindArray)
2357 {2357 {
2358 int elem_count = container_init_expr->entries.length;2358 int elem_count = container_init_expr->entries.length;
...@@ -2573,7 +2573,7 @@ static TypeTableEntry *analyze_slice_expr(CodeGen *g, ImportTableEntry *import,...@@ -2573,7 +2573,7 @@ static TypeTableEntry *analyze_slice_expr(CodeGen *g, ImportTableEntry *import,
2573 return_type = get_slice_type(g, array_type->data.pointer.child_type,2573 return_type = get_slice_type(g, array_type->data.pointer.child_type,
2574 node->data.slice_expr.is_const);2574 node->data.slice_expr.is_const);
2575 } else if (array_type->id == TypeTableEntryIdStruct &&2575 } else if (array_type->id == TypeTableEntryIdStruct &&
2576 array_type->data.structure.is_unknown_size_array)2576 array_type->data.structure.is_slice)
2577 {2577 {
2578 return_type = get_slice_type(g,2578 return_type = get_slice_type(g,
2579 array_type->data.structure.fields[0].type_entry->data.pointer.child_type,2579 array_type->data.structure.fields[0].type_entry->data.pointer.child_type,
...@@ -2623,7 +2623,7 @@ static TypeTableEntry *analyze_array_access_expr(CodeGen *g, ImportTableEntry *i...@@ -2623,7 +2623,7 @@ static TypeTableEntry *analyze_array_access_expr(CodeGen *g, ImportTableEntry *i
2623 } else if (array_type->id == TypeTableEntryIdPointer) {2623 } else if (array_type->id == TypeTableEntryIdPointer) {
2624 return_type = array_type->data.pointer.child_type;2624 return_type = array_type->data.pointer.child_type;
2625 } else if (array_type->id == TypeTableEntryIdStruct &&2625 } else if (array_type->id == TypeTableEntryIdStruct &&
2626 array_type->data.structure.is_unknown_size_array)2626 array_type->data.structure.is_slice)
2627 {2627 {
2628 return_type = array_type->data.structure.fields[0].type_entry->data.pointer.child_type;2628 return_type = array_type->data.structure.fields[0].type_entry->data.pointer.child_type;
2629 } else {2629 } else {
...@@ -3643,7 +3643,7 @@ static TypeTableEntry *analyze_for_expr(CodeGen *g, ImportTableEntry *import, Bl...@@ -3643,7 +3643,7 @@ static TypeTableEntry *analyze_for_expr(CodeGen *g, ImportTableEntry *import, Bl
3643 } else if (array_type->id == TypeTableEntryIdArray) {3643 } else if (array_type->id == TypeTableEntryIdArray) {
3644 child_type = array_type->data.array.child_type;3644 child_type = array_type->data.array.child_type;
3645 } else if (array_type->id == TypeTableEntryIdStruct &&3645 } else if (array_type->id == TypeTableEntryIdStruct &&
3646 array_type->data.structure.is_unknown_size_array)3646 array_type->data.structure.is_slice)
3647 {3647 {
3648 TypeTableEntry *pointer_type = array_type->data.structure.fields[0].type_entry;3648 TypeTableEntry *pointer_type = array_type->data.structure.fields[0].type_entry;
3649 assert(pointer_type->id == TypeTableEntryIdPointer);3649 assert(pointer_type->id == TypeTableEntryIdPointer);
...@@ -3979,9 +3979,9 @@ static TypeTableEntry *analyze_cast_expr(CodeGen *g, ImportTableEntry *import, B...@@ -3979,9 +3979,9 @@ static TypeTableEntry *analyze_cast_expr(CodeGen *g, ImportTableEntry *import, B
3979 return resolve_cast(g, context, node, expr_node, wanted_type, CastOpFloatToInt, false);3979 return resolve_cast(g, context, node, expr_node, wanted_type, CastOpFloatToInt, false);
3980 }3980 }
39813981
3982 // explicit cast from fixed size array to unknown size array3982 // explicit cast from array to slice
3983 if (wanted_type->id == TypeTableEntryIdStruct &&3983 if (wanted_type->id == TypeTableEntryIdStruct &&
3984 wanted_type->data.structure.is_unknown_size_array &&3984 wanted_type->data.structure.is_slice &&
3985 actual_type->id == TypeTableEntryIdArray &&3985 actual_type->id == TypeTableEntryIdArray &&
3986 types_match_const_cast_only(3986 types_match_const_cast_only(
3987 wanted_type->data.structure.fields[0].type_entry->data.pointer.child_type,3987 wanted_type->data.structure.fields[0].type_entry->data.pointer.child_type,
src/codegen.cpp+7-7
...@@ -708,7 +708,7 @@ static LLVMValueRef gen_cast_expr(CodeGen *g, AstNode *node) {...@@ -708,7 +708,7 @@ static LLVMValueRef gen_cast_expr(CodeGen *g, AstNode *node) {
708 {708 {
709 assert(cast_expr->tmp_ptr);709 assert(cast_expr->tmp_ptr);
710 assert(wanted_type->id == TypeTableEntryIdStruct);710 assert(wanted_type->id == TypeTableEntryIdStruct);
711 assert(wanted_type->data.structure.is_unknown_size_array);711 assert(wanted_type->data.structure.is_slice);
712712
713 TypeTableEntry *pointer_type = wanted_type->data.structure.fields[0].type_entry;713 TypeTableEntry *pointer_type = wanted_type->data.structure.fields[0].type_entry;
714714
...@@ -883,7 +883,7 @@ static LLVMValueRef gen_array_elem_ptr(CodeGen *g, AstNode *source_node, LLVMVal...@@ -883,7 +883,7 @@ static LLVMValueRef gen_array_elem_ptr(CodeGen *g, AstNode *source_node, LLVMVal
883 add_debug_source_node(g, source_node);883 add_debug_source_node(g, source_node);
884 return LLVMBuildInBoundsGEP(g->builder, array_ptr, indices, 1, "");884 return LLVMBuildInBoundsGEP(g->builder, array_ptr, indices, 1, "");
885 } else if (array_type->id == TypeTableEntryIdStruct) {885 } else if (array_type->id == TypeTableEntryIdStruct) {
886 assert(array_type->data.structure.is_unknown_size_array);886 assert(array_type->data.structure.is_slice);
887 assert(LLVMGetTypeKind(LLVMTypeOf(array_ptr)) == LLVMPointerTypeKind);887 assert(LLVMGetTypeKind(LLVMTypeOf(array_ptr)) == LLVMPointerTypeKind);
888 assert(LLVMGetTypeKind(LLVMGetElementType(LLVMTypeOf(array_ptr))) == LLVMStructTypeKind);888 assert(LLVMGetTypeKind(LLVMGetElementType(LLVMTypeOf(array_ptr))) == LLVMStructTypeKind);
889889
...@@ -998,7 +998,7 @@ static LLVMValueRef gen_slice_expr(CodeGen *g, AstNode *node) {...@@ -998,7 +998,7 @@ static LLVMValueRef gen_slice_expr(CodeGen *g, AstNode *node) {
998998
999 return tmp_struct_ptr;999 return tmp_struct_ptr;
1000 } else if (array_type->id == TypeTableEntryIdStruct) {1000 } else if (array_type->id == TypeTableEntryIdStruct) {
1001 assert(array_type->data.structure.is_unknown_size_array);1001 assert(array_type->data.structure.is_slice);
1002 assert(LLVMGetTypeKind(LLVMTypeOf(array_ptr)) == LLVMPointerTypeKind);1002 assert(LLVMGetTypeKind(LLVMTypeOf(array_ptr)) == LLVMPointerTypeKind);
1003 assert(LLVMGetTypeKind(LLVMGetElementType(LLVMTypeOf(array_ptr))) == LLVMStructTypeKind);1003 assert(LLVMGetTypeKind(LLVMGetElementType(LLVMTypeOf(array_ptr))) == LLVMStructTypeKind);
10041004
...@@ -1046,7 +1046,7 @@ static LLVMValueRef gen_array_access_expr(CodeGen *g, AstNode *node, bool is_lva...@@ -1046,7 +1046,7 @@ static LLVMValueRef gen_array_access_expr(CodeGen *g, AstNode *node, bool is_lva
1046 if (array_type->id == TypeTableEntryIdPointer) {1046 if (array_type->id == TypeTableEntryIdPointer) {
1047 child_type = array_type->data.pointer.child_type;1047 child_type = array_type->data.pointer.child_type;
1048 } else if (array_type->id == TypeTableEntryIdStruct) {1048 } else if (array_type->id == TypeTableEntryIdStruct) {
1049 assert(array_type->data.structure.is_unknown_size_array);1049 assert(array_type->data.structure.is_slice);
1050 TypeTableEntry *child_ptr_type = array_type->data.structure.fields[0].type_entry;1050 TypeTableEntry *child_ptr_type = array_type->data.structure.fields[0].type_entry;
1051 assert(child_ptr_type->id == TypeTableEntryIdPointer);1051 assert(child_ptr_type->id == TypeTableEntryIdPointer);
1052 child_type = child_ptr_type->data.pointer.child_type;1052 child_type = child_ptr_type->data.pointer.child_type;
...@@ -1134,7 +1134,7 @@ static LLVMValueRef gen_lvalue(CodeGen *g, AstNode *expr_node, AstNode *node,...@@ -1134,7 +1134,7 @@ static LLVMValueRef gen_lvalue(CodeGen *g, AstNode *expr_node, AstNode *node,
1134 *out_type_entry = array_type->data.pointer.child_type;1134 *out_type_entry = array_type->data.pointer.child_type;
1135 target_ref = gen_array_ptr(g, node);1135 target_ref = gen_array_ptr(g, node);
1136 } else if (array_type->id == TypeTableEntryIdStruct) {1136 } else if (array_type->id == TypeTableEntryIdStruct) {
1137 assert(array_type->data.structure.is_unknown_size_array);1137 assert(array_type->data.structure.is_slice);
1138 *out_type_entry = array_type->data.structure.fields[0].type_entry->data.pointer.child_type;1138 *out_type_entry = array_type->data.structure.fields[0].type_entry->data.pointer.child_type;
1139 target_ref = gen_array_ptr(g, node);1139 target_ref = gen_array_ptr(g, node);
1140 } else {1140 } else {
...@@ -2430,7 +2430,7 @@ static LLVMValueRef gen_for_expr(CodeGen *g, AstNode *node) {...@@ -2430,7 +2430,7 @@ static LLVMValueRef gen_for_expr(CodeGen *g, AstNode *node) {
2430 array_type->data.array.len, false);2430 array_type->data.array.len, false);
2431 child_type = array_type->data.array.child_type;2431 child_type = array_type->data.array.child_type;
2432 } else if (array_type->id == TypeTableEntryIdStruct) {2432 } else if (array_type->id == TypeTableEntryIdStruct) {
2433 assert(array_type->data.structure.is_unknown_size_array);2433 assert(array_type->data.structure.is_slice);
2434 TypeTableEntry *child_ptr_type = array_type->data.structure.fields[0].type_entry;2434 TypeTableEntry *child_ptr_type = array_type->data.structure.fields[0].type_entry;
2435 assert(child_ptr_type->id == TypeTableEntryIdPointer);2435 assert(child_ptr_type->id == TypeTableEntryIdPointer);
2436 child_type = child_ptr_type->data.pointer.child_type;2436 child_type = child_ptr_type->data.pointer.child_type;
...@@ -2537,7 +2537,7 @@ static LLVMValueRef gen_var_decl_raw(CodeGen *g, AstNode *source_node, AstNodeVa...@@ -2537,7 +2537,7 @@ static LLVMValueRef gen_var_decl_raw(CodeGen *g, AstNode *source_node, AstNodeVa
2537 if (var_decl->type) {2537 if (var_decl->type) {
2538 TypeTableEntry *var_type = get_type_for_type_node(var_decl->type);2538 TypeTableEntry *var_type = get_type_for_type_node(var_decl->type);
2539 if (var_type->id == TypeTableEntryIdStruct &&2539 if (var_type->id == TypeTableEntryIdStruct &&
2540 var_type->data.structure.is_unknown_size_array)2540 var_type->data.structure.is_slice)
2541 {2541 {
2542 assert(var_decl->type->type == NodeTypeArrayType);2542 assert(var_decl->type->type == NodeTypeArrayType);
2543 AstNode *size_node = var_decl->type->data.array_type.size;2543 AstNode *size_node = var_decl->type->data.array_type.size;
src/eval.cpp+3-3
...@@ -331,7 +331,7 @@ static bool eval_container_init_expr(EvalFn *ef, AstNode *node, ConstExprValue *...@@ -331,7 +331,7 @@ static bool eval_container_init_expr(EvalFn *ef, AstNode *node, ConstExprValue *
331 out_val->ok = true;331 out_val->ok = true;
332332
333 if (container_type->id == TypeTableEntryIdStruct &&333 if (container_type->id == TypeTableEntryIdStruct &&
334 !container_type->data.structure.is_unknown_size_array &&334 !container_type->data.structure.is_slice &&
335 kind == ContainerInitKindStruct)335 kind == ContainerInitKindStruct)
336 {336 {
337 int expr_field_count = container_init_expr->entries.length;337 int expr_field_count = container_init_expr->entries.length;
...@@ -367,7 +367,7 @@ static bool eval_container_init_expr(EvalFn *ef, AstNode *node, ConstExprValue *...@@ -367,7 +367,7 @@ static bool eval_container_init_expr(EvalFn *ef, AstNode *node, ConstExprValue *
367 add_error_note(ef->root->codegen, msg, node, buf_sprintf("unreachable expression here"));367 add_error_note(ef->root->codegen, msg, node, buf_sprintf("unreachable expression here"));
368 return true;368 return true;
369 } else if (container_type->id == TypeTableEntryIdStruct &&369 } else if (container_type->id == TypeTableEntryIdStruct &&
370 container_type->data.structure.is_unknown_size_array &&370 container_type->data.structure.is_slice &&
371 kind == ContainerInitKindArray)371 kind == ContainerInitKindArray)
372 {372 {
373373
...@@ -892,7 +892,7 @@ static bool eval_array_access_expr(EvalFn *ef, AstNode *node, ConstExprValue *ou...@@ -892,7 +892,7 @@ static bool eval_array_access_expr(EvalFn *ef, AstNode *node, ConstExprValue *ou
892 }892 }
893 *out_val = *array_val.data.x_ptr.ptr[index_int];893 *out_val = *array_val.data.x_ptr.ptr[index_int];
894 } else if (array_type->id == TypeTableEntryIdStruct) {894 } else if (array_type->id == TypeTableEntryIdStruct) {
895 assert(array_type->data.structure.is_unknown_size_array);895 assert(array_type->data.structure.is_slice);
896896
897 ConstExprValue *len_value = array_val.data.x_struct.fields[1];897 ConstExprValue *len_value = array_val.data.x_struct.fields[1];
898 uint64_t len_int = len_value->data.x_bignum.data.x_uint;898 uint64_t len_int = len_value->data.x_bignum.data.x_uint;