diff options
| author | Veikka Tuominen <git@vexu.eu> | 2023-01-16 19:46:41 +0200 |
|---|---|---|
| committer | Veikka Tuominen <git@vexu.eu> | 2023-01-16 19:46:41 +0200 |
| commit | 342bae02d86d9bd9f2db6ae9489021bab28595ae (patch) | |
| tree | 8b50d7cffff029c135a17295c4c324603d2358b1 /src/type.zig | |
| parent | 31a2b8c3642f1240a70d78203d568051d4dbcd3f (diff) | |
| download | zig-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.zig | 6 |
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; |
