1// Copyright 2023 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package abi
6
7import "unsafe"
8
9// The first word of every non-empty interface type contains an *ITab.
10// It records the underlying concrete type (Type), the interface type it
11// is implementing (Inter), and some ancillary information.
12//
13// allocated in non-garbage-collected memory
14type ITab struct {
15	Inter *InterfaceType
16	Type  *Type
17	Hash  uint32     // copy of Type.Hash. Used for type switches.
18	Fun   [1]uintptr // variable sized. fun[0]==0 means Type does not implement Inter.
19}
20
21// EmptyInterface describes the layout of a "interface{}" or a "any."
22// These are represented differently than non-empty interface, as the first
23// word always points to an abi.Type.
24type EmptyInterface struct {
25	Type *Type
26	Data unsafe.Pointer
27}
28