aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/compiler/gen.go
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2022-01-06 15:07:49 +0100
committerDmitry Vyukov <dvyukov@google.com>2022-01-11 16:30:08 +0100
commit16e21d13ea26a631e9b3a30c94635b1d565fd78f (patch)
tree94bf8af878bd28fd7e43c3850952b53c5ca4c28a /pkg/compiler/gen.go
parent993f2038a54bae8d42ae20fc24ecee845b8b9c5d (diff)
pkg/compiler: refactor code
Slightly refactor code in preparation for future changes. No functional changes intended.
Diffstat (limited to 'pkg/compiler/gen.go')
-rw-r--r--pkg/compiler/gen.go10
1 files changed, 7 insertions, 3 deletions
diff --git a/pkg/compiler/gen.go b/pkg/compiler/gen.go
index bd487432a..b4ee50a9b 100644
--- a/pkg/compiler/gen.go
+++ b/pkg/compiler/gen.go
@@ -360,6 +360,10 @@ func (comp *compiler) layoutStructFields(t *prog.StructType, varlen, packed bool
byteOffset += f.Size()
}
}
+ t.Fields = comp.finalizeStructFields(t, newFields, varlen, structAlign, byteOffset, bitOffset)
+}
+
+func (comp *compiler) finalizeStructFields(t *prog.StructType, fields []prog.Field, varlen bool, structAlign, byteOffset, bitOffset uint64) []prog.Field {
if bitOffset != 0 {
pad := roundup(bitOffset, 8) / 8
byteOffset += pad
@@ -367,7 +371,7 @@ func (comp *compiler) layoutStructFields(t *prog.StructType, varlen, packed bool
if i != 0 && t.Fields[i-1].IsBitfield() {
setBitfieldTypeSize(t.Fields[i-1].Type, pad)
} else {
- newFields = append(newFields, genPad(pad))
+ fields = append(fields, genPad(pad))
}
}
@@ -376,9 +380,9 @@ func (comp *compiler) layoutStructFields(t *prog.StructType, varlen, packed bool
}
if !varlen && structAlign != 0 && byteOffset%structAlign != 0 {
pad := structAlign - byteOffset%structAlign
- newFields = append(newFields, genPad(pad))
+ fields = append(fields, genPad(pad))
}
- t.Fields = newFields
+ return fields
}
func roundup(v, a uint64) uint64 {