aboutsummaryrefslogtreecommitdiff
path: root/src/types.cpp
diff options
context:
space:
mode:
authorgingerBill <bill@gingerbill.org>2023-04-20 11:46:23 +0100
committergingerBill <bill@gingerbill.org>2023-04-20 11:46:41 +0100
commit84f966cb8fd450f52e6bfdea2bb3c0645e2a77e8 (patch)
treeaad66c4b05af56fdc9964bc326bfcb3f6ecf8c41 /src/types.cpp
parentb2b88f1d99c497f152485869b3f155b965e813bc (diff)
Begin work on separating int and word sizes (i.e. `size_of(int)` might not equal `size_of(uintptr)`)
Diffstat (limited to 'src/types.cpp')
-rw-r--r--src/types.cpp49
1 files changed, 28 insertions, 21 deletions
diff --git a/src/types.cpp b/src/types.cpp
index 889269564..0ce2f127f 100644
--- a/src/types.cpp
+++ b/src/types.cpp
@@ -3410,12 +3410,15 @@ gb_internal i64 type_size_of(Type *t) {
if (t->kind == Type_Basic) {
GB_ASSERT_MSG(is_type_typed(t), "%s", type_to_string(t));
switch (t->Basic.kind) {
- case Basic_string: size = 2*build_context.word_size; break;
+ case Basic_string: size = 2*build_context.int_size; break;
case Basic_cstring: size = build_context.word_size; break;
case Basic_any: size = 2*build_context.word_size; break;
case Basic_typeid: size = build_context.word_size; break;
- case Basic_int: case Basic_uint: case Basic_uintptr: case Basic_rawptr:
+ case Basic_int: case Basic_uint:
+ size = build_context.int_size;
+ break;
+ case Basic_uintptr: case Basic_rawptr:
size = build_context.word_size;
break;
default:
@@ -3470,12 +3473,14 @@ gb_internal i64 type_align_of_internal(Type *t, TypePath *path) {
case Type_Basic: {
GB_ASSERT(is_type_typed(t));
switch (t->Basic.kind) {
- case Basic_string: return build_context.word_size;
+ case Basic_string: return build_context.int_size;
case Basic_cstring: return build_context.word_size;
case Basic_any: return build_context.word_size;
case Basic_typeid: return build_context.word_size;
- case Basic_int: case Basic_uint: case Basic_uintptr: case Basic_rawptr:
+ case Basic_int: case Basic_uint:
+ return build_context.int_size;
+ case Basic_uintptr: case Basic_rawptr:
return build_context.word_size;
case Basic_complex32: case Basic_complex64: case Basic_complex128:
@@ -3509,10 +3514,10 @@ gb_internal i64 type_align_of_internal(Type *t, TypePath *path) {
case Type_DynamicArray:
// data, count, capacity, allocator
- return build_context.word_size;
+ return build_context.int_size;
case Type_Slice:
- return build_context.word_size;
+ return build_context.int_size;
case Type_Tuple: {
@@ -3607,7 +3612,7 @@ gb_internal i64 type_align_of_internal(Type *t, TypePath *path) {
return type_align_of_internal(t->RelativeSlice.base_integer, path);
case Type_SoaPointer:
- return build_context.word_size;
+ return build_context.int_size;
}
// NOTE(bill): Things that are bigger than build_context.word_size, are actually comprised of smaller types
@@ -3692,12 +3697,14 @@ gb_internal i64 type_size_of_internal(Type *t, TypePath *path) {
return size;
}
switch (kind) {
- case Basic_string: return 2*build_context.word_size;
+ case Basic_string: return 2*build_context.int_size;
case Basic_cstring: return build_context.word_size;
case Basic_any: return 2*build_context.word_size;
case Basic_typeid: return build_context.word_size;
- case Basic_int: case Basic_uint: case Basic_uintptr: case Basic_rawptr:
+ case Basic_int: case Basic_uint:
+ return build_context.int_size;
+ case Basic_uintptr: case Basic_rawptr:
return build_context.word_size;
}
} break;
@@ -3709,7 +3716,7 @@ gb_internal i64 type_size_of_internal(Type *t, TypePath *path) {
return build_context.word_size;
case Type_SoaPointer:
- return build_context.word_size*2;
+ return build_context.int_size*2;
case Type_Array: {
i64 count, align, size, alignment;
@@ -3742,11 +3749,11 @@ gb_internal i64 type_size_of_internal(Type *t, TypePath *path) {
} break;
case Type_Slice: // ptr + len
- return 2 * build_context.word_size;
+ return 2 * build_context.int_size;
case Type_DynamicArray:
// data + len + cap + allocator(procedure+data)
- return (3 + 2)*build_context.word_size;
+ return 3*build_context.int_size + 2*build_context.word_size;
case Type_Map:
/*
@@ -3902,8 +3909,8 @@ gb_internal i64 type_offset_of(Type *t, i32 index) {
} else if (t->kind == Type_Basic) {
if (t->Basic.kind == Basic_string) {
switch (index) {
- case 0: return 0; // data
- case 1: return build_context.word_size; // len
+ case 0: return 0; // data
+ case 1: return build_context.int_size; // len
}
} else if (t->Basic.kind == Basic_any) {
switch (index) {
@@ -3913,16 +3920,16 @@ gb_internal i64 type_offset_of(Type *t, i32 index) {
}
} else if (t->kind == Type_Slice) {
switch (index) {
- case 0: return 0; // data
- case 1: return 1*build_context.word_size; // len
- case 2: return 2*build_context.word_size; // cap
+ case 0: return 0; // data
+ case 1: return 1*build_context.int_size; // len
+ case 2: return 2*build_context.int_size; // cap
}
} else if (t->kind == Type_DynamicArray) {
switch (index) {
- case 0: return 0; // data
- case 1: return 1*build_context.word_size; // len
- case 2: return 2*build_context.word_size; // cap
- case 3: return 3*build_context.word_size; // allocator
+ case 0: return 0; // data
+ case 1: return 1*build_context.int_size; // len
+ case 2: return 2*build_context.int_size; // cap
+ case 3: return 3*build_context.int_size; // allocator
}
} else if (t->kind == Type_Union) {
/* i64 s = */ type_size_of(t);