delve/service/dap/handles.go
Alessandro Arzilli 7857f233ad
service/dap: make handlesMap generic (#3798)
The oldest version of Go we compile with is 1.20 at this point, we can
thus make use of generic type parameters and the handlesMap support
type in service/dap is improved by them.
2024-09-03 10:40:34 -07:00

52 lines
1.5 KiB
Go

package dap
import "github.com/go-delve/delve/pkg/proc"
const startHandle = 1000
// handlesMap maps arbitrary values to unique sequential ids.
// This provides convenient abstraction of references, offering
// opacity and allowing simplification of complex identifiers.
// Based on
// https://github.com/microsoft/vscode-debugadapter-node/blob/master/adapter/src/handles.ts
type handlesMap[T any] struct {
nextHandle int
handleToVal map[int]T
}
type fullyQualifiedVariable struct {
*proc.Variable
// A way to load this variable by either using all names in the hierarchic
// sequence above this variable (most readable when referenced by the UI)
// if available or a special expression based on:
// https://github.com/go-delve/delve/blob/master/Documentation/api/ClientHowto.md#loading-more-of-a-variable
// Empty if the variable cannot or should not be reloaded.
fullyQualifiedNameOrExpr string
// True if this represents variable scope
isScope bool
// startIndex is the index of the first child for an array or slice.
// This variable represents a chunk of the array, slice or map.
startIndex int
}
func newHandlesMap[T any]() *handlesMap[T] {
return &handlesMap[T]{startHandle, make(map[int]T)}
}
func (hs *handlesMap[T]) reset() {
hs.nextHandle = startHandle
hs.handleToVal = make(map[int]T)
}
func (hs *handlesMap[T]) create(value T) int {
next := hs.nextHandle
hs.nextHandle++
hs.handleToVal[next] = value
return next
}
func (hs *handlesMap[T]) get(handle int) (T, bool) {
v, ok := hs.handleToVal[handle]
return v, ok
}