func (a *Arg) Size(typ sys.Type) uintptr { switch typ1 := typ.(type) { case sys.IntType, sys.LenType, sys.FlagsType, sys.ConstType, sys.StrConstType, sys.FileoffType, sys.ResourceType, sys.VmaType, sys.PtrType: return typ.Size() case sys.FilenameType: return uintptr(len(a.Data)) case sys.BufferType: return uintptr(len(a.Data)) case sys.StructType: var size uintptr for i, f := range typ1.Fields { size += a.Inner[i].Size(f) } return size case sys.UnionType: return a.Option.Size(a.OptionType) case sys.ArrayType: var size uintptr for _, in := range a.Inner { size += in.Size(typ1.Type) } return size default: panic("unknown arg type") } }