| // Copyright 2024 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| package structs | |
| // HostLayout marks a struct as using host memory layout. A struct with a | |
| // field of type HostLayout will be laid out in memory according to host | |
| // expectations, generally following the host's C ABI. | |
| // | |
| // HostLayout does not affect layout within any other struct-typed fields | |
| // of the containing struct, nor does it affect layout of structs | |
| // containing the struct marked as host layout. | |
| // | |
| // By convention, HostLayout should be used as the type of a field | |
| // named "_", placed at the beginning of the struct type definition. | |
| type HostLayout struct { | |
| _ hostLayout // prevent accidental conversion with plain struct{} | |
| } | |
| // We use an unexported type within the exported type to give the marker | |
| // type itself, rather than merely its name, a recognizable identity in | |
| // the type system. The main consequence of this is that a user can give | |
| // the type a new name and it will still have the same properties, e.g., | |
| // | |
| // type HL structs.HostLayout | |
| // | |
| // It also prevents unintentional conversion of struct{} to a named marker type. | |
| type hostLayout struct { | |
| } | |