mirror of https://github.com/cheat/cheat.git
114 lines
2.0 KiB
Go
114 lines
2.0 KiB
Go
|
// Copyright 2021 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 pkgbits
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
// fmtFrames formats a backtrace for reporting reader/writer desyncs.
|
||
|
func fmtFrames(pcs ...uintptr) []string {
|
||
|
res := make([]string, 0, len(pcs))
|
||
|
walkFrames(pcs, func(file string, line int, name string, offset uintptr) {
|
||
|
// Trim package from function name. It's just redundant noise.
|
||
|
name = strings.TrimPrefix(name, "cmd/compile/internal/noder.")
|
||
|
|
||
|
res = append(res, fmt.Sprintf("%s:%v: %s +0x%v", file, line, name, offset))
|
||
|
})
|
||
|
return res
|
||
|
}
|
||
|
|
||
|
type frameVisitor func(file string, line int, name string, offset uintptr)
|
||
|
|
||
|
// SyncMarker is an enum type that represents markers that may be
|
||
|
// written to export data to ensure the reader and writer stay
|
||
|
// synchronized.
|
||
|
type SyncMarker int
|
||
|
|
||
|
//go:generate stringer -type=SyncMarker -trimprefix=Sync
|
||
|
|
||
|
const (
|
||
|
_ SyncMarker = iota
|
||
|
|
||
|
// Public markers (known to go/types importers).
|
||
|
|
||
|
// Low-level coding markers.
|
||
|
SyncEOF
|
||
|
SyncBool
|
||
|
SyncInt64
|
||
|
SyncUint64
|
||
|
SyncString
|
||
|
SyncValue
|
||
|
SyncVal
|
||
|
SyncRelocs
|
||
|
SyncReloc
|
||
|
SyncUseReloc
|
||
|
|
||
|
// Higher-level object and type markers.
|
||
|
SyncPublic
|
||
|
SyncPos
|
||
|
SyncPosBase
|
||
|
SyncObject
|
||
|
SyncObject1
|
||
|
SyncPkg
|
||
|
SyncPkgDef
|
||
|
SyncMethod
|
||
|
SyncType
|
||
|
SyncTypeIdx
|
||
|
SyncTypeParamNames
|
||
|
SyncSignature
|
||
|
SyncParams
|
||
|
SyncParam
|
||
|
SyncCodeObj
|
||
|
SyncSym
|
||
|
SyncLocalIdent
|
||
|
SyncSelector
|
||
|
|
||
|
// Private markers (only known to cmd/compile).
|
||
|
SyncPrivate
|
||
|
|
||
|
SyncFuncExt
|
||
|
SyncVarExt
|
||
|
SyncTypeExt
|
||
|
SyncPragma
|
||
|
|
||
|
SyncExprList
|
||
|
SyncExprs
|
||
|
SyncExpr
|
||
|
SyncExprType
|
||
|
SyncAssign
|
||
|
SyncOp
|
||
|
SyncFuncLit
|
||
|
SyncCompLit
|
||
|
|
||
|
SyncDecl
|
||
|
SyncFuncBody
|
||
|
SyncOpenScope
|
||
|
SyncCloseScope
|
||
|
SyncCloseAnotherScope
|
||
|
SyncDeclNames
|
||
|
SyncDeclName
|
||
|
|
||
|
SyncStmts
|
||
|
SyncBlockStmt
|
||
|
SyncIfStmt
|
||
|
SyncForStmt
|
||
|
SyncSwitchStmt
|
||
|
SyncRangeStmt
|
||
|
SyncCaseClause
|
||
|
SyncCommClause
|
||
|
SyncSelectStmt
|
||
|
SyncDecls
|
||
|
SyncLabeledStmt
|
||
|
SyncUseObjLocal
|
||
|
SyncAddLocal
|
||
|
SyncLinkname
|
||
|
SyncStmt1
|
||
|
SyncStmtsEnd
|
||
|
SyncLabel
|
||
|
SyncOptLabel
|
||
|
)
|