Source File
switch.go
Belonging Package
internal/abi
// 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 abiimporttype InterfaceSwitch struct {Cache *InterfaceSwitchCacheNCases int// Array of NCases elements.// Each case must be a non-empty interface type.Cases [1]*InterfaceType}type InterfaceSwitchCache struct {Mask uintptr // mask for index. Must be a power of 2 minus 1Entries [1]InterfaceSwitchCacheEntry // Mask+1 entries total}type InterfaceSwitchCacheEntry struct {// type of source value (a *Type)Typ uintptr// case # to dispatch toCase int// itab to use for resulting case variable (a *runtime.itab)Itab uintptr}func ( goarch.ArchFamilyType) bool {// We need an atomic load instruction to make the cache multithreaded-safe.// (AtomicLoadPtr needs to be implemented in cmd/compile/internal/ssa/_gen/ARCH.rules.)switch {case goarch.AMD64, goarch.ARM64, goarch.LOONG64, goarch.MIPS, goarch.MIPS64, goarch.PPC64, goarch.RISCV64, goarch.S390X:return truedefault:return false}}type TypeAssert struct {Cache *TypeAssertCacheInter *InterfaceTypeCanFail bool}type TypeAssertCache struct {Mask uintptrEntries [1]TypeAssertCacheEntry}type TypeAssertCacheEntry struct {// type of source value (a *runtime._type)Typ uintptr// itab to use for result (a *runtime.itab)// nil if CanFail is set and conversion would fail.Itab uintptr}
![]() |
The pages are generated with Golds v0.7.9-preview. (GOOS=linux GOARCH=amd64) Golds is a Go 101 project developed by Tapir Liu. PR and bug reports are welcome and can be submitted to the issue list. Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds. |