28 lines
895 B
Go
28 lines
895 B
Go
// Copyright 2023 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 abi
|
|
|
|
import "unsafe"
|
|
|
|
// The first word of every non-empty interface type contains an *ITab.
|
|
// It records the underlying concrete type (Type), the interface type it
|
|
// is implementing (Inter), and some ancillary information.
|
|
//
|
|
// allocated in non-garbage-collected memory
|
|
type ITab struct {
|
|
Inter *InterfaceType
|
|
Type *Type
|
|
Hash uint32 // copy of Type.Hash. Used for type switches.
|
|
Fun [1]uintptr // variable sized. fun[0]==0 means Type does not implement Inter.
|
|
}
|
|
|
|
// EmptyInterface describes the layout of a "interface{}" or a "any."
|
|
// These are represented differently than non-empty interface, as the first
|
|
// word always points to an abi.Type.
|
|
type EmptyInterface struct {
|
|
Type *Type
|
|
Data unsafe.Pointer
|
|
}
|