fornode->loop_type = For_Loop_Array;
}
else if (iter_type->kind == Type_Kind_Slice) {
- if (fornode->by_pointer) fornode->var->type = iter_type->Slice.ptr_to_data;
- else fornode->var->type = iter_type->Slice.ptr_to_data->Pointer.elem;
+ if (fornode->by_pointer) fornode->var->type = type_make_pointer(context.ast_alloc, iter_type->Slice.elem);
+ else fornode->var->type = iter_type->Slice.elem;
fornode->loop_type = For_Loop_Slice;
ERROR_(fornode->var->token->pos, "Cannot iterate by pointer over '%s'.", type_get_name(iter_type));
}
- fornode->var->type = iter_type->VarArgs.ptr_to_data->Pointer.elem;
+ fornode->var->type = iter_type->VarArgs.elem;
// NOTE: Slices are VarArgs are being treated the same here.
fornode->loop_type = For_Loop_Slice;
}
else if (iter_type->kind == Type_Kind_DynArray) {
- if (fornode->by_pointer) fornode->var->type = iter_type->DynArray.ptr_to_data;
- else fornode->var->type = iter_type->DynArray.ptr_to_data->Pointer.elem;
+ if (fornode->by_pointer) fornode->var->type = type_make_pointer(context.ast_alloc, iter_type->DynArray.elem);
+ else fornode->var->type = iter_type->DynArray.elem;
fornode->loop_type = For_Loop_DynArr;
}
if (arg_pos >= callee->type->Function.param_count) goto type_checking_done;
if (formal_params[arg_pos]->kind == Type_Kind_VarArgs) {
- variadic_type = formal_params[arg_pos]->VarArgs.ptr_to_data->Pointer.elem;
+ variadic_type = formal_params[arg_pos]->VarArgs.elem;
variadic_param = &callee->params[arg_pos];
arg_state = AS_Expecting_Typed_VA;
continue;
case Type_Kind_Slice: {
if (t2->kind != Type_Kind_Slice) return 0;
- return types_are_compatible(t1->Slice.ptr_to_data->Pointer.elem, t2->Slice.ptr_to_data->Pointer.elem);
+ return types_are_compatible(t1->Slice.elem, t2->Slice.elem);
}
case Type_Kind_VarArgs: {
if (t2->kind != Type_Kind_VarArgs) return 0;
- return types_are_compatible(t1->VarArgs.ptr_to_data->Pointer.elem, t2->VarArgs.ptr_to_data->Pointer.elem);
+ return types_are_compatible(t1->VarArgs.elem, t2->VarArgs.elem);
}
case Type_Kind_DynArray: {
if (t2->kind != Type_Kind_DynArray) return 0;
- return types_are_compatible(t1->DynArray.ptr_to_data->Pointer.elem, t2->DynArray.ptr_to_data->Pointer.elem);
+ return types_are_compatible(t1->DynArray.elem, t2->DynArray.elem);
}
case Type_Kind_Compound: {
type_register(slice_type);
bh_imap_put(&type_slice_map, of->id, slice_type->id);
- slice_type->Slice.ptr_to_data = type_make_pointer(alloc, of);
+ type_make_pointer(alloc, of);
+ slice_type->Slice.elem = of;
return slice_type;
}
type_register(dynarr);
bh_imap_put(&type_dynarr_map, of->id, dynarr->id);
- dynarr->DynArray.ptr_to_data = type_make_pointer(alloc, of);
+ type_make_pointer(alloc, of);
+ dynarr->DynArray.elem = of;
return dynarr;
}
type_register(va_type);
bh_imap_put(&type_vararg_map, of->id, va_type->id);
- va_type->VarArgs.ptr_to_data = type_make_pointer(alloc, of);
+ type_make_pointer(alloc, of);
+ va_type->VarArgs.elem = of;
return va_type;
}
else
return bh_aprintf(global_scratch_allocator, "%s@%l", "<anonymous enum>", type->id);
- case Type_Kind_Slice: return bh_aprintf(global_scratch_allocator, "[] %s", type_get_unique_name(type->Slice.ptr_to_data->Pointer.elem));
- case Type_Kind_VarArgs: return bh_aprintf(global_scratch_allocator, "..%s", type_get_unique_name(type->VarArgs.ptr_to_data->Pointer.elem));
- case Type_Kind_DynArray: return bh_aprintf(global_scratch_allocator, "[..] %s", type_get_unique_name(type->DynArray.ptr_to_data->Pointer.elem));
+ case Type_Kind_Slice: return bh_aprintf(global_scratch_allocator, "[] %s", type_get_unique_name(type->Slice.elem));
+ case Type_Kind_VarArgs: return bh_aprintf(global_scratch_allocator, "..%s", type_get_unique_name(type->VarArgs.elem));
+ case Type_Kind_DynArray: return bh_aprintf(global_scratch_allocator, "[..] %s", type_get_unique_name(type->DynArray.elem));
case Type_Kind_Function: {
char buf[1024];
else
return "<anonymous enum>";
- case Type_Kind_Slice: return bh_aprintf(global_scratch_allocator, "[] %s", type_get_name(type->Slice.ptr_to_data->Pointer.elem));
- case Type_Kind_VarArgs: return bh_aprintf(global_scratch_allocator, "..%s", type_get_name(type->VarArgs.ptr_to_data->Pointer.elem));
- case Type_Kind_DynArray: return bh_aprintf(global_scratch_allocator, "[..] %s", type_get_name(type->DynArray.ptr_to_data->Pointer.elem));
+ case Type_Kind_Slice: return bh_aprintf(global_scratch_allocator, "[] %s", type_get_name(type->Slice.elem));
+ case Type_Kind_VarArgs: return bh_aprintf(global_scratch_allocator, "..%s", type_get_name(type->VarArgs.elem));
+ case Type_Kind_DynArray: return bh_aprintf(global_scratch_allocator, "[..] %s", type_get_name(type->DynArray.elem));
case Type_Kind_Function: {
char buf[512];
fori (i, 0, (i64) (sizeof(slice_members) / sizeof(StructMember))) {
if (strcmp(slice_members[i].name, member) == 0) {
*smem = slice_members[i];
- if (smem->idx == 0) smem->type = type->Slice.ptr_to_data;
+ if (smem->idx == 0) smem->type = type_make_pointer(context.ast_alloc, type->Slice.elem);
return 1;
}
fori (i, 0, (i64) (sizeof(array_members) / sizeof(StructMember))) {
if (strcmp(array_members[i].name, member) == 0) {
*smem = array_members[i];
- if (smem->idx == 0) smem->type = type->DynArray.ptr_to_data;
+ if (smem->idx == 0) smem->type = type_make_pointer(context.ast_alloc, type->DynArray.elem);
if (smem->idx == 3) smem->type = type_build_from_ast(context.ast_alloc, builtin_allocator_type);
return 1;
if (idx > 2) return 0;
*smem = slice_members[idx];
- if (smem->idx == 0) smem->type = type->Slice.ptr_to_data;
+ if (smem->idx == 0) smem->type = type_make_pointer(context.ast_alloc, type->Slice.elem);
return 1;
}
if (idx > 4) return 0;
*smem = array_members[idx];
- if (idx == 0) smem->type = type->DynArray.ptr_to_data;
+ if (idx == 0) smem->type = type_make_pointer(context.ast_alloc, type->DynArray.elem);
if (idx == 3) smem->type = type_build_from_ast(context.ast_alloc, builtin_allocator_type);
return 1;
case Type_Kind_Slice:
case Type_Kind_VarArgs: {
if (idx == 0) {
- two->type = type->Slice.ptr_to_data;
+ two->type = type_make_pointer(context.ast_alloc, type->Slice.elem);
two->offset = 0;
}
if (idx == 1) {
}
case Type_Kind_DynArray: {
if (idx == 0) {
- two->type = type->DynArray.ptr_to_data;
+ two->type = type_make_pointer(context.ast_alloc, type->DynArray.elem);
two->offset = 0;
}
if (idx == 1) {
bh_buffer_write_u32(&table_buffer, type->kind);
bh_buffer_write_u32(&table_buffer, type_size_of(type));
bh_buffer_write_u32(&table_buffer, type_alignment_of(type));
- bh_buffer_write_u32(&table_buffer, type->Slice.ptr_to_data->Pointer.elem->id);
+ bh_buffer_write_u32(&table_buffer, type->Slice.elem->id);
break;
}
bh_buffer_write_u32(&table_buffer, type->kind);
bh_buffer_write_u32(&table_buffer, type_size_of(type));
bh_buffer_write_u32(&table_buffer, type_alignment_of(type));
- bh_buffer_write_u32(&table_buffer, type->DynArray.ptr_to_data->Pointer.elem->id);
+ bh_buffer_write_u32(&table_buffer, type->DynArray.elem->id);
break;
}
bh_buffer_write_u32(&table_buffer, type->kind);
bh_buffer_write_u32(&table_buffer, type_size_of(type));
bh_buffer_write_u32(&table_buffer, type_alignment_of(type));
- bh_buffer_write_u32(&table_buffer, type->VarArgs.ptr_to_data->Pointer.elem->id);
+ bh_buffer_write_u32(&table_buffer, type->VarArgs.elem->id);
break;
}