aboutsummaryrefslogtreecommitdiff
path: root/src/type.zig
diff options
context:
space:
mode:
authorVeikka Tuominen <git@vexu.eu>2023-01-16 19:46:41 +0200
committerVeikka Tuominen <git@vexu.eu>2023-01-16 19:46:41 +0200
commit342bae02d86d9bd9f2db6ae9489021bab28595ae (patch)
tree8b50d7cffff029c135a17295c4c324603d2358b1 /src/type.zig
parent31a2b8c3642f1240a70d78203d568051d4dbcd3f (diff)
downloadzig-342bae02d86d9bd9f2db6ae9489021bab28595ae.tar.gz
zig-342bae02d86d9bd9f2db6ae9489021bab28595ae.zip
Sema: automatically optimize order of struct fields
This is a simple starting version of the optimization described in #168 where the fields are just sorted by order of descending alignment.
Diffstat (limited to 'src/type.zig')
-rw-r--r--src/type.zig6
1 files changed, 5 insertions, 1 deletions
diff --git a/src/type.zig b/src/type.zig
index 4c56a7e167..65391aabfc 100644
--- a/src/type.zig
+++ b/src/type.zig
@@ -5741,10 +5741,14 @@ pub const Type = extern union {
target: Target,
pub fn next(it: *StructOffsetIterator) ?FieldOffset {
- const i = it.field;
+ var i = it.field;
if (it.struct_obj.fields.count() <= i)
return null;
+ if (it.struct_obj.optimized_order) |some| {
+ i = some[i];
+ if (i == Module.Struct.omitted_field) return null;
+ }
const field = it.struct_obj.fields.values()[i];
it.field += 1;