mirror of
https://github.com/mjl-/mox.git
synced 2025-01-14 01:06:27 +03:00
update to latest golang.org/x dependencies
This commit is contained in:
parent
8cc795b2ec
commit
b3a693ee31
32 changed files with 18172 additions and 969 deletions
13
go.mod
13
go.mod
|
@ -14,9 +14,9 @@ require (
|
||||||
github.com/prometheus/client_golang v1.18.0
|
github.com/prometheus/client_golang v1.18.0
|
||||||
github.com/russross/blackfriday/v2 v2.1.0
|
github.com/russross/blackfriday/v2 v2.1.0
|
||||||
go.etcd.io/bbolt v1.3.9
|
go.etcd.io/bbolt v1.3.9
|
||||||
golang.org/x/crypto v0.21.0
|
golang.org/x/crypto v0.22.0
|
||||||
golang.org/x/exp v0.0.0-20240222234643-814bf88cf225
|
golang.org/x/exp v0.0.0-20240416160154-fe59bbe5cc7f
|
||||||
golang.org/x/net v0.22.0
|
golang.org/x/net v0.24.0
|
||||||
golang.org/x/text v0.14.0
|
golang.org/x/text v0.14.0
|
||||||
rsc.io/qr v0.2.0
|
rsc.io/qr v0.2.0
|
||||||
)
|
)
|
||||||
|
@ -29,8 +29,9 @@ require (
|
||||||
github.com/prometheus/client_model v0.5.0 // indirect
|
github.com/prometheus/client_model v0.5.0 // indirect
|
||||||
github.com/prometheus/common v0.45.0 // indirect
|
github.com/prometheus/common v0.45.0 // indirect
|
||||||
github.com/prometheus/procfs v0.12.0 // indirect
|
github.com/prometheus/procfs v0.12.0 // indirect
|
||||||
golang.org/x/mod v0.16.0 // indirect
|
golang.org/x/mod v0.17.0 // indirect
|
||||||
golang.org/x/sys v0.18.0 // indirect
|
golang.org/x/sync v0.7.0 // indirect
|
||||||
golang.org/x/tools v0.19.0 // indirect
|
golang.org/x/sys v0.19.0 // indirect
|
||||||
|
golang.org/x/tools v0.20.0 // indirect
|
||||||
google.golang.org/protobuf v1.31.0 // indirect
|
google.golang.org/protobuf v1.31.0 // indirect
|
||||||
)
|
)
|
||||||
|
|
28
go.sum
28
go.sum
|
@ -73,35 +73,35 @@ go.etcd.io/bbolt v1.3.9/go.mod h1:zaO32+Ti0PK1ivdPtgMESzuzL2VPoIG1PCQNvOdo/dE=
|
||||||
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||||
golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA=
|
golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30=
|
||||||
golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs=
|
golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M=
|
||||||
golang.org/x/exp v0.0.0-20240222234643-814bf88cf225 h1:LfspQV/FYTatPTr/3HzIcmiUFH7PGP+OQ6mgDYo3yuQ=
|
golang.org/x/exp v0.0.0-20240416160154-fe59bbe5cc7f h1:99ci1mjWVBWwJiEKYY6jWa4d2nTQVIEhZIptnrVb1XY=
|
||||||
golang.org/x/exp v0.0.0-20240222234643-814bf88cf225/go.mod h1:CxmFvTBINI24O/j8iY7H1xHzx2i4OsyguNBmN/uPtqc=
|
golang.org/x/exp v0.0.0-20240416160154-fe59bbe5cc7f/go.mod h1:/lliqkxwWAhPjf5oSOIJup2XcqJaw8RGS6k3TGEc7GI=
|
||||||
golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
|
golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro=
|
||||||
golang.org/x/mod v0.16.0 h1:QX4fJ0Rr5cPQCF7O9lh9Se4pmwfwskqZfq5moyldzic=
|
golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA=
|
||||||
golang.org/x/mod v0.16.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
|
||||||
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||||
golang.org/x/net v0.22.0 h1:9sGLhx7iRIHEiX0oAJ3MRZMUCElJgy7Br1nO+AMN3Tc=
|
golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w=
|
||||||
golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
|
golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8=
|
||||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||||
golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
|
golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M=
|
||||||
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
|
||||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||||
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
|
golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
|
||||||
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
|
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
|
||||||
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||||
golang.org/x/tools v0.19.0 h1:tfGCXNR1OsFG+sVdLAitlpjAvD/I6dHDKnYrpEZUHkw=
|
golang.org/x/tools v0.20.0 h1:hz/CVckiOxybQvFw6h7b/q80NTr9IUQb4s1IIzW7KNY=
|
||||||
golang.org/x/tools v0.19.0/go.mod h1:qoJWxmGSIBmAeriMx19ogtrEPrGtDbPK634QFIcLAhc=
|
golang.org/x/tools v0.20.0/go.mod h1:WvitBU7JJf6A4jOdg4S1tviW9bhUxkgeCui/0JHctQg=
|
||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
|
|
2
vendor/golang.org/x/mod/modfile/read.go
generated
vendored
2
vendor/golang.org/x/mod/modfile/read.go
generated
vendored
|
@ -225,7 +225,7 @@ func (x *FileSyntax) Cleanup() {
|
||||||
if ww == 0 {
|
if ww == 0 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if ww == 1 {
|
if ww == 1 && len(stmt.RParen.Comments.Before) == 0 {
|
||||||
// Collapse block into single line.
|
// Collapse block into single line.
|
||||||
line := &Line{
|
line := &Line{
|
||||||
Comments: Comments{
|
Comments: Comments{
|
||||||
|
|
2
vendor/golang.org/x/mod/modfile/rule.go
generated
vendored
2
vendor/golang.org/x/mod/modfile/rule.go
generated
vendored
|
@ -975,6 +975,8 @@ func (f *File) AddGoStmt(version string) error {
|
||||||
var hint Expr
|
var hint Expr
|
||||||
if f.Module != nil && f.Module.Syntax != nil {
|
if f.Module != nil && f.Module.Syntax != nil {
|
||||||
hint = f.Module.Syntax
|
hint = f.Module.Syntax
|
||||||
|
} else if f.Syntax == nil {
|
||||||
|
f.Syntax = new(FileSyntax)
|
||||||
}
|
}
|
||||||
f.Go = &Go{
|
f.Go = &Go{
|
||||||
Version: version,
|
Version: version,
|
||||||
|
|
27
vendor/golang.org/x/sync/LICENSE
generated
vendored
Normal file
27
vendor/golang.org/x/sync/LICENSE
generated
vendored
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
Copyright (c) 2009 The Go Authors. All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without
|
||||||
|
modification, are permitted provided that the following conditions are
|
||||||
|
met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above copyright
|
||||||
|
notice, this list of conditions and the following disclaimer.
|
||||||
|
* Redistributions in binary form must reproduce the above
|
||||||
|
copyright notice, this list of conditions and the following disclaimer
|
||||||
|
in the documentation and/or other materials provided with the
|
||||||
|
distribution.
|
||||||
|
* Neither the name of Google Inc. nor the names of its
|
||||||
|
contributors may be used to endorse or promote products derived from
|
||||||
|
this software without specific prior written permission.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
22
vendor/golang.org/x/sync/PATENTS
generated
vendored
Normal file
22
vendor/golang.org/x/sync/PATENTS
generated
vendored
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
Additional IP Rights Grant (Patents)
|
||||||
|
|
||||||
|
"This implementation" means the copyrightable works distributed by
|
||||||
|
Google as part of the Go project.
|
||||||
|
|
||||||
|
Google hereby grants to You a perpetual, worldwide, non-exclusive,
|
||||||
|
no-charge, royalty-free, irrevocable (except as stated in this section)
|
||||||
|
patent license to make, have made, use, offer to sell, sell, import,
|
||||||
|
transfer and otherwise run, modify and propagate the contents of this
|
||||||
|
implementation of Go, where such license applies only to those patent
|
||||||
|
claims, both currently owned or controlled by Google and acquired in
|
||||||
|
the future, licensable by Google that are necessarily infringed by this
|
||||||
|
implementation of Go. This grant does not include claims that would be
|
||||||
|
infringed only as a consequence of further modification of this
|
||||||
|
implementation. If you or your agent or exclusive licensee institute or
|
||||||
|
order or agree to the institution of patent litigation against any
|
||||||
|
entity (including a cross-claim or counterclaim in a lawsuit) alleging
|
||||||
|
that this implementation of Go or any code incorporated within this
|
||||||
|
implementation of Go constitutes direct or contributory patent
|
||||||
|
infringement, or inducement of patent infringement, then any patent
|
||||||
|
rights granted to you under this License for this implementation of Go
|
||||||
|
shall terminate as of the date such litigation is filed.
|
135
vendor/golang.org/x/sync/errgroup/errgroup.go
generated
vendored
Normal file
135
vendor/golang.org/x/sync/errgroup/errgroup.go
generated
vendored
Normal file
|
@ -0,0 +1,135 @@
|
||||||
|
// Copyright 2016 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 errgroup provides synchronization, error propagation, and Context
|
||||||
|
// cancelation for groups of goroutines working on subtasks of a common task.
|
||||||
|
//
|
||||||
|
// [errgroup.Group] is related to [sync.WaitGroup] but adds handling of tasks
|
||||||
|
// returning errors.
|
||||||
|
package errgroup
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"sync"
|
||||||
|
)
|
||||||
|
|
||||||
|
type token struct{}
|
||||||
|
|
||||||
|
// A Group is a collection of goroutines working on subtasks that are part of
|
||||||
|
// the same overall task.
|
||||||
|
//
|
||||||
|
// A zero Group is valid, has no limit on the number of active goroutines,
|
||||||
|
// and does not cancel on error.
|
||||||
|
type Group struct {
|
||||||
|
cancel func(error)
|
||||||
|
|
||||||
|
wg sync.WaitGroup
|
||||||
|
|
||||||
|
sem chan token
|
||||||
|
|
||||||
|
errOnce sync.Once
|
||||||
|
err error
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *Group) done() {
|
||||||
|
if g.sem != nil {
|
||||||
|
<-g.sem
|
||||||
|
}
|
||||||
|
g.wg.Done()
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithContext returns a new Group and an associated Context derived from ctx.
|
||||||
|
//
|
||||||
|
// The derived Context is canceled the first time a function passed to Go
|
||||||
|
// returns a non-nil error or the first time Wait returns, whichever occurs
|
||||||
|
// first.
|
||||||
|
func WithContext(ctx context.Context) (*Group, context.Context) {
|
||||||
|
ctx, cancel := withCancelCause(ctx)
|
||||||
|
return &Group{cancel: cancel}, ctx
|
||||||
|
}
|
||||||
|
|
||||||
|
// Wait blocks until all function calls from the Go method have returned, then
|
||||||
|
// returns the first non-nil error (if any) from them.
|
||||||
|
func (g *Group) Wait() error {
|
||||||
|
g.wg.Wait()
|
||||||
|
if g.cancel != nil {
|
||||||
|
g.cancel(g.err)
|
||||||
|
}
|
||||||
|
return g.err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Go calls the given function in a new goroutine.
|
||||||
|
// It blocks until the new goroutine can be added without the number of
|
||||||
|
// active goroutines in the group exceeding the configured limit.
|
||||||
|
//
|
||||||
|
// The first call to return a non-nil error cancels the group's context, if the
|
||||||
|
// group was created by calling WithContext. The error will be returned by Wait.
|
||||||
|
func (g *Group) Go(f func() error) {
|
||||||
|
if g.sem != nil {
|
||||||
|
g.sem <- token{}
|
||||||
|
}
|
||||||
|
|
||||||
|
g.wg.Add(1)
|
||||||
|
go func() {
|
||||||
|
defer g.done()
|
||||||
|
|
||||||
|
if err := f(); err != nil {
|
||||||
|
g.errOnce.Do(func() {
|
||||||
|
g.err = err
|
||||||
|
if g.cancel != nil {
|
||||||
|
g.cancel(g.err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
|
||||||
|
// TryGo calls the given function in a new goroutine only if the number of
|
||||||
|
// active goroutines in the group is currently below the configured limit.
|
||||||
|
//
|
||||||
|
// The return value reports whether the goroutine was started.
|
||||||
|
func (g *Group) TryGo(f func() error) bool {
|
||||||
|
if g.sem != nil {
|
||||||
|
select {
|
||||||
|
case g.sem <- token{}:
|
||||||
|
// Note: this allows barging iff channels in general allow barging.
|
||||||
|
default:
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
g.wg.Add(1)
|
||||||
|
go func() {
|
||||||
|
defer g.done()
|
||||||
|
|
||||||
|
if err := f(); err != nil {
|
||||||
|
g.errOnce.Do(func() {
|
||||||
|
g.err = err
|
||||||
|
if g.cancel != nil {
|
||||||
|
g.cancel(g.err)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetLimit limits the number of active goroutines in this group to at most n.
|
||||||
|
// A negative value indicates no limit.
|
||||||
|
//
|
||||||
|
// Any subsequent call to the Go method will block until it can add an active
|
||||||
|
// goroutine without exceeding the configured limit.
|
||||||
|
//
|
||||||
|
// The limit must not be modified while any goroutines in the group are active.
|
||||||
|
func (g *Group) SetLimit(n int) {
|
||||||
|
if n < 0 {
|
||||||
|
g.sem = nil
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if len(g.sem) != 0 {
|
||||||
|
panic(fmt.Errorf("errgroup: modify limit while %v goroutines in the group are still active", len(g.sem)))
|
||||||
|
}
|
||||||
|
g.sem = make(chan token, n)
|
||||||
|
}
|
13
vendor/golang.org/x/sync/errgroup/go120.go
generated
vendored
Normal file
13
vendor/golang.org/x/sync/errgroup/go120.go
generated
vendored
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
// 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.
|
||||||
|
|
||||||
|
//go:build go1.20
|
||||||
|
|
||||||
|
package errgroup
|
||||||
|
|
||||||
|
import "context"
|
||||||
|
|
||||||
|
func withCancelCause(parent context.Context) (context.Context, func(error)) {
|
||||||
|
return context.WithCancelCause(parent)
|
||||||
|
}
|
14
vendor/golang.org/x/sync/errgroup/pre_go120.go
generated
vendored
Normal file
14
vendor/golang.org/x/sync/errgroup/pre_go120.go
generated
vendored
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
// 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.
|
||||||
|
|
||||||
|
//go:build !go1.20
|
||||||
|
|
||||||
|
package errgroup
|
||||||
|
|
||||||
|
import "context"
|
||||||
|
|
||||||
|
func withCancelCause(parent context.Context) (context.Context, func(error)) {
|
||||||
|
ctx, cancel := context.WithCancel(parent)
|
||||||
|
return ctx, func(error) { cancel() }
|
||||||
|
}
|
2
vendor/golang.org/x/sys/unix/mmap_nomremap.go
generated
vendored
2
vendor/golang.org/x/sys/unix/mmap_nomremap.go
generated
vendored
|
@ -2,7 +2,7 @@
|
||||||
// Use of this source code is governed by a BSD-style
|
// Use of this source code is governed by a BSD-style
|
||||||
// license that can be found in the LICENSE file.
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
//go:build aix || darwin || dragonfly || freebsd || openbsd || solaris
|
//go:build aix || darwin || dragonfly || freebsd || openbsd || solaris || zos
|
||||||
|
|
||||||
package unix
|
package unix
|
||||||
|
|
||||||
|
|
8
vendor/golang.org/x/sys/unix/syscall_zos_s390x.go
generated
vendored
8
vendor/golang.org/x/sys/unix/syscall_zos_s390x.go
generated
vendored
|
@ -1520,6 +1520,14 @@ func (m *mmapper) Munmap(data []byte) (err error) {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Mmap(fd int, offset int64, length int, prot int, flags int) (data []byte, err error) {
|
||||||
|
return mapper.Mmap(fd, offset, length, prot, flags)
|
||||||
|
}
|
||||||
|
|
||||||
|
func Munmap(b []byte) (err error) {
|
||||||
|
return mapper.Munmap(b)
|
||||||
|
}
|
||||||
|
|
||||||
func Read(fd int, p []byte) (n int, err error) {
|
func Read(fd int, p []byte) (n int, err error) {
|
||||||
n, err = read(fd, p)
|
n, err = read(fd, p)
|
||||||
if raceenabled {
|
if raceenabled {
|
||||||
|
|
82
vendor/golang.org/x/sys/windows/syscall_windows.go
generated
vendored
82
vendor/golang.org/x/sys/windows/syscall_windows.go
generated
vendored
|
@ -165,6 +165,7 @@ func NewCallbackCDecl(fn interface{}) uintptr {
|
||||||
//sys CreateFile(name *uint16, access uint32, mode uint32, sa *SecurityAttributes, createmode uint32, attrs uint32, templatefile Handle) (handle Handle, err error) [failretval==InvalidHandle] = CreateFileW
|
//sys CreateFile(name *uint16, access uint32, mode uint32, sa *SecurityAttributes, createmode uint32, attrs uint32, templatefile Handle) (handle Handle, err error) [failretval==InvalidHandle] = CreateFileW
|
||||||
//sys CreateNamedPipe(name *uint16, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *SecurityAttributes) (handle Handle, err error) [failretval==InvalidHandle] = CreateNamedPipeW
|
//sys CreateNamedPipe(name *uint16, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *SecurityAttributes) (handle Handle, err error) [failretval==InvalidHandle] = CreateNamedPipeW
|
||||||
//sys ConnectNamedPipe(pipe Handle, overlapped *Overlapped) (err error)
|
//sys ConnectNamedPipe(pipe Handle, overlapped *Overlapped) (err error)
|
||||||
|
//sys DisconnectNamedPipe(pipe Handle) (err error)
|
||||||
//sys GetNamedPipeInfo(pipe Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error)
|
//sys GetNamedPipeInfo(pipe Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error)
|
||||||
//sys GetNamedPipeHandleState(pipe Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) = GetNamedPipeHandleStateW
|
//sys GetNamedPipeHandleState(pipe Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) = GetNamedPipeHandleStateW
|
||||||
//sys SetNamedPipeHandleState(pipe Handle, state *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32) (err error) = SetNamedPipeHandleState
|
//sys SetNamedPipeHandleState(pipe Handle, state *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32) (err error) = SetNamedPipeHandleState
|
||||||
|
@ -348,8 +349,19 @@ func NewCallbackCDecl(fn interface{}) uintptr {
|
||||||
//sys SetProcessPriorityBoost(process Handle, disable bool) (err error) = kernel32.SetProcessPriorityBoost
|
//sys SetProcessPriorityBoost(process Handle, disable bool) (err error) = kernel32.SetProcessPriorityBoost
|
||||||
//sys GetProcessWorkingSetSizeEx(hProcess Handle, lpMinimumWorkingSetSize *uintptr, lpMaximumWorkingSetSize *uintptr, flags *uint32)
|
//sys GetProcessWorkingSetSizeEx(hProcess Handle, lpMinimumWorkingSetSize *uintptr, lpMaximumWorkingSetSize *uintptr, flags *uint32)
|
||||||
//sys SetProcessWorkingSetSizeEx(hProcess Handle, dwMinimumWorkingSetSize uintptr, dwMaximumWorkingSetSize uintptr, flags uint32) (err error)
|
//sys SetProcessWorkingSetSizeEx(hProcess Handle, dwMinimumWorkingSetSize uintptr, dwMaximumWorkingSetSize uintptr, flags uint32) (err error)
|
||||||
|
//sys ClearCommBreak(handle Handle) (err error)
|
||||||
|
//sys ClearCommError(handle Handle, lpErrors *uint32, lpStat *ComStat) (err error)
|
||||||
|
//sys EscapeCommFunction(handle Handle, dwFunc uint32) (err error)
|
||||||
|
//sys GetCommState(handle Handle, lpDCB *DCB) (err error)
|
||||||
|
//sys GetCommModemStatus(handle Handle, lpModemStat *uint32) (err error)
|
||||||
//sys GetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error)
|
//sys GetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error)
|
||||||
|
//sys PurgeComm(handle Handle, dwFlags uint32) (err error)
|
||||||
|
//sys SetCommBreak(handle Handle) (err error)
|
||||||
|
//sys SetCommMask(handle Handle, dwEvtMask uint32) (err error)
|
||||||
|
//sys SetCommState(handle Handle, lpDCB *DCB) (err error)
|
||||||
//sys SetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error)
|
//sys SetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error)
|
||||||
|
//sys SetupComm(handle Handle, dwInQueue uint32, dwOutQueue uint32) (err error)
|
||||||
|
//sys WaitCommEvent(handle Handle, lpEvtMask *uint32, lpOverlapped *Overlapped) (err error)
|
||||||
//sys GetActiveProcessorCount(groupNumber uint16) (ret uint32)
|
//sys GetActiveProcessorCount(groupNumber uint16) (ret uint32)
|
||||||
//sys GetMaximumProcessorCount(groupNumber uint16) (ret uint32)
|
//sys GetMaximumProcessorCount(groupNumber uint16) (ret uint32)
|
||||||
//sys EnumWindows(enumFunc uintptr, param unsafe.Pointer) (err error) = user32.EnumWindows
|
//sys EnumWindows(enumFunc uintptr, param unsafe.Pointer) (err error) = user32.EnumWindows
|
||||||
|
@ -1834,3 +1846,73 @@ func ResizePseudoConsole(pconsole Handle, size Coord) error {
|
||||||
// accept arguments that can be casted to uintptr, and Coord can't.
|
// accept arguments that can be casted to uintptr, and Coord can't.
|
||||||
return resizePseudoConsole(pconsole, *((*uint32)(unsafe.Pointer(&size))))
|
return resizePseudoConsole(pconsole, *((*uint32)(unsafe.Pointer(&size))))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// DCB constants. See https://learn.microsoft.com/en-us/windows/win32/api/winbase/ns-winbase-dcb.
|
||||||
|
const (
|
||||||
|
CBR_110 = 110
|
||||||
|
CBR_300 = 300
|
||||||
|
CBR_600 = 600
|
||||||
|
CBR_1200 = 1200
|
||||||
|
CBR_2400 = 2400
|
||||||
|
CBR_4800 = 4800
|
||||||
|
CBR_9600 = 9600
|
||||||
|
CBR_14400 = 14400
|
||||||
|
CBR_19200 = 19200
|
||||||
|
CBR_38400 = 38400
|
||||||
|
CBR_57600 = 57600
|
||||||
|
CBR_115200 = 115200
|
||||||
|
CBR_128000 = 128000
|
||||||
|
CBR_256000 = 256000
|
||||||
|
|
||||||
|
DTR_CONTROL_DISABLE = 0x00000000
|
||||||
|
DTR_CONTROL_ENABLE = 0x00000010
|
||||||
|
DTR_CONTROL_HANDSHAKE = 0x00000020
|
||||||
|
|
||||||
|
RTS_CONTROL_DISABLE = 0x00000000
|
||||||
|
RTS_CONTROL_ENABLE = 0x00001000
|
||||||
|
RTS_CONTROL_HANDSHAKE = 0x00002000
|
||||||
|
RTS_CONTROL_TOGGLE = 0x00003000
|
||||||
|
|
||||||
|
NOPARITY = 0
|
||||||
|
ODDPARITY = 1
|
||||||
|
EVENPARITY = 2
|
||||||
|
MARKPARITY = 3
|
||||||
|
SPACEPARITY = 4
|
||||||
|
|
||||||
|
ONESTOPBIT = 0
|
||||||
|
ONE5STOPBITS = 1
|
||||||
|
TWOSTOPBITS = 2
|
||||||
|
)
|
||||||
|
|
||||||
|
// EscapeCommFunction constants. See https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-escapecommfunction.
|
||||||
|
const (
|
||||||
|
SETXOFF = 1
|
||||||
|
SETXON = 2
|
||||||
|
SETRTS = 3
|
||||||
|
CLRRTS = 4
|
||||||
|
SETDTR = 5
|
||||||
|
CLRDTR = 6
|
||||||
|
SETBREAK = 8
|
||||||
|
CLRBREAK = 9
|
||||||
|
)
|
||||||
|
|
||||||
|
// PurgeComm constants. See https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-purgecomm.
|
||||||
|
const (
|
||||||
|
PURGE_TXABORT = 0x0001
|
||||||
|
PURGE_RXABORT = 0x0002
|
||||||
|
PURGE_TXCLEAR = 0x0004
|
||||||
|
PURGE_RXCLEAR = 0x0008
|
||||||
|
)
|
||||||
|
|
||||||
|
// SetCommMask constants. See https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-setcommmask.
|
||||||
|
const (
|
||||||
|
EV_RXCHAR = 0x0001
|
||||||
|
EV_RXFLAG = 0x0002
|
||||||
|
EV_TXEMPTY = 0x0004
|
||||||
|
EV_CTS = 0x0008
|
||||||
|
EV_DSR = 0x0010
|
||||||
|
EV_RLSD = 0x0020
|
||||||
|
EV_BREAK = 0x0040
|
||||||
|
EV_ERR = 0x0080
|
||||||
|
EV_RING = 0x0100
|
||||||
|
)
|
||||||
|
|
24
vendor/golang.org/x/sys/windows/types_windows.go
generated
vendored
24
vendor/golang.org/x/sys/windows/types_windows.go
generated
vendored
|
@ -3380,3 +3380,27 @@ type BLOB struct {
|
||||||
Size uint32
|
Size uint32
|
||||||
BlobData *byte
|
BlobData *byte
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ComStat struct {
|
||||||
|
Flags uint32
|
||||||
|
CBInQue uint32
|
||||||
|
CBOutQue uint32
|
||||||
|
}
|
||||||
|
|
||||||
|
type DCB struct {
|
||||||
|
DCBlength uint32
|
||||||
|
BaudRate uint32
|
||||||
|
Flags uint32
|
||||||
|
wReserved uint16
|
||||||
|
XonLim uint16
|
||||||
|
XoffLim uint16
|
||||||
|
ByteSize uint8
|
||||||
|
Parity uint8
|
||||||
|
StopBits uint8
|
||||||
|
XonChar byte
|
||||||
|
XoffChar byte
|
||||||
|
ErrorChar byte
|
||||||
|
EofChar byte
|
||||||
|
EvtChar byte
|
||||||
|
wReserved1 uint16
|
||||||
|
}
|
||||||
|
|
126
vendor/golang.org/x/sys/windows/zsyscall_windows.go
generated
vendored
126
vendor/golang.org/x/sys/windows/zsyscall_windows.go
generated
vendored
|
@ -188,6 +188,8 @@ var (
|
||||||
procAssignProcessToJobObject = modkernel32.NewProc("AssignProcessToJobObject")
|
procAssignProcessToJobObject = modkernel32.NewProc("AssignProcessToJobObject")
|
||||||
procCancelIo = modkernel32.NewProc("CancelIo")
|
procCancelIo = modkernel32.NewProc("CancelIo")
|
||||||
procCancelIoEx = modkernel32.NewProc("CancelIoEx")
|
procCancelIoEx = modkernel32.NewProc("CancelIoEx")
|
||||||
|
procClearCommBreak = modkernel32.NewProc("ClearCommBreak")
|
||||||
|
procClearCommError = modkernel32.NewProc("ClearCommError")
|
||||||
procCloseHandle = modkernel32.NewProc("CloseHandle")
|
procCloseHandle = modkernel32.NewProc("CloseHandle")
|
||||||
procClosePseudoConsole = modkernel32.NewProc("ClosePseudoConsole")
|
procClosePseudoConsole = modkernel32.NewProc("ClosePseudoConsole")
|
||||||
procConnectNamedPipe = modkernel32.NewProc("ConnectNamedPipe")
|
procConnectNamedPipe = modkernel32.NewProc("ConnectNamedPipe")
|
||||||
|
@ -212,7 +214,9 @@ var (
|
||||||
procDeleteProcThreadAttributeList = modkernel32.NewProc("DeleteProcThreadAttributeList")
|
procDeleteProcThreadAttributeList = modkernel32.NewProc("DeleteProcThreadAttributeList")
|
||||||
procDeleteVolumeMountPointW = modkernel32.NewProc("DeleteVolumeMountPointW")
|
procDeleteVolumeMountPointW = modkernel32.NewProc("DeleteVolumeMountPointW")
|
||||||
procDeviceIoControl = modkernel32.NewProc("DeviceIoControl")
|
procDeviceIoControl = modkernel32.NewProc("DeviceIoControl")
|
||||||
|
procDisconnectNamedPipe = modkernel32.NewProc("DisconnectNamedPipe")
|
||||||
procDuplicateHandle = modkernel32.NewProc("DuplicateHandle")
|
procDuplicateHandle = modkernel32.NewProc("DuplicateHandle")
|
||||||
|
procEscapeCommFunction = modkernel32.NewProc("EscapeCommFunction")
|
||||||
procExitProcess = modkernel32.NewProc("ExitProcess")
|
procExitProcess = modkernel32.NewProc("ExitProcess")
|
||||||
procExpandEnvironmentStringsW = modkernel32.NewProc("ExpandEnvironmentStringsW")
|
procExpandEnvironmentStringsW = modkernel32.NewProc("ExpandEnvironmentStringsW")
|
||||||
procFindClose = modkernel32.NewProc("FindClose")
|
procFindClose = modkernel32.NewProc("FindClose")
|
||||||
|
@ -236,6 +240,8 @@ var (
|
||||||
procGenerateConsoleCtrlEvent = modkernel32.NewProc("GenerateConsoleCtrlEvent")
|
procGenerateConsoleCtrlEvent = modkernel32.NewProc("GenerateConsoleCtrlEvent")
|
||||||
procGetACP = modkernel32.NewProc("GetACP")
|
procGetACP = modkernel32.NewProc("GetACP")
|
||||||
procGetActiveProcessorCount = modkernel32.NewProc("GetActiveProcessorCount")
|
procGetActiveProcessorCount = modkernel32.NewProc("GetActiveProcessorCount")
|
||||||
|
procGetCommModemStatus = modkernel32.NewProc("GetCommModemStatus")
|
||||||
|
procGetCommState = modkernel32.NewProc("GetCommState")
|
||||||
procGetCommTimeouts = modkernel32.NewProc("GetCommTimeouts")
|
procGetCommTimeouts = modkernel32.NewProc("GetCommTimeouts")
|
||||||
procGetCommandLineW = modkernel32.NewProc("GetCommandLineW")
|
procGetCommandLineW = modkernel32.NewProc("GetCommandLineW")
|
||||||
procGetComputerNameExW = modkernel32.NewProc("GetComputerNameExW")
|
procGetComputerNameExW = modkernel32.NewProc("GetComputerNameExW")
|
||||||
|
@ -322,6 +328,7 @@ var (
|
||||||
procProcess32NextW = modkernel32.NewProc("Process32NextW")
|
procProcess32NextW = modkernel32.NewProc("Process32NextW")
|
||||||
procProcessIdToSessionId = modkernel32.NewProc("ProcessIdToSessionId")
|
procProcessIdToSessionId = modkernel32.NewProc("ProcessIdToSessionId")
|
||||||
procPulseEvent = modkernel32.NewProc("PulseEvent")
|
procPulseEvent = modkernel32.NewProc("PulseEvent")
|
||||||
|
procPurgeComm = modkernel32.NewProc("PurgeComm")
|
||||||
procQueryDosDeviceW = modkernel32.NewProc("QueryDosDeviceW")
|
procQueryDosDeviceW = modkernel32.NewProc("QueryDosDeviceW")
|
||||||
procQueryFullProcessImageNameW = modkernel32.NewProc("QueryFullProcessImageNameW")
|
procQueryFullProcessImageNameW = modkernel32.NewProc("QueryFullProcessImageNameW")
|
||||||
procQueryInformationJobObject = modkernel32.NewProc("QueryInformationJobObject")
|
procQueryInformationJobObject = modkernel32.NewProc("QueryInformationJobObject")
|
||||||
|
@ -335,6 +342,9 @@ var (
|
||||||
procResetEvent = modkernel32.NewProc("ResetEvent")
|
procResetEvent = modkernel32.NewProc("ResetEvent")
|
||||||
procResizePseudoConsole = modkernel32.NewProc("ResizePseudoConsole")
|
procResizePseudoConsole = modkernel32.NewProc("ResizePseudoConsole")
|
||||||
procResumeThread = modkernel32.NewProc("ResumeThread")
|
procResumeThread = modkernel32.NewProc("ResumeThread")
|
||||||
|
procSetCommBreak = modkernel32.NewProc("SetCommBreak")
|
||||||
|
procSetCommMask = modkernel32.NewProc("SetCommMask")
|
||||||
|
procSetCommState = modkernel32.NewProc("SetCommState")
|
||||||
procSetCommTimeouts = modkernel32.NewProc("SetCommTimeouts")
|
procSetCommTimeouts = modkernel32.NewProc("SetCommTimeouts")
|
||||||
procSetConsoleCursorPosition = modkernel32.NewProc("SetConsoleCursorPosition")
|
procSetConsoleCursorPosition = modkernel32.NewProc("SetConsoleCursorPosition")
|
||||||
procSetConsoleMode = modkernel32.NewProc("SetConsoleMode")
|
procSetConsoleMode = modkernel32.NewProc("SetConsoleMode")
|
||||||
|
@ -342,7 +352,6 @@ var (
|
||||||
procSetDefaultDllDirectories = modkernel32.NewProc("SetDefaultDllDirectories")
|
procSetDefaultDllDirectories = modkernel32.NewProc("SetDefaultDllDirectories")
|
||||||
procSetDllDirectoryW = modkernel32.NewProc("SetDllDirectoryW")
|
procSetDllDirectoryW = modkernel32.NewProc("SetDllDirectoryW")
|
||||||
procSetEndOfFile = modkernel32.NewProc("SetEndOfFile")
|
procSetEndOfFile = modkernel32.NewProc("SetEndOfFile")
|
||||||
procSetFileValidData = modkernel32.NewProc("SetFileValidData")
|
|
||||||
procSetEnvironmentVariableW = modkernel32.NewProc("SetEnvironmentVariableW")
|
procSetEnvironmentVariableW = modkernel32.NewProc("SetEnvironmentVariableW")
|
||||||
procSetErrorMode = modkernel32.NewProc("SetErrorMode")
|
procSetErrorMode = modkernel32.NewProc("SetErrorMode")
|
||||||
procSetEvent = modkernel32.NewProc("SetEvent")
|
procSetEvent = modkernel32.NewProc("SetEvent")
|
||||||
|
@ -351,6 +360,7 @@ var (
|
||||||
procSetFileInformationByHandle = modkernel32.NewProc("SetFileInformationByHandle")
|
procSetFileInformationByHandle = modkernel32.NewProc("SetFileInformationByHandle")
|
||||||
procSetFilePointer = modkernel32.NewProc("SetFilePointer")
|
procSetFilePointer = modkernel32.NewProc("SetFilePointer")
|
||||||
procSetFileTime = modkernel32.NewProc("SetFileTime")
|
procSetFileTime = modkernel32.NewProc("SetFileTime")
|
||||||
|
procSetFileValidData = modkernel32.NewProc("SetFileValidData")
|
||||||
procSetHandleInformation = modkernel32.NewProc("SetHandleInformation")
|
procSetHandleInformation = modkernel32.NewProc("SetHandleInformation")
|
||||||
procSetInformationJobObject = modkernel32.NewProc("SetInformationJobObject")
|
procSetInformationJobObject = modkernel32.NewProc("SetInformationJobObject")
|
||||||
procSetNamedPipeHandleState = modkernel32.NewProc("SetNamedPipeHandleState")
|
procSetNamedPipeHandleState = modkernel32.NewProc("SetNamedPipeHandleState")
|
||||||
|
@ -361,6 +371,7 @@ var (
|
||||||
procSetStdHandle = modkernel32.NewProc("SetStdHandle")
|
procSetStdHandle = modkernel32.NewProc("SetStdHandle")
|
||||||
procSetVolumeLabelW = modkernel32.NewProc("SetVolumeLabelW")
|
procSetVolumeLabelW = modkernel32.NewProc("SetVolumeLabelW")
|
||||||
procSetVolumeMountPointW = modkernel32.NewProc("SetVolumeMountPointW")
|
procSetVolumeMountPointW = modkernel32.NewProc("SetVolumeMountPointW")
|
||||||
|
procSetupComm = modkernel32.NewProc("SetupComm")
|
||||||
procSizeofResource = modkernel32.NewProc("SizeofResource")
|
procSizeofResource = modkernel32.NewProc("SizeofResource")
|
||||||
procSleepEx = modkernel32.NewProc("SleepEx")
|
procSleepEx = modkernel32.NewProc("SleepEx")
|
||||||
procTerminateJobObject = modkernel32.NewProc("TerminateJobObject")
|
procTerminateJobObject = modkernel32.NewProc("TerminateJobObject")
|
||||||
|
@ -379,6 +390,7 @@ var (
|
||||||
procVirtualQueryEx = modkernel32.NewProc("VirtualQueryEx")
|
procVirtualQueryEx = modkernel32.NewProc("VirtualQueryEx")
|
||||||
procVirtualUnlock = modkernel32.NewProc("VirtualUnlock")
|
procVirtualUnlock = modkernel32.NewProc("VirtualUnlock")
|
||||||
procWTSGetActiveConsoleSessionId = modkernel32.NewProc("WTSGetActiveConsoleSessionId")
|
procWTSGetActiveConsoleSessionId = modkernel32.NewProc("WTSGetActiveConsoleSessionId")
|
||||||
|
procWaitCommEvent = modkernel32.NewProc("WaitCommEvent")
|
||||||
procWaitForMultipleObjects = modkernel32.NewProc("WaitForMultipleObjects")
|
procWaitForMultipleObjects = modkernel32.NewProc("WaitForMultipleObjects")
|
||||||
procWaitForSingleObject = modkernel32.NewProc("WaitForSingleObject")
|
procWaitForSingleObject = modkernel32.NewProc("WaitForSingleObject")
|
||||||
procWriteConsoleW = modkernel32.NewProc("WriteConsoleW")
|
procWriteConsoleW = modkernel32.NewProc("WriteConsoleW")
|
||||||
|
@ -1641,6 +1653,22 @@ func CancelIoEx(s Handle, o *Overlapped) (err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ClearCommBreak(handle Handle) (err error) {
|
||||||
|
r1, _, e1 := syscall.Syscall(procClearCommBreak.Addr(), 1, uintptr(handle), 0, 0)
|
||||||
|
if r1 == 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func ClearCommError(handle Handle, lpErrors *uint32, lpStat *ComStat) (err error) {
|
||||||
|
r1, _, e1 := syscall.Syscall(procClearCommError.Addr(), 3, uintptr(handle), uintptr(unsafe.Pointer(lpErrors)), uintptr(unsafe.Pointer(lpStat)))
|
||||||
|
if r1 == 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func CloseHandle(handle Handle) (err error) {
|
func CloseHandle(handle Handle) (err error) {
|
||||||
r1, _, e1 := syscall.Syscall(procCloseHandle.Addr(), 1, uintptr(handle), 0, 0)
|
r1, _, e1 := syscall.Syscall(procCloseHandle.Addr(), 1, uintptr(handle), 0, 0)
|
||||||
if r1 == 0 {
|
if r1 == 0 {
|
||||||
|
@ -1845,6 +1873,14 @@ func DeviceIoControl(handle Handle, ioControlCode uint32, inBuffer *byte, inBuff
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func DisconnectNamedPipe(pipe Handle) (err error) {
|
||||||
|
r1, _, e1 := syscall.Syscall(procDisconnectNamedPipe.Addr(), 1, uintptr(pipe), 0, 0)
|
||||||
|
if r1 == 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func DuplicateHandle(hSourceProcessHandle Handle, hSourceHandle Handle, hTargetProcessHandle Handle, lpTargetHandle *Handle, dwDesiredAccess uint32, bInheritHandle bool, dwOptions uint32) (err error) {
|
func DuplicateHandle(hSourceProcessHandle Handle, hSourceHandle Handle, hTargetProcessHandle Handle, lpTargetHandle *Handle, dwDesiredAccess uint32, bInheritHandle bool, dwOptions uint32) (err error) {
|
||||||
var _p0 uint32
|
var _p0 uint32
|
||||||
if bInheritHandle {
|
if bInheritHandle {
|
||||||
|
@ -1857,6 +1893,14 @@ func DuplicateHandle(hSourceProcessHandle Handle, hSourceHandle Handle, hTargetP
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func EscapeCommFunction(handle Handle, dwFunc uint32) (err error) {
|
||||||
|
r1, _, e1 := syscall.Syscall(procEscapeCommFunction.Addr(), 2, uintptr(handle), uintptr(dwFunc), 0)
|
||||||
|
if r1 == 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func ExitProcess(exitcode uint32) {
|
func ExitProcess(exitcode uint32) {
|
||||||
syscall.Syscall(procExitProcess.Addr(), 1, uintptr(exitcode), 0, 0)
|
syscall.Syscall(procExitProcess.Addr(), 1, uintptr(exitcode), 0, 0)
|
||||||
return
|
return
|
||||||
|
@ -2058,6 +2102,22 @@ func GetActiveProcessorCount(groupNumber uint16) (ret uint32) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetCommModemStatus(handle Handle, lpModemStat *uint32) (err error) {
|
||||||
|
r1, _, e1 := syscall.Syscall(procGetCommModemStatus.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(lpModemStat)), 0)
|
||||||
|
if r1 == 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func GetCommState(handle Handle, lpDCB *DCB) (err error) {
|
||||||
|
r1, _, e1 := syscall.Syscall(procGetCommState.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(lpDCB)), 0)
|
||||||
|
if r1 == 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func GetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error) {
|
func GetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error) {
|
||||||
r1, _, e1 := syscall.Syscall(procGetCommTimeouts.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(timeouts)), 0)
|
r1, _, e1 := syscall.Syscall(procGetCommTimeouts.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(timeouts)), 0)
|
||||||
if r1 == 0 {
|
if r1 == 0 {
|
||||||
|
@ -2810,6 +2870,14 @@ func PulseEvent(event Handle) (err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func PurgeComm(handle Handle, dwFlags uint32) (err error) {
|
||||||
|
r1, _, e1 := syscall.Syscall(procPurgeComm.Addr(), 2, uintptr(handle), uintptr(dwFlags), 0)
|
||||||
|
if r1 == 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func QueryDosDevice(deviceName *uint16, targetPath *uint16, max uint32) (n uint32, err error) {
|
func QueryDosDevice(deviceName *uint16, targetPath *uint16, max uint32) (n uint32, err error) {
|
||||||
r0, _, e1 := syscall.Syscall(procQueryDosDeviceW.Addr(), 3, uintptr(unsafe.Pointer(deviceName)), uintptr(unsafe.Pointer(targetPath)), uintptr(max))
|
r0, _, e1 := syscall.Syscall(procQueryDosDeviceW.Addr(), 3, uintptr(unsafe.Pointer(deviceName)), uintptr(unsafe.Pointer(targetPath)), uintptr(max))
|
||||||
n = uint32(r0)
|
n = uint32(r0)
|
||||||
|
@ -2924,6 +2992,30 @@ func ResumeThread(thread Handle) (ret uint32, err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func SetCommBreak(handle Handle) (err error) {
|
||||||
|
r1, _, e1 := syscall.Syscall(procSetCommBreak.Addr(), 1, uintptr(handle), 0, 0)
|
||||||
|
if r1 == 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func SetCommMask(handle Handle, dwEvtMask uint32) (err error) {
|
||||||
|
r1, _, e1 := syscall.Syscall(procSetCommMask.Addr(), 2, uintptr(handle), uintptr(dwEvtMask), 0)
|
||||||
|
if r1 == 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func SetCommState(handle Handle, lpDCB *DCB) (err error) {
|
||||||
|
r1, _, e1 := syscall.Syscall(procSetCommState.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(lpDCB)), 0)
|
||||||
|
if r1 == 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func SetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error) {
|
func SetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error) {
|
||||||
r1, _, e1 := syscall.Syscall(procSetCommTimeouts.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(timeouts)), 0)
|
r1, _, e1 := syscall.Syscall(procSetCommTimeouts.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(timeouts)), 0)
|
||||||
if r1 == 0 {
|
if r1 == 0 {
|
||||||
|
@ -2989,14 +3081,6 @@ func SetEndOfFile(handle Handle) (err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func SetFileValidData(handle Handle, validDataLength int64) (err error) {
|
|
||||||
r1, _, e1 := syscall.Syscall(procSetFileValidData.Addr(), 2, uintptr(handle), uintptr(validDataLength), 0)
|
|
||||||
if r1 == 0 {
|
|
||||||
err = errnoErr(e1)
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func SetEnvironmentVariable(name *uint16, value *uint16) (err error) {
|
func SetEnvironmentVariable(name *uint16, value *uint16) (err error) {
|
||||||
r1, _, e1 := syscall.Syscall(procSetEnvironmentVariableW.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(value)), 0)
|
r1, _, e1 := syscall.Syscall(procSetEnvironmentVariableW.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(value)), 0)
|
||||||
if r1 == 0 {
|
if r1 == 0 {
|
||||||
|
@ -3060,6 +3144,14 @@ func SetFileTime(handle Handle, ctime *Filetime, atime *Filetime, wtime *Filetim
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func SetFileValidData(handle Handle, validDataLength int64) (err error) {
|
||||||
|
r1, _, e1 := syscall.Syscall(procSetFileValidData.Addr(), 2, uintptr(handle), uintptr(validDataLength), 0)
|
||||||
|
if r1 == 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func SetHandleInformation(handle Handle, mask uint32, flags uint32) (err error) {
|
func SetHandleInformation(handle Handle, mask uint32, flags uint32) (err error) {
|
||||||
r1, _, e1 := syscall.Syscall(procSetHandleInformation.Addr(), 3, uintptr(handle), uintptr(mask), uintptr(flags))
|
r1, _, e1 := syscall.Syscall(procSetHandleInformation.Addr(), 3, uintptr(handle), uintptr(mask), uintptr(flags))
|
||||||
if r1 == 0 {
|
if r1 == 0 {
|
||||||
|
@ -3145,6 +3237,14 @@ func SetVolumeMountPoint(volumeMountPoint *uint16, volumeName *uint16) (err erro
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func SetupComm(handle Handle, dwInQueue uint32, dwOutQueue uint32) (err error) {
|
||||||
|
r1, _, e1 := syscall.Syscall(procSetupComm.Addr(), 3, uintptr(handle), uintptr(dwInQueue), uintptr(dwOutQueue))
|
||||||
|
if r1 == 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func SizeofResource(module Handle, resInfo Handle) (size uint32, err error) {
|
func SizeofResource(module Handle, resInfo Handle) (size uint32, err error) {
|
||||||
r0, _, e1 := syscall.Syscall(procSizeofResource.Addr(), 2, uintptr(module), uintptr(resInfo), 0)
|
r0, _, e1 := syscall.Syscall(procSizeofResource.Addr(), 2, uintptr(module), uintptr(resInfo), 0)
|
||||||
size = uint32(r0)
|
size = uint32(r0)
|
||||||
|
@ -3291,6 +3391,14 @@ func WTSGetActiveConsoleSessionId() (sessionID uint32) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func WaitCommEvent(handle Handle, lpEvtMask *uint32, lpOverlapped *Overlapped) (err error) {
|
||||||
|
r1, _, e1 := syscall.Syscall(procWaitCommEvent.Addr(), 3, uintptr(handle), uintptr(unsafe.Pointer(lpEvtMask)), uintptr(unsafe.Pointer(lpOverlapped)))
|
||||||
|
if r1 == 0 {
|
||||||
|
err = errnoErr(e1)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func waitForMultipleObjects(count uint32, handles uintptr, waitAll bool, waitMilliseconds uint32) (event uint32, err error) {
|
func waitForMultipleObjects(count uint32, handles uintptr, waitAll bool, waitMilliseconds uint32) (event uint32, err error) {
|
||||||
var _p0 uint32
|
var _p0 uint32
|
||||||
if waitAll {
|
if waitAll {
|
||||||
|
|
123
vendor/golang.org/x/tools/go/packages/packages.go
generated
vendored
123
vendor/golang.org/x/tools/go/packages/packages.go
generated
vendored
|
@ -9,6 +9,7 @@ package packages
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"go/ast"
|
"go/ast"
|
||||||
"go/parser"
|
"go/parser"
|
||||||
|
@ -24,6 +25,8 @@ import (
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"golang.org/x/sync/errgroup"
|
||||||
|
|
||||||
"golang.org/x/tools/go/gcexportdata"
|
"golang.org/x/tools/go/gcexportdata"
|
||||||
"golang.org/x/tools/internal/gocommand"
|
"golang.org/x/tools/internal/gocommand"
|
||||||
"golang.org/x/tools/internal/packagesinternal"
|
"golang.org/x/tools/internal/packagesinternal"
|
||||||
|
@ -255,8 +258,27 @@ func Load(cfg *Config, patterns ...string) ([]*Package, error) {
|
||||||
// defaultDriver will fall back to the go list driver.
|
// defaultDriver will fall back to the go list driver.
|
||||||
// The boolean result indicates that an external driver handled the request.
|
// The boolean result indicates that an external driver handled the request.
|
||||||
func defaultDriver(cfg *Config, patterns ...string) (*DriverResponse, bool, error) {
|
func defaultDriver(cfg *Config, patterns ...string) (*DriverResponse, bool, error) {
|
||||||
|
const (
|
||||||
|
// windowsArgMax specifies the maximum command line length for
|
||||||
|
// the Windows' CreateProcess function.
|
||||||
|
windowsArgMax = 32767
|
||||||
|
// maxEnvSize is a very rough estimation of the maximum environment
|
||||||
|
// size of a user.
|
||||||
|
maxEnvSize = 16384
|
||||||
|
// safeArgMax specifies the maximum safe command line length to use
|
||||||
|
// by the underlying driver excl. the environment. We choose the Windows'
|
||||||
|
// ARG_MAX as the starting point because it's one of the lowest ARG_MAX
|
||||||
|
// constants out of the different supported platforms,
|
||||||
|
// e.g., https://www.in-ulm.de/~mascheck/various/argmax/#results.
|
||||||
|
safeArgMax = windowsArgMax - maxEnvSize
|
||||||
|
)
|
||||||
|
chunks, err := splitIntoChunks(patterns, safeArgMax)
|
||||||
|
if err != nil {
|
||||||
|
return nil, false, err
|
||||||
|
}
|
||||||
|
|
||||||
if driver := findExternalDriver(cfg); driver != nil {
|
if driver := findExternalDriver(cfg); driver != nil {
|
||||||
response, err := driver(cfg, patterns...)
|
response, err := callDriverOnChunks(driver, cfg, chunks)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, false, err
|
return nil, false, err
|
||||||
} else if !response.NotHandled {
|
} else if !response.NotHandled {
|
||||||
|
@ -265,11 +287,82 @@ func defaultDriver(cfg *Config, patterns ...string) (*DriverResponse, bool, erro
|
||||||
// (fall through)
|
// (fall through)
|
||||||
}
|
}
|
||||||
|
|
||||||
response, err := goListDriver(cfg, patterns...)
|
response, err := callDriverOnChunks(goListDriver, cfg, chunks)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, false, err
|
return nil, false, err
|
||||||
}
|
}
|
||||||
return response, false, nil
|
return response, false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// splitIntoChunks chunks the slice so that the total number of characters
|
||||||
|
// in a chunk is no longer than argMax.
|
||||||
|
func splitIntoChunks(patterns []string, argMax int) ([][]string, error) {
|
||||||
|
if argMax <= 0 {
|
||||||
|
return nil, errors.New("failed to split patterns into chunks, negative safe argMax value")
|
||||||
|
}
|
||||||
|
var chunks [][]string
|
||||||
|
charsInChunk := 0
|
||||||
|
nextChunkStart := 0
|
||||||
|
for i, v := range patterns {
|
||||||
|
vChars := len(v)
|
||||||
|
if vChars > argMax {
|
||||||
|
// a single pattern is longer than the maximum safe ARG_MAX, hardly should happen
|
||||||
|
return nil, errors.New("failed to split patterns into chunks, a pattern is too long")
|
||||||
|
}
|
||||||
|
charsInChunk += vChars + 1 // +1 is for a whitespace between patterns that has to be counted too
|
||||||
|
if charsInChunk > argMax {
|
||||||
|
chunks = append(chunks, patterns[nextChunkStart:i])
|
||||||
|
nextChunkStart = i
|
||||||
|
charsInChunk = vChars
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// add the last chunk
|
||||||
|
if nextChunkStart < len(patterns) {
|
||||||
|
chunks = append(chunks, patterns[nextChunkStart:])
|
||||||
|
}
|
||||||
|
return chunks, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func callDriverOnChunks(driver driver, cfg *Config, chunks [][]string) (*DriverResponse, error) {
|
||||||
|
if len(chunks) == 0 {
|
||||||
|
return driver(cfg)
|
||||||
|
}
|
||||||
|
responses := make([]*DriverResponse, len(chunks))
|
||||||
|
errNotHandled := errors.New("driver returned NotHandled")
|
||||||
|
var g errgroup.Group
|
||||||
|
for i, chunk := range chunks {
|
||||||
|
i := i
|
||||||
|
chunk := chunk
|
||||||
|
g.Go(func() (err error) {
|
||||||
|
responses[i], err = driver(cfg, chunk...)
|
||||||
|
if responses[i] != nil && responses[i].NotHandled {
|
||||||
|
err = errNotHandled
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
})
|
||||||
|
}
|
||||||
|
if err := g.Wait(); err != nil {
|
||||||
|
if errors.Is(err, errNotHandled) {
|
||||||
|
return &DriverResponse{NotHandled: true}, nil
|
||||||
|
}
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return mergeResponses(responses...), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func mergeResponses(responses ...*DriverResponse) *DriverResponse {
|
||||||
|
if len(responses) == 0 {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
response := newDeduper()
|
||||||
|
response.dr.NotHandled = false
|
||||||
|
response.dr.Compiler = responses[0].Compiler
|
||||||
|
response.dr.Arch = responses[0].Arch
|
||||||
|
response.dr.GoVersion = responses[0].GoVersion
|
||||||
|
for _, v := range responses {
|
||||||
|
response.addAll(v)
|
||||||
|
}
|
||||||
|
return response.dr
|
||||||
}
|
}
|
||||||
|
|
||||||
// A Package describes a loaded Go package.
|
// A Package describes a loaded Go package.
|
||||||
|
@ -1025,7 +1118,7 @@ func (ld *loader) loadPackage(lpkg *loaderPackage) {
|
||||||
Sizes: ld.sizes, // may be nil
|
Sizes: ld.sizes, // may be nil
|
||||||
}
|
}
|
||||||
if lpkg.Module != nil && lpkg.Module.GoVersion != "" {
|
if lpkg.Module != nil && lpkg.Module.GoVersion != "" {
|
||||||
typesinternal.SetGoVersion(tc, "go"+lpkg.Module.GoVersion)
|
tc.GoVersion = "go" + lpkg.Module.GoVersion
|
||||||
}
|
}
|
||||||
if (ld.Mode & typecheckCgo) != 0 {
|
if (ld.Mode & typecheckCgo) != 0 {
|
||||||
if !typesinternal.SetUsesCgo(tc) {
|
if !typesinternal.SetUsesCgo(tc) {
|
||||||
|
@ -1036,10 +1129,24 @@ func (ld *loader) loadPackage(lpkg *loaderPackage) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
types.NewChecker(tc, ld.Fset, lpkg.Types, lpkg.TypesInfo).Files(lpkg.Syntax)
|
|
||||||
|
|
||||||
|
typErr := types.NewChecker(tc, ld.Fset, lpkg.Types, lpkg.TypesInfo).Files(lpkg.Syntax)
|
||||||
lpkg.importErrors = nil // no longer needed
|
lpkg.importErrors = nil // no longer needed
|
||||||
|
|
||||||
|
// In go/types go1.21 and go1.22, Checker.Files failed fast with a
|
||||||
|
// a "too new" error, without calling tc.Error and without
|
||||||
|
// proceeding to type-check the package (#66525).
|
||||||
|
// We rely on the runtimeVersion error to give the suggested remedy.
|
||||||
|
if typErr != nil && len(lpkg.Errors) == 0 && len(lpkg.Syntax) > 0 {
|
||||||
|
if msg := typErr.Error(); strings.HasPrefix(msg, "package requires newer Go version") {
|
||||||
|
appendError(types.Error{
|
||||||
|
Fset: ld.Fset,
|
||||||
|
Pos: lpkg.Syntax[0].Package,
|
||||||
|
Msg: msg,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// If !Cgo, the type-checker uses FakeImportC mode, so
|
// If !Cgo, the type-checker uses FakeImportC mode, so
|
||||||
// it doesn't invoke the importer for import "C",
|
// it doesn't invoke the importer for import "C",
|
||||||
// nor report an error for the import,
|
// nor report an error for the import,
|
||||||
|
@ -1061,6 +1168,12 @@ func (ld *loader) loadPackage(lpkg *loaderPackage) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If types.Checker.Files had an error that was unreported,
|
||||||
|
// make sure to report the unknown error so the package is illTyped.
|
||||||
|
if typErr != nil && len(lpkg.Errors) == 0 {
|
||||||
|
appendError(typErr)
|
||||||
|
}
|
||||||
|
|
||||||
// Record accumulated errors.
|
// Record accumulated errors.
|
||||||
illTyped := len(lpkg.Errors) > 0
|
illTyped := len(lpkg.Errors) > 0
|
||||||
if !illTyped {
|
if !illTyped {
|
||||||
|
|
3
vendor/golang.org/x/tools/go/types/objectpath/objectpath.go
generated
vendored
3
vendor/golang.org/x/tools/go/types/objectpath/objectpath.go
generated
vendored
|
@ -30,7 +30,6 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"golang.org/x/tools/internal/aliases"
|
"golang.org/x/tools/internal/aliases"
|
||||||
"golang.org/x/tools/internal/typeparams"
|
|
||||||
"golang.org/x/tools/internal/typesinternal"
|
"golang.org/x/tools/internal/typesinternal"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -395,7 +394,7 @@ func (enc *Encoder) concreteMethod(meth *types.Func) (Path, bool) {
|
||||||
// of objectpath will only be giving us origin methods, anyway, as referring
|
// of objectpath will only be giving us origin methods, anyway, as referring
|
||||||
// to instantiated methods is usually not useful.
|
// to instantiated methods is usually not useful.
|
||||||
|
|
||||||
if typeparams.OriginMethod(meth) != meth {
|
if meth.Origin() != meth {
|
||||||
return "", false
|
return "", false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
45
vendor/golang.org/x/tools/internal/gcimporter/iexport.go
generated
vendored
45
vendor/golang.org/x/tools/internal/gcimporter/iexport.go
generated
vendored
|
@ -21,6 +21,7 @@ import (
|
||||||
"sort"
|
"sort"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
"unsafe"
|
||||||
|
|
||||||
"golang.org/x/tools/go/types/objectpath"
|
"golang.org/x/tools/go/types/objectpath"
|
||||||
"golang.org/x/tools/internal/aliases"
|
"golang.org/x/tools/internal/aliases"
|
||||||
|
@ -464,7 +465,7 @@ func (p *iexporter) doDecl(obj types.Object) {
|
||||||
|
|
||||||
switch obj := obj.(type) {
|
switch obj := obj.(type) {
|
||||||
case *types.Var:
|
case *types.Var:
|
||||||
w.tag('V')
|
w.tag(varTag)
|
||||||
w.pos(obj.Pos())
|
w.pos(obj.Pos())
|
||||||
w.typ(obj.Type(), obj.Pkg())
|
w.typ(obj.Type(), obj.Pkg())
|
||||||
|
|
||||||
|
@ -482,9 +483,9 @@ func (p *iexporter) doDecl(obj types.Object) {
|
||||||
|
|
||||||
// Function.
|
// Function.
|
||||||
if sig.TypeParams().Len() == 0 {
|
if sig.TypeParams().Len() == 0 {
|
||||||
w.tag('F')
|
w.tag(funcTag)
|
||||||
} else {
|
} else {
|
||||||
w.tag('G')
|
w.tag(genericFuncTag)
|
||||||
}
|
}
|
||||||
w.pos(obj.Pos())
|
w.pos(obj.Pos())
|
||||||
// The tparam list of the function type is the declaration of the type
|
// The tparam list of the function type is the declaration of the type
|
||||||
|
@ -500,7 +501,7 @@ func (p *iexporter) doDecl(obj types.Object) {
|
||||||
w.signature(sig)
|
w.signature(sig)
|
||||||
|
|
||||||
case *types.Const:
|
case *types.Const:
|
||||||
w.tag('C')
|
w.tag(constTag)
|
||||||
w.pos(obj.Pos())
|
w.pos(obj.Pos())
|
||||||
w.value(obj.Type(), obj.Val())
|
w.value(obj.Type(), obj.Val())
|
||||||
|
|
||||||
|
@ -508,7 +509,7 @@ func (p *iexporter) doDecl(obj types.Object) {
|
||||||
t := obj.Type()
|
t := obj.Type()
|
||||||
|
|
||||||
if tparam, ok := aliases.Unalias(t).(*types.TypeParam); ok {
|
if tparam, ok := aliases.Unalias(t).(*types.TypeParam); ok {
|
||||||
w.tag('P')
|
w.tag(typeParamTag)
|
||||||
w.pos(obj.Pos())
|
w.pos(obj.Pos())
|
||||||
constraint := tparam.Constraint()
|
constraint := tparam.Constraint()
|
||||||
if p.version >= iexportVersionGo1_18 {
|
if p.version >= iexportVersionGo1_18 {
|
||||||
|
@ -523,8 +524,13 @@ func (p *iexporter) doDecl(obj types.Object) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if obj.IsAlias() {
|
if obj.IsAlias() {
|
||||||
w.tag('A')
|
w.tag(aliasTag)
|
||||||
w.pos(obj.Pos())
|
w.pos(obj.Pos())
|
||||||
|
if alias, ok := t.(*aliases.Alias); ok {
|
||||||
|
// Preserve materialized aliases,
|
||||||
|
// even of non-exported types.
|
||||||
|
t = aliasRHS(alias)
|
||||||
|
}
|
||||||
w.typ(t, obj.Pkg())
|
w.typ(t, obj.Pkg())
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
@ -536,9 +542,9 @@ func (p *iexporter) doDecl(obj types.Object) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if named.TypeParams().Len() == 0 {
|
if named.TypeParams().Len() == 0 {
|
||||||
w.tag('T')
|
w.tag(typeTag)
|
||||||
} else {
|
} else {
|
||||||
w.tag('U')
|
w.tag(genericTypeTag)
|
||||||
}
|
}
|
||||||
w.pos(obj.Pos())
|
w.pos(obj.Pos())
|
||||||
|
|
||||||
|
@ -548,7 +554,7 @@ func (p *iexporter) doDecl(obj types.Object) {
|
||||||
w.tparamList(obj.Name(), named.TypeParams(), obj.Pkg())
|
w.tparamList(obj.Name(), named.TypeParams(), obj.Pkg())
|
||||||
}
|
}
|
||||||
|
|
||||||
underlying := obj.Type().Underlying()
|
underlying := named.Underlying()
|
||||||
w.typ(underlying, obj.Pkg())
|
w.typ(underlying, obj.Pkg())
|
||||||
|
|
||||||
if types.IsInterface(t) {
|
if types.IsInterface(t) {
|
||||||
|
@ -739,7 +745,10 @@ func (w *exportWriter) doTyp(t types.Type, pkg *types.Package) {
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
switch t := t.(type) {
|
switch t := t.(type) {
|
||||||
// TODO(adonovan): support types.Alias.
|
case *aliases.Alias:
|
||||||
|
// TODO(adonovan): support parameterized aliases, following *types.Named.
|
||||||
|
w.startType(aliasType)
|
||||||
|
w.qualifiedType(t.Obj())
|
||||||
|
|
||||||
case *types.Named:
|
case *types.Named:
|
||||||
if targs := t.TypeArgs(); targs.Len() > 0 {
|
if targs := t.TypeArgs(); targs.Len() > 0 {
|
||||||
|
@ -1322,3 +1331,19 @@ func (e internalError) Error() string { return "gcimporter: " + string(e) }
|
||||||
func internalErrorf(format string, args ...interface{}) error {
|
func internalErrorf(format string, args ...interface{}) error {
|
||||||
return internalError(fmt.Sprintf(format, args...))
|
return internalError(fmt.Sprintf(format, args...))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// aliasRHS removes exactly one Alias constructor.
|
||||||
|
func aliasRHS(alias *aliases.Alias) types.Type {
|
||||||
|
// TODO(adonovan): if proposal #66559 is accepted, this will
|
||||||
|
// become Alias.RHS(alias). In the meantime, we must punch
|
||||||
|
// through the drywall.
|
||||||
|
type go123Alias struct {
|
||||||
|
_ *types.TypeName
|
||||||
|
_ *types.TypeParamList
|
||||||
|
RHS types.Type
|
||||||
|
_ types.Type
|
||||||
|
}
|
||||||
|
var raw *go123Alias
|
||||||
|
*(**aliases.Alias)(unsafe.Pointer(&raw)) = alias
|
||||||
|
return raw.RHS
|
||||||
|
}
|
||||||
|
|
42
vendor/golang.org/x/tools/internal/gcimporter/iimport.go
generated
vendored
42
vendor/golang.org/x/tools/internal/gcimporter/iimport.go
generated
vendored
|
@ -80,6 +80,20 @@ const (
|
||||||
typeParamType
|
typeParamType
|
||||||
instanceType
|
instanceType
|
||||||
unionType
|
unionType
|
||||||
|
aliasType
|
||||||
|
)
|
||||||
|
|
||||||
|
// Object tags
|
||||||
|
const (
|
||||||
|
varTag = 'V'
|
||||||
|
funcTag = 'F'
|
||||||
|
genericFuncTag = 'G'
|
||||||
|
constTag = 'C'
|
||||||
|
aliasTag = 'A'
|
||||||
|
genericAliasTag = 'B'
|
||||||
|
typeParamTag = 'P'
|
||||||
|
typeTag = 'T'
|
||||||
|
genericTypeTag = 'U'
|
||||||
)
|
)
|
||||||
|
|
||||||
// IImportData imports a package from the serialized package data
|
// IImportData imports a package from the serialized package data
|
||||||
|
@ -324,7 +338,7 @@ func iimportCommon(fset *token.FileSet, getPackages GetPackagesFunc, data []byte
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetConstraint can't be called if the constraint type is not yet complete.
|
// SetConstraint can't be called if the constraint type is not yet complete.
|
||||||
// When type params are created in the 'P' case of (*importReader).obj(),
|
// When type params are created in the typeParamTag case of (*importReader).obj(),
|
||||||
// the associated constraint type may not be complete due to recursion.
|
// the associated constraint type may not be complete due to recursion.
|
||||||
// Therefore, we defer calling SetConstraint there, and call it here instead
|
// Therefore, we defer calling SetConstraint there, and call it here instead
|
||||||
// after all types are complete.
|
// after all types are complete.
|
||||||
|
@ -546,25 +560,29 @@ func (r *importReader) obj(name string) {
|
||||||
pos := r.pos()
|
pos := r.pos()
|
||||||
|
|
||||||
switch tag {
|
switch tag {
|
||||||
case 'A':
|
case aliasTag:
|
||||||
typ := r.typ()
|
typ := r.typ()
|
||||||
|
// TODO(adonovan): support generic aliases:
|
||||||
|
// if tag == genericAliasTag {
|
||||||
|
// tparams := r.tparamList()
|
||||||
|
// alias.SetTypeParams(tparams)
|
||||||
|
// }
|
||||||
|
r.declare(aliases.NewAlias(pos, r.currPkg, name, typ))
|
||||||
|
|
||||||
r.declare(types.NewTypeName(pos, r.currPkg, name, typ))
|
case constTag:
|
||||||
|
|
||||||
case 'C':
|
|
||||||
typ, val := r.value()
|
typ, val := r.value()
|
||||||
|
|
||||||
r.declare(types.NewConst(pos, r.currPkg, name, typ, val))
|
r.declare(types.NewConst(pos, r.currPkg, name, typ, val))
|
||||||
|
|
||||||
case 'F', 'G':
|
case funcTag, genericFuncTag:
|
||||||
var tparams []*types.TypeParam
|
var tparams []*types.TypeParam
|
||||||
if tag == 'G' {
|
if tag == genericFuncTag {
|
||||||
tparams = r.tparamList()
|
tparams = r.tparamList()
|
||||||
}
|
}
|
||||||
sig := r.signature(nil, nil, tparams)
|
sig := r.signature(nil, nil, tparams)
|
||||||
r.declare(types.NewFunc(pos, r.currPkg, name, sig))
|
r.declare(types.NewFunc(pos, r.currPkg, name, sig))
|
||||||
|
|
||||||
case 'T', 'U':
|
case typeTag, genericTypeTag:
|
||||||
// Types can be recursive. We need to setup a stub
|
// Types can be recursive. We need to setup a stub
|
||||||
// declaration before recursing.
|
// declaration before recursing.
|
||||||
obj := types.NewTypeName(pos, r.currPkg, name, nil)
|
obj := types.NewTypeName(pos, r.currPkg, name, nil)
|
||||||
|
@ -572,7 +590,7 @@ func (r *importReader) obj(name string) {
|
||||||
// Declare obj before calling r.tparamList, so the new type name is recognized
|
// Declare obj before calling r.tparamList, so the new type name is recognized
|
||||||
// if used in the constraint of one of its own typeparams (see #48280).
|
// if used in the constraint of one of its own typeparams (see #48280).
|
||||||
r.declare(obj)
|
r.declare(obj)
|
||||||
if tag == 'U' {
|
if tag == genericTypeTag {
|
||||||
tparams := r.tparamList()
|
tparams := r.tparamList()
|
||||||
named.SetTypeParams(tparams)
|
named.SetTypeParams(tparams)
|
||||||
}
|
}
|
||||||
|
@ -604,7 +622,7 @@ func (r *importReader) obj(name string) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
case 'P':
|
case typeParamTag:
|
||||||
// We need to "declare" a typeparam in order to have a name that
|
// We need to "declare" a typeparam in order to have a name that
|
||||||
// can be referenced recursively (if needed) in the type param's
|
// can be referenced recursively (if needed) in the type param's
|
||||||
// bound.
|
// bound.
|
||||||
|
@ -637,7 +655,7 @@ func (r *importReader) obj(name string) {
|
||||||
// completely set up all types in ImportData.
|
// completely set up all types in ImportData.
|
||||||
r.p.later = append(r.p.later, setConstraintArgs{t: t, constraint: constraint})
|
r.p.later = append(r.p.later, setConstraintArgs{t: t, constraint: constraint})
|
||||||
|
|
||||||
case 'V':
|
case varTag:
|
||||||
typ := r.typ()
|
typ := r.typ()
|
||||||
|
|
||||||
r.declare(types.NewVar(pos, r.currPkg, name, typ))
|
r.declare(types.NewVar(pos, r.currPkg, name, typ))
|
||||||
|
@ -854,7 +872,7 @@ func (r *importReader) doType(base *types.Named) (res types.Type) {
|
||||||
errorf("unexpected kind tag in %q: %v", r.p.ipath, k)
|
errorf("unexpected kind tag in %q: %v", r.p.ipath, k)
|
||||||
return nil
|
return nil
|
||||||
|
|
||||||
case definedType:
|
case aliasType, definedType:
|
||||||
pkg, name := r.qualifiedIdent()
|
pkg, name := r.qualifiedIdent()
|
||||||
r.p.doDecl(pkg, name)
|
r.p.doDecl(pkg, name)
|
||||||
return pkg.Scope().Lookup(name).(*types.TypeName).Type()
|
return pkg.Scope().Lookup(name).(*types.TypeName).Type()
|
||||||
|
|
2
vendor/golang.org/x/tools/internal/gcimporter/ureader_yes.go
generated
vendored
2
vendor/golang.org/x/tools/internal/gcimporter/ureader_yes.go
generated
vendored
|
@ -524,7 +524,7 @@ func (pr *pkgReader) objIdx(idx pkgbits.Index) (*types.Package, string) {
|
||||||
case pkgbits.ObjAlias:
|
case pkgbits.ObjAlias:
|
||||||
pos := r.pos()
|
pos := r.pos()
|
||||||
typ := r.typ()
|
typ := r.typ()
|
||||||
declare(types.NewTypeName(pos, objPkg, objName, typ))
|
declare(aliases.NewAlias(pos, objPkg, objName, typ))
|
||||||
|
|
||||||
case pkgbits.ObjConst:
|
case pkgbits.ObjConst:
|
||||||
pos := r.pos()
|
pos := r.pos()
|
||||||
|
|
3
vendor/golang.org/x/tools/internal/gocommand/invoke.go
generated
vendored
3
vendor/golang.org/x/tools/internal/gocommand/invoke.go
generated
vendored
|
@ -158,12 +158,15 @@ type Invocation struct {
|
||||||
BuildFlags []string
|
BuildFlags []string
|
||||||
|
|
||||||
// If ModFlag is set, the go command is invoked with -mod=ModFlag.
|
// If ModFlag is set, the go command is invoked with -mod=ModFlag.
|
||||||
|
// TODO(rfindley): remove, in favor of Args.
|
||||||
ModFlag string
|
ModFlag string
|
||||||
|
|
||||||
// If ModFile is set, the go command is invoked with -modfile=ModFile.
|
// If ModFile is set, the go command is invoked with -modfile=ModFile.
|
||||||
|
// TODO(rfindley): remove, in favor of Args.
|
||||||
ModFile string
|
ModFile string
|
||||||
|
|
||||||
// If Overlay is set, the go command is invoked with -overlay=Overlay.
|
// If Overlay is set, the go command is invoked with -overlay=Overlay.
|
||||||
|
// TODO(rfindley): remove, in favor of Args.
|
||||||
Overlay string
|
Overlay string
|
||||||
|
|
||||||
// If CleanEnv is set, the invocation will run only with the environment
|
// If CleanEnv is set, the invocation will run only with the environment
|
||||||
|
|
17320
vendor/golang.org/x/tools/internal/stdlib/manifest.go
generated
vendored
Normal file
17320
vendor/golang.org/x/tools/internal/stdlib/manifest.go
generated
vendored
Normal file
File diff suppressed because it is too large
Load diff
97
vendor/golang.org/x/tools/internal/stdlib/stdlib.go
generated
vendored
Normal file
97
vendor/golang.org/x/tools/internal/stdlib/stdlib.go
generated
vendored
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
// Copyright 2022 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.
|
||||||
|
|
||||||
|
//go:generate go run generate.go
|
||||||
|
|
||||||
|
// Package stdlib provides a table of all exported symbols in the
|
||||||
|
// standard library, along with the version at which they first
|
||||||
|
// appeared.
|
||||||
|
package stdlib
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Symbol struct {
|
||||||
|
Name string
|
||||||
|
Kind Kind
|
||||||
|
Version Version // Go version that first included the symbol
|
||||||
|
}
|
||||||
|
|
||||||
|
// A Kind indicates the kind of a symbol:
|
||||||
|
// function, variable, constant, type, and so on.
|
||||||
|
type Kind int8
|
||||||
|
|
||||||
|
const (
|
||||||
|
Invalid Kind = iota // Example name:
|
||||||
|
Type // "Buffer"
|
||||||
|
Func // "Println"
|
||||||
|
Var // "EOF"
|
||||||
|
Const // "Pi"
|
||||||
|
Field // "Point.X"
|
||||||
|
Method // "(*Buffer).Grow"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (kind Kind) String() string {
|
||||||
|
return [...]string{
|
||||||
|
Invalid: "invalid",
|
||||||
|
Type: "type",
|
||||||
|
Func: "func",
|
||||||
|
Var: "var",
|
||||||
|
Const: "const",
|
||||||
|
Field: "field",
|
||||||
|
Method: "method",
|
||||||
|
}[kind]
|
||||||
|
}
|
||||||
|
|
||||||
|
// A Version represents a version of Go of the form "go1.%d".
|
||||||
|
type Version int8
|
||||||
|
|
||||||
|
// String returns a version string of the form "go1.23", without allocating.
|
||||||
|
func (v Version) String() string { return versions[v] }
|
||||||
|
|
||||||
|
var versions [30]string // (increase constant as needed)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
for i := range versions {
|
||||||
|
versions[i] = fmt.Sprintf("go1.%d", i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// HasPackage reports whether the specified package path is part of
|
||||||
|
// the standard library's public API.
|
||||||
|
func HasPackage(path string) bool {
|
||||||
|
_, ok := PackageSymbols[path]
|
||||||
|
return ok
|
||||||
|
}
|
||||||
|
|
||||||
|
// SplitField splits the field symbol name into type and field
|
||||||
|
// components. It must be called only on Field symbols.
|
||||||
|
//
|
||||||
|
// Example: "File.Package" -> ("File", "Package")
|
||||||
|
func (sym *Symbol) SplitField() (typename, name string) {
|
||||||
|
if sym.Kind != Field {
|
||||||
|
panic("not a field")
|
||||||
|
}
|
||||||
|
typename, name, _ = strings.Cut(sym.Name, ".")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// SplitMethod splits the method symbol name into pointer, receiver,
|
||||||
|
// and method components. It must be called only on Method symbols.
|
||||||
|
//
|
||||||
|
// Example: "(*Buffer).Grow" -> (true, "Buffer", "Grow")
|
||||||
|
func (sym *Symbol) SplitMethod() (ptr bool, recv, name string) {
|
||||||
|
if sym.Kind != Method {
|
||||||
|
panic("not a method")
|
||||||
|
}
|
||||||
|
recv, name, _ = strings.Cut(sym.Name, ".")
|
||||||
|
recv = recv[len("(") : len(recv)-len(")")]
|
||||||
|
ptr = recv[0] == '*'
|
||||||
|
if ptr {
|
||||||
|
recv = recv[len("*"):]
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
195
vendor/golang.org/x/tools/internal/typeparams/common.go
generated
vendored
195
vendor/golang.org/x/tools/internal/typeparams/common.go
generated
vendored
|
@ -1,195 +0,0 @@
|
||||||
// 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 typeparams contains common utilities for writing tools that
|
|
||||||
// interact with generic Go code, as introduced with Go 1.18. It
|
|
||||||
// supplements the standard library APIs. Notably, the StructuralTerms
|
|
||||||
// API computes a minimal representation of the structural
|
|
||||||
// restrictions on a type parameter.
|
|
||||||
//
|
|
||||||
// An external version of these APIs is available in the
|
|
||||||
// golang.org/x/exp/typeparams module.
|
|
||||||
package typeparams
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"go/ast"
|
|
||||||
"go/token"
|
|
||||||
"go/types"
|
|
||||||
|
|
||||||
"golang.org/x/tools/internal/aliases"
|
|
||||||
"golang.org/x/tools/internal/typesinternal"
|
|
||||||
)
|
|
||||||
|
|
||||||
// UnpackIndexExpr extracts data from AST nodes that represent index
|
|
||||||
// expressions.
|
|
||||||
//
|
|
||||||
// For an ast.IndexExpr, the resulting indices slice will contain exactly one
|
|
||||||
// index expression. For an ast.IndexListExpr (go1.18+), it may have a variable
|
|
||||||
// number of index expressions.
|
|
||||||
//
|
|
||||||
// For nodes that don't represent index expressions, the first return value of
|
|
||||||
// UnpackIndexExpr will be nil.
|
|
||||||
func UnpackIndexExpr(n ast.Node) (x ast.Expr, lbrack token.Pos, indices []ast.Expr, rbrack token.Pos) {
|
|
||||||
switch e := n.(type) {
|
|
||||||
case *ast.IndexExpr:
|
|
||||||
return e.X, e.Lbrack, []ast.Expr{e.Index}, e.Rbrack
|
|
||||||
case *ast.IndexListExpr:
|
|
||||||
return e.X, e.Lbrack, e.Indices, e.Rbrack
|
|
||||||
}
|
|
||||||
return nil, token.NoPos, nil, token.NoPos
|
|
||||||
}
|
|
||||||
|
|
||||||
// PackIndexExpr returns an *ast.IndexExpr or *ast.IndexListExpr, depending on
|
|
||||||
// the cardinality of indices. Calling PackIndexExpr with len(indices) == 0
|
|
||||||
// will panic.
|
|
||||||
func PackIndexExpr(x ast.Expr, lbrack token.Pos, indices []ast.Expr, rbrack token.Pos) ast.Expr {
|
|
||||||
switch len(indices) {
|
|
||||||
case 0:
|
|
||||||
panic("empty indices")
|
|
||||||
case 1:
|
|
||||||
return &ast.IndexExpr{
|
|
||||||
X: x,
|
|
||||||
Lbrack: lbrack,
|
|
||||||
Index: indices[0],
|
|
||||||
Rbrack: rbrack,
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
return &ast.IndexListExpr{
|
|
||||||
X: x,
|
|
||||||
Lbrack: lbrack,
|
|
||||||
Indices: indices,
|
|
||||||
Rbrack: rbrack,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// IsTypeParam reports whether t is a type parameter (or an alias of one).
|
|
||||||
func IsTypeParam(t types.Type) bool {
|
|
||||||
_, ok := aliases.Unalias(t).(*types.TypeParam)
|
|
||||||
return ok
|
|
||||||
}
|
|
||||||
|
|
||||||
// OriginMethod returns the origin method associated with the method fn.
|
|
||||||
// For methods on a non-generic receiver base type, this is just
|
|
||||||
// fn. However, for methods with a generic receiver, OriginMethod returns the
|
|
||||||
// corresponding method in the method set of the origin type.
|
|
||||||
//
|
|
||||||
// As a special case, if fn is not a method (has no receiver), OriginMethod
|
|
||||||
// returns fn.
|
|
||||||
func OriginMethod(fn *types.Func) *types.Func {
|
|
||||||
recv := fn.Type().(*types.Signature).Recv()
|
|
||||||
if recv == nil {
|
|
||||||
return fn
|
|
||||||
}
|
|
||||||
_, named := typesinternal.ReceiverNamed(recv)
|
|
||||||
if named == nil {
|
|
||||||
// Receiver is a *types.Interface.
|
|
||||||
return fn
|
|
||||||
}
|
|
||||||
if named.TypeParams().Len() == 0 {
|
|
||||||
// Receiver base has no type parameters, so we can avoid the lookup below.
|
|
||||||
return fn
|
|
||||||
}
|
|
||||||
orig := named.Origin()
|
|
||||||
gfn, _, _ := types.LookupFieldOrMethod(orig, true, fn.Pkg(), fn.Name())
|
|
||||||
|
|
||||||
// This is a fix for a gopls crash (#60628) due to a go/types bug (#60634). In:
|
|
||||||
// package p
|
|
||||||
// type T *int
|
|
||||||
// func (*T) f() {}
|
|
||||||
// LookupFieldOrMethod(T, true, p, f)=nil, but NewMethodSet(*T)={(*T).f}.
|
|
||||||
// Here we make them consistent by force.
|
|
||||||
// (The go/types bug is general, but this workaround is reached only
|
|
||||||
// for generic T thanks to the early return above.)
|
|
||||||
if gfn == nil {
|
|
||||||
mset := types.NewMethodSet(types.NewPointer(orig))
|
|
||||||
for i := 0; i < mset.Len(); i++ {
|
|
||||||
m := mset.At(i)
|
|
||||||
if m.Obj().Id() == fn.Id() {
|
|
||||||
gfn = m.Obj()
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// In golang/go#61196, we observe another crash, this time inexplicable.
|
|
||||||
if gfn == nil {
|
|
||||||
panic(fmt.Sprintf("missing origin method for %s.%s; named == origin: %t, named.NumMethods(): %d, origin.NumMethods(): %d", named, fn, named == orig, named.NumMethods(), orig.NumMethods()))
|
|
||||||
}
|
|
||||||
|
|
||||||
return gfn.(*types.Func)
|
|
||||||
}
|
|
||||||
|
|
||||||
// GenericAssignableTo is a generalization of types.AssignableTo that
|
|
||||||
// implements the following rule for uninstantiated generic types:
|
|
||||||
//
|
|
||||||
// If V and T are generic named types, then V is considered assignable to T if,
|
|
||||||
// for every possible instantation of V[A_1, ..., A_N], the instantiation
|
|
||||||
// T[A_1, ..., A_N] is valid and V[A_1, ..., A_N] implements T[A_1, ..., A_N].
|
|
||||||
//
|
|
||||||
// If T has structural constraints, they must be satisfied by V.
|
|
||||||
//
|
|
||||||
// For example, consider the following type declarations:
|
|
||||||
//
|
|
||||||
// type Interface[T any] interface {
|
|
||||||
// Accept(T)
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// type Container[T any] struct {
|
|
||||||
// Element T
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// func (c Container[T]) Accept(t T) { c.Element = t }
|
|
||||||
//
|
|
||||||
// In this case, GenericAssignableTo reports that instantiations of Container
|
|
||||||
// are assignable to the corresponding instantiation of Interface.
|
|
||||||
func GenericAssignableTo(ctxt *types.Context, V, T types.Type) bool {
|
|
||||||
V = aliases.Unalias(V)
|
|
||||||
T = aliases.Unalias(T)
|
|
||||||
|
|
||||||
// If V and T are not both named, or do not have matching non-empty type
|
|
||||||
// parameter lists, fall back on types.AssignableTo.
|
|
||||||
|
|
||||||
VN, Vnamed := V.(*types.Named)
|
|
||||||
TN, Tnamed := T.(*types.Named)
|
|
||||||
if !Vnamed || !Tnamed {
|
|
||||||
return types.AssignableTo(V, T)
|
|
||||||
}
|
|
||||||
|
|
||||||
vtparams := VN.TypeParams()
|
|
||||||
ttparams := TN.TypeParams()
|
|
||||||
if vtparams.Len() == 0 || vtparams.Len() != ttparams.Len() || VN.TypeArgs().Len() != 0 || TN.TypeArgs().Len() != 0 {
|
|
||||||
return types.AssignableTo(V, T)
|
|
||||||
}
|
|
||||||
|
|
||||||
// V and T have the same (non-zero) number of type params. Instantiate both
|
|
||||||
// with the type parameters of V. This must always succeed for V, and will
|
|
||||||
// succeed for T if and only if the type set of each type parameter of V is a
|
|
||||||
// subset of the type set of the corresponding type parameter of T, meaning
|
|
||||||
// that every instantiation of V corresponds to a valid instantiation of T.
|
|
||||||
|
|
||||||
// Minor optimization: ensure we share a context across the two
|
|
||||||
// instantiations below.
|
|
||||||
if ctxt == nil {
|
|
||||||
ctxt = types.NewContext()
|
|
||||||
}
|
|
||||||
|
|
||||||
var targs []types.Type
|
|
||||||
for i := 0; i < vtparams.Len(); i++ {
|
|
||||||
targs = append(targs, vtparams.At(i))
|
|
||||||
}
|
|
||||||
|
|
||||||
vinst, err := types.Instantiate(ctxt, V, targs, true)
|
|
||||||
if err != nil {
|
|
||||||
panic("type parameters should satisfy their own constraints")
|
|
||||||
}
|
|
||||||
|
|
||||||
tinst, err := types.Instantiate(ctxt, T, targs, true)
|
|
||||||
if err != nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
return types.AssignableTo(vinst, tinst)
|
|
||||||
}
|
|
137
vendor/golang.org/x/tools/internal/typeparams/coretype.go
generated
vendored
137
vendor/golang.org/x/tools/internal/typeparams/coretype.go
generated
vendored
|
@ -1,137 +0,0 @@
|
||||||
// Copyright 2022 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 typeparams
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"go/types"
|
|
||||||
|
|
||||||
"golang.org/x/tools/internal/aliases"
|
|
||||||
)
|
|
||||||
|
|
||||||
// CoreType returns the core type of T or nil if T does not have a core type.
|
|
||||||
//
|
|
||||||
// See https://go.dev/ref/spec#Core_types for the definition of a core type.
|
|
||||||
func CoreType(T types.Type) types.Type {
|
|
||||||
U := T.Underlying()
|
|
||||||
if _, ok := U.(*types.Interface); !ok {
|
|
||||||
return U // for non-interface types,
|
|
||||||
}
|
|
||||||
|
|
||||||
terms, err := _NormalTerms(U)
|
|
||||||
if len(terms) == 0 || err != nil {
|
|
||||||
// len(terms) -> empty type set of interface.
|
|
||||||
// err != nil => U is invalid, exceeds complexity bounds, or has an empty type set.
|
|
||||||
return nil // no core type.
|
|
||||||
}
|
|
||||||
|
|
||||||
U = terms[0].Type().Underlying()
|
|
||||||
var identical int // i in [0,identical) => Identical(U, terms[i].Type().Underlying())
|
|
||||||
for identical = 1; identical < len(terms); identical++ {
|
|
||||||
if !types.Identical(U, terms[identical].Type().Underlying()) {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if identical == len(terms) {
|
|
||||||
// https://go.dev/ref/spec#Core_types
|
|
||||||
// "There is a single type U which is the underlying type of all types in the type set of T"
|
|
||||||
return U
|
|
||||||
}
|
|
||||||
ch, ok := U.(*types.Chan)
|
|
||||||
if !ok {
|
|
||||||
return nil // no core type as identical < len(terms) and U is not a channel.
|
|
||||||
}
|
|
||||||
// https://go.dev/ref/spec#Core_types
|
|
||||||
// "the type chan E if T contains only bidirectional channels, or the type chan<- E or
|
|
||||||
// <-chan E depending on the direction of the directional channels present."
|
|
||||||
for chans := identical; chans < len(terms); chans++ {
|
|
||||||
curr, ok := terms[chans].Type().Underlying().(*types.Chan)
|
|
||||||
if !ok {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
if !types.Identical(ch.Elem(), curr.Elem()) {
|
|
||||||
return nil // channel elements are not identical.
|
|
||||||
}
|
|
||||||
if ch.Dir() == types.SendRecv {
|
|
||||||
// ch is bidirectional. We can safely always use curr's direction.
|
|
||||||
ch = curr
|
|
||||||
} else if curr.Dir() != types.SendRecv && ch.Dir() != curr.Dir() {
|
|
||||||
// ch and curr are not bidirectional and not the same direction.
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ch
|
|
||||||
}
|
|
||||||
|
|
||||||
// _NormalTerms returns a slice of terms representing the normalized structural
|
|
||||||
// type restrictions of a type, if any.
|
|
||||||
//
|
|
||||||
// For all types other than *types.TypeParam, *types.Interface, and
|
|
||||||
// *types.Union, this is just a single term with Tilde() == false and
|
|
||||||
// Type() == typ. For *types.TypeParam, *types.Interface, and *types.Union, see
|
|
||||||
// below.
|
|
||||||
//
|
|
||||||
// Structural type restrictions of a type parameter are created via
|
|
||||||
// non-interface types embedded in its constraint interface (directly, or via a
|
|
||||||
// chain of interface embeddings). For example, in the declaration type
|
|
||||||
// T[P interface{~int; m()}] int the structural restriction of the type
|
|
||||||
// parameter P is ~int.
|
|
||||||
//
|
|
||||||
// With interface embedding and unions, the specification of structural type
|
|
||||||
// restrictions may be arbitrarily complex. For example, consider the
|
|
||||||
// following:
|
|
||||||
//
|
|
||||||
// type A interface{ ~string|~[]byte }
|
|
||||||
//
|
|
||||||
// type B interface{ int|string }
|
|
||||||
//
|
|
||||||
// type C interface { ~string|~int }
|
|
||||||
//
|
|
||||||
// type T[P interface{ A|B; C }] int
|
|
||||||
//
|
|
||||||
// In this example, the structural type restriction of P is ~string|int: A|B
|
|
||||||
// expands to ~string|~[]byte|int|string, which reduces to ~string|~[]byte|int,
|
|
||||||
// which when intersected with C (~string|~int) yields ~string|int.
|
|
||||||
//
|
|
||||||
// _NormalTerms computes these expansions and reductions, producing a
|
|
||||||
// "normalized" form of the embeddings. A structural restriction is normalized
|
|
||||||
// if it is a single union containing no interface terms, and is minimal in the
|
|
||||||
// sense that removing any term changes the set of types satisfying the
|
|
||||||
// constraint. It is left as a proof for the reader that, modulo sorting, there
|
|
||||||
// is exactly one such normalized form.
|
|
||||||
//
|
|
||||||
// Because the minimal representation always takes this form, _NormalTerms
|
|
||||||
// returns a slice of tilde terms corresponding to the terms of the union in
|
|
||||||
// the normalized structural restriction. An error is returned if the type is
|
|
||||||
// invalid, exceeds complexity bounds, or has an empty type set. In the latter
|
|
||||||
// case, _NormalTerms returns ErrEmptyTypeSet.
|
|
||||||
//
|
|
||||||
// _NormalTerms makes no guarantees about the order of terms, except that it
|
|
||||||
// is deterministic.
|
|
||||||
func _NormalTerms(typ types.Type) ([]*types.Term, error) {
|
|
||||||
switch typ := aliases.Unalias(typ).(type) {
|
|
||||||
case *types.TypeParam:
|
|
||||||
return StructuralTerms(typ)
|
|
||||||
case *types.Union:
|
|
||||||
return UnionTermSet(typ)
|
|
||||||
case *types.Interface:
|
|
||||||
return InterfaceTermSet(typ)
|
|
||||||
default:
|
|
||||||
return []*types.Term{types.NewTerm(false, typ)}, nil
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// MustDeref returns the type of the variable pointed to by t.
|
|
||||||
// It panics if t's core type is not a pointer.
|
|
||||||
//
|
|
||||||
// TODO(adonovan): ideally this would live in typesinternal, but that
|
|
||||||
// creates an import cycle. Move there when we melt this package down.
|
|
||||||
func MustDeref(t types.Type) types.Type {
|
|
||||||
if ptr, ok := CoreType(t).(*types.Pointer); ok {
|
|
||||||
return ptr.Elem()
|
|
||||||
}
|
|
||||||
panic(fmt.Sprintf("%v is not a pointer", t))
|
|
||||||
}
|
|
218
vendor/golang.org/x/tools/internal/typeparams/normalize.go
generated
vendored
218
vendor/golang.org/x/tools/internal/typeparams/normalize.go
generated
vendored
|
@ -1,218 +0,0 @@
|
||||||
// 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 typeparams
|
|
||||||
|
|
||||||
import (
|
|
||||||
"errors"
|
|
||||||
"fmt"
|
|
||||||
"go/types"
|
|
||||||
"os"
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
//go:generate go run copytermlist.go
|
|
||||||
|
|
||||||
const debug = false
|
|
||||||
|
|
||||||
var ErrEmptyTypeSet = errors.New("empty type set")
|
|
||||||
|
|
||||||
// StructuralTerms returns a slice of terms representing the normalized
|
|
||||||
// structural type restrictions of a type parameter, if any.
|
|
||||||
//
|
|
||||||
// Structural type restrictions of a type parameter are created via
|
|
||||||
// non-interface types embedded in its constraint interface (directly, or via a
|
|
||||||
// chain of interface embeddings). For example, in the declaration
|
|
||||||
//
|
|
||||||
// type T[P interface{~int; m()}] int
|
|
||||||
//
|
|
||||||
// the structural restriction of the type parameter P is ~int.
|
|
||||||
//
|
|
||||||
// With interface embedding and unions, the specification of structural type
|
|
||||||
// restrictions may be arbitrarily complex. For example, consider the
|
|
||||||
// following:
|
|
||||||
//
|
|
||||||
// type A interface{ ~string|~[]byte }
|
|
||||||
//
|
|
||||||
// type B interface{ int|string }
|
|
||||||
//
|
|
||||||
// type C interface { ~string|~int }
|
|
||||||
//
|
|
||||||
// type T[P interface{ A|B; C }] int
|
|
||||||
//
|
|
||||||
// In this example, the structural type restriction of P is ~string|int: A|B
|
|
||||||
// expands to ~string|~[]byte|int|string, which reduces to ~string|~[]byte|int,
|
|
||||||
// which when intersected with C (~string|~int) yields ~string|int.
|
|
||||||
//
|
|
||||||
// StructuralTerms computes these expansions and reductions, producing a
|
|
||||||
// "normalized" form of the embeddings. A structural restriction is normalized
|
|
||||||
// if it is a single union containing no interface terms, and is minimal in the
|
|
||||||
// sense that removing any term changes the set of types satisfying the
|
|
||||||
// constraint. It is left as a proof for the reader that, modulo sorting, there
|
|
||||||
// is exactly one such normalized form.
|
|
||||||
//
|
|
||||||
// Because the minimal representation always takes this form, StructuralTerms
|
|
||||||
// returns a slice of tilde terms corresponding to the terms of the union in
|
|
||||||
// the normalized structural restriction. An error is returned if the
|
|
||||||
// constraint interface is invalid, exceeds complexity bounds, or has an empty
|
|
||||||
// type set. In the latter case, StructuralTerms returns ErrEmptyTypeSet.
|
|
||||||
//
|
|
||||||
// StructuralTerms makes no guarantees about the order of terms, except that it
|
|
||||||
// is deterministic.
|
|
||||||
func StructuralTerms(tparam *types.TypeParam) ([]*types.Term, error) {
|
|
||||||
constraint := tparam.Constraint()
|
|
||||||
if constraint == nil {
|
|
||||||
return nil, fmt.Errorf("%s has nil constraint", tparam)
|
|
||||||
}
|
|
||||||
iface, _ := constraint.Underlying().(*types.Interface)
|
|
||||||
if iface == nil {
|
|
||||||
return nil, fmt.Errorf("constraint is %T, not *types.Interface", constraint.Underlying())
|
|
||||||
}
|
|
||||||
return InterfaceTermSet(iface)
|
|
||||||
}
|
|
||||||
|
|
||||||
// InterfaceTermSet computes the normalized terms for a constraint interface,
|
|
||||||
// returning an error if the term set cannot be computed or is empty. In the
|
|
||||||
// latter case, the error will be ErrEmptyTypeSet.
|
|
||||||
//
|
|
||||||
// See the documentation of StructuralTerms for more information on
|
|
||||||
// normalization.
|
|
||||||
func InterfaceTermSet(iface *types.Interface) ([]*types.Term, error) {
|
|
||||||
return computeTermSet(iface)
|
|
||||||
}
|
|
||||||
|
|
||||||
// UnionTermSet computes the normalized terms for a union, returning an error
|
|
||||||
// if the term set cannot be computed or is empty. In the latter case, the
|
|
||||||
// error will be ErrEmptyTypeSet.
|
|
||||||
//
|
|
||||||
// See the documentation of StructuralTerms for more information on
|
|
||||||
// normalization.
|
|
||||||
func UnionTermSet(union *types.Union) ([]*types.Term, error) {
|
|
||||||
return computeTermSet(union)
|
|
||||||
}
|
|
||||||
|
|
||||||
func computeTermSet(typ types.Type) ([]*types.Term, error) {
|
|
||||||
tset, err := computeTermSetInternal(typ, make(map[types.Type]*termSet), 0)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
if tset.terms.isEmpty() {
|
|
||||||
return nil, ErrEmptyTypeSet
|
|
||||||
}
|
|
||||||
if tset.terms.isAll() {
|
|
||||||
return nil, nil
|
|
||||||
}
|
|
||||||
var terms []*types.Term
|
|
||||||
for _, term := range tset.terms {
|
|
||||||
terms = append(terms, types.NewTerm(term.tilde, term.typ))
|
|
||||||
}
|
|
||||||
return terms, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// A termSet holds the normalized set of terms for a given type.
|
|
||||||
//
|
|
||||||
// The name termSet is intentionally distinct from 'type set': a type set is
|
|
||||||
// all types that implement a type (and includes method restrictions), whereas
|
|
||||||
// a term set just represents the structural restrictions on a type.
|
|
||||||
type termSet struct {
|
|
||||||
complete bool
|
|
||||||
terms termlist
|
|
||||||
}
|
|
||||||
|
|
||||||
func indentf(depth int, format string, args ...interface{}) {
|
|
||||||
fmt.Fprintf(os.Stderr, strings.Repeat(".", depth)+format+"\n", args...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func computeTermSetInternal(t types.Type, seen map[types.Type]*termSet, depth int) (res *termSet, err error) {
|
|
||||||
if t == nil {
|
|
||||||
panic("nil type")
|
|
||||||
}
|
|
||||||
|
|
||||||
if debug {
|
|
||||||
indentf(depth, "%s", t.String())
|
|
||||||
defer func() {
|
|
||||||
if err != nil {
|
|
||||||
indentf(depth, "=> %s", err)
|
|
||||||
} else {
|
|
||||||
indentf(depth, "=> %s", res.terms.String())
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
|
|
||||||
const maxTermCount = 100
|
|
||||||
if tset, ok := seen[t]; ok {
|
|
||||||
if !tset.complete {
|
|
||||||
return nil, fmt.Errorf("cycle detected in the declaration of %s", t)
|
|
||||||
}
|
|
||||||
return tset, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Mark the current type as seen to avoid infinite recursion.
|
|
||||||
tset := new(termSet)
|
|
||||||
defer func() {
|
|
||||||
tset.complete = true
|
|
||||||
}()
|
|
||||||
seen[t] = tset
|
|
||||||
|
|
||||||
switch u := t.Underlying().(type) {
|
|
||||||
case *types.Interface:
|
|
||||||
// The term set of an interface is the intersection of the term sets of its
|
|
||||||
// embedded types.
|
|
||||||
tset.terms = allTermlist
|
|
||||||
for i := 0; i < u.NumEmbeddeds(); i++ {
|
|
||||||
embedded := u.EmbeddedType(i)
|
|
||||||
if _, ok := embedded.Underlying().(*types.TypeParam); ok {
|
|
||||||
return nil, fmt.Errorf("invalid embedded type %T", embedded)
|
|
||||||
}
|
|
||||||
tset2, err := computeTermSetInternal(embedded, seen, depth+1)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
tset.terms = tset.terms.intersect(tset2.terms)
|
|
||||||
}
|
|
||||||
case *types.Union:
|
|
||||||
// The term set of a union is the union of term sets of its terms.
|
|
||||||
tset.terms = nil
|
|
||||||
for i := 0; i < u.Len(); i++ {
|
|
||||||
t := u.Term(i)
|
|
||||||
var terms termlist
|
|
||||||
switch t.Type().Underlying().(type) {
|
|
||||||
case *types.Interface:
|
|
||||||
tset2, err := computeTermSetInternal(t.Type(), seen, depth+1)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
terms = tset2.terms
|
|
||||||
case *types.TypeParam, *types.Union:
|
|
||||||
// A stand-alone type parameter or union is not permitted as union
|
|
||||||
// term.
|
|
||||||
return nil, fmt.Errorf("invalid union term %T", t)
|
|
||||||
default:
|
|
||||||
if t.Type() == types.Typ[types.Invalid] {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
terms = termlist{{t.Tilde(), t.Type()}}
|
|
||||||
}
|
|
||||||
tset.terms = tset.terms.union(terms)
|
|
||||||
if len(tset.terms) > maxTermCount {
|
|
||||||
return nil, fmt.Errorf("exceeded max term count %d", maxTermCount)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
case *types.TypeParam:
|
|
||||||
panic("unreachable")
|
|
||||||
default:
|
|
||||||
// For all other types, the term set is just a single non-tilde term
|
|
||||||
// holding the type itself.
|
|
||||||
if u != types.Typ[types.Invalid] {
|
|
||||||
tset.terms = termlist{{false, t}}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return tset, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// under is a facade for the go/types internal function of the same name. It is
|
|
||||||
// used by typeterm.go.
|
|
||||||
func under(t types.Type) types.Type {
|
|
||||||
return t.Underlying()
|
|
||||||
}
|
|
163
vendor/golang.org/x/tools/internal/typeparams/termlist.go
generated
vendored
163
vendor/golang.org/x/tools/internal/typeparams/termlist.go
generated
vendored
|
@ -1,163 +0,0 @@
|
||||||
// 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.
|
|
||||||
|
|
||||||
// Code generated by copytermlist.go DO NOT EDIT.
|
|
||||||
|
|
||||||
package typeparams
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"go/types"
|
|
||||||
)
|
|
||||||
|
|
||||||
// A termlist represents the type set represented by the union
|
|
||||||
// t1 ∪ y2 ∪ ... tn of the type sets of the terms t1 to tn.
|
|
||||||
// A termlist is in normal form if all terms are disjoint.
|
|
||||||
// termlist operations don't require the operands to be in
|
|
||||||
// normal form.
|
|
||||||
type termlist []*term
|
|
||||||
|
|
||||||
// allTermlist represents the set of all types.
|
|
||||||
// It is in normal form.
|
|
||||||
var allTermlist = termlist{new(term)}
|
|
||||||
|
|
||||||
// String prints the termlist exactly (without normalization).
|
|
||||||
func (xl termlist) String() string {
|
|
||||||
if len(xl) == 0 {
|
|
||||||
return "∅"
|
|
||||||
}
|
|
||||||
var buf bytes.Buffer
|
|
||||||
for i, x := range xl {
|
|
||||||
if i > 0 {
|
|
||||||
buf.WriteString(" | ")
|
|
||||||
}
|
|
||||||
buf.WriteString(x.String())
|
|
||||||
}
|
|
||||||
return buf.String()
|
|
||||||
}
|
|
||||||
|
|
||||||
// isEmpty reports whether the termlist xl represents the empty set of types.
|
|
||||||
func (xl termlist) isEmpty() bool {
|
|
||||||
// If there's a non-nil term, the entire list is not empty.
|
|
||||||
// If the termlist is in normal form, this requires at most
|
|
||||||
// one iteration.
|
|
||||||
for _, x := range xl {
|
|
||||||
if x != nil {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// isAll reports whether the termlist xl represents the set of all types.
|
|
||||||
func (xl termlist) isAll() bool {
|
|
||||||
// If there's a 𝓤 term, the entire list is 𝓤.
|
|
||||||
// If the termlist is in normal form, this requires at most
|
|
||||||
// one iteration.
|
|
||||||
for _, x := range xl {
|
|
||||||
if x != nil && x.typ == nil {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// norm returns the normal form of xl.
|
|
||||||
func (xl termlist) norm() termlist {
|
|
||||||
// Quadratic algorithm, but good enough for now.
|
|
||||||
// TODO(gri) fix asymptotic performance
|
|
||||||
used := make([]bool, len(xl))
|
|
||||||
var rl termlist
|
|
||||||
for i, xi := range xl {
|
|
||||||
if xi == nil || used[i] {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
for j := i + 1; j < len(xl); j++ {
|
|
||||||
xj := xl[j]
|
|
||||||
if xj == nil || used[j] {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if u1, u2 := xi.union(xj); u2 == nil {
|
|
||||||
// If we encounter a 𝓤 term, the entire list is 𝓤.
|
|
||||||
// Exit early.
|
|
||||||
// (Note that this is not just an optimization;
|
|
||||||
// if we continue, we may end up with a 𝓤 term
|
|
||||||
// and other terms and the result would not be
|
|
||||||
// in normal form.)
|
|
||||||
if u1.typ == nil {
|
|
||||||
return allTermlist
|
|
||||||
}
|
|
||||||
xi = u1
|
|
||||||
used[j] = true // xj is now unioned into xi - ignore it in future iterations
|
|
||||||
}
|
|
||||||
}
|
|
||||||
rl = append(rl, xi)
|
|
||||||
}
|
|
||||||
return rl
|
|
||||||
}
|
|
||||||
|
|
||||||
// union returns the union xl ∪ yl.
|
|
||||||
func (xl termlist) union(yl termlist) termlist {
|
|
||||||
return append(xl, yl...).norm()
|
|
||||||
}
|
|
||||||
|
|
||||||
// intersect returns the intersection xl ∩ yl.
|
|
||||||
func (xl termlist) intersect(yl termlist) termlist {
|
|
||||||
if xl.isEmpty() || yl.isEmpty() {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Quadratic algorithm, but good enough for now.
|
|
||||||
// TODO(gri) fix asymptotic performance
|
|
||||||
var rl termlist
|
|
||||||
for _, x := range xl {
|
|
||||||
for _, y := range yl {
|
|
||||||
if r := x.intersect(y); r != nil {
|
|
||||||
rl = append(rl, r)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return rl.norm()
|
|
||||||
}
|
|
||||||
|
|
||||||
// equal reports whether xl and yl represent the same type set.
|
|
||||||
func (xl termlist) equal(yl termlist) bool {
|
|
||||||
// TODO(gri) this should be more efficient
|
|
||||||
return xl.subsetOf(yl) && yl.subsetOf(xl)
|
|
||||||
}
|
|
||||||
|
|
||||||
// includes reports whether t ∈ xl.
|
|
||||||
func (xl termlist) includes(t types.Type) bool {
|
|
||||||
for _, x := range xl {
|
|
||||||
if x.includes(t) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// supersetOf reports whether y ⊆ xl.
|
|
||||||
func (xl termlist) supersetOf(y *term) bool {
|
|
||||||
for _, x := range xl {
|
|
||||||
if y.subsetOf(x) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// subsetOf reports whether xl ⊆ yl.
|
|
||||||
func (xl termlist) subsetOf(yl termlist) bool {
|
|
||||||
if yl.isEmpty() {
|
|
||||||
return xl.isEmpty()
|
|
||||||
}
|
|
||||||
|
|
||||||
// each term x of xl must be a subset of yl
|
|
||||||
for _, x := range xl {
|
|
||||||
if !yl.supersetOf(x) {
|
|
||||||
return false // x is not a subset yl
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
169
vendor/golang.org/x/tools/internal/typeparams/typeterm.go
generated
vendored
169
vendor/golang.org/x/tools/internal/typeparams/typeterm.go
generated
vendored
|
@ -1,169 +0,0 @@
|
||||||
// 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.
|
|
||||||
|
|
||||||
// Code generated by copytermlist.go DO NOT EDIT.
|
|
||||||
|
|
||||||
package typeparams
|
|
||||||
|
|
||||||
import "go/types"
|
|
||||||
|
|
||||||
// A term describes elementary type sets:
|
|
||||||
//
|
|
||||||
// ∅: (*term)(nil) == ∅ // set of no types (empty set)
|
|
||||||
// 𝓤: &term{} == 𝓤 // set of all types (𝓤niverse)
|
|
||||||
// T: &term{false, T} == {T} // set of type T
|
|
||||||
// ~t: &term{true, t} == {t' | under(t') == t} // set of types with underlying type t
|
|
||||||
type term struct {
|
|
||||||
tilde bool // valid if typ != nil
|
|
||||||
typ types.Type
|
|
||||||
}
|
|
||||||
|
|
||||||
func (x *term) String() string {
|
|
||||||
switch {
|
|
||||||
case x == nil:
|
|
||||||
return "∅"
|
|
||||||
case x.typ == nil:
|
|
||||||
return "𝓤"
|
|
||||||
case x.tilde:
|
|
||||||
return "~" + x.typ.String()
|
|
||||||
default:
|
|
||||||
return x.typ.String()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// equal reports whether x and y represent the same type set.
|
|
||||||
func (x *term) equal(y *term) bool {
|
|
||||||
// easy cases
|
|
||||||
switch {
|
|
||||||
case x == nil || y == nil:
|
|
||||||
return x == y
|
|
||||||
case x.typ == nil || y.typ == nil:
|
|
||||||
return x.typ == y.typ
|
|
||||||
}
|
|
||||||
// ∅ ⊂ x, y ⊂ 𝓤
|
|
||||||
|
|
||||||
return x.tilde == y.tilde && types.Identical(x.typ, y.typ)
|
|
||||||
}
|
|
||||||
|
|
||||||
// union returns the union x ∪ y: zero, one, or two non-nil terms.
|
|
||||||
func (x *term) union(y *term) (_, _ *term) {
|
|
||||||
// easy cases
|
|
||||||
switch {
|
|
||||||
case x == nil && y == nil:
|
|
||||||
return nil, nil // ∅ ∪ ∅ == ∅
|
|
||||||
case x == nil:
|
|
||||||
return y, nil // ∅ ∪ y == y
|
|
||||||
case y == nil:
|
|
||||||
return x, nil // x ∪ ∅ == x
|
|
||||||
case x.typ == nil:
|
|
||||||
return x, nil // 𝓤 ∪ y == 𝓤
|
|
||||||
case y.typ == nil:
|
|
||||||
return y, nil // x ∪ 𝓤 == 𝓤
|
|
||||||
}
|
|
||||||
// ∅ ⊂ x, y ⊂ 𝓤
|
|
||||||
|
|
||||||
if x.disjoint(y) {
|
|
||||||
return x, y // x ∪ y == (x, y) if x ∩ y == ∅
|
|
||||||
}
|
|
||||||
// x.typ == y.typ
|
|
||||||
|
|
||||||
// ~t ∪ ~t == ~t
|
|
||||||
// ~t ∪ T == ~t
|
|
||||||
// T ∪ ~t == ~t
|
|
||||||
// T ∪ T == T
|
|
||||||
if x.tilde || !y.tilde {
|
|
||||||
return x, nil
|
|
||||||
}
|
|
||||||
return y, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// intersect returns the intersection x ∩ y.
|
|
||||||
func (x *term) intersect(y *term) *term {
|
|
||||||
// easy cases
|
|
||||||
switch {
|
|
||||||
case x == nil || y == nil:
|
|
||||||
return nil // ∅ ∩ y == ∅ and ∩ ∅ == ∅
|
|
||||||
case x.typ == nil:
|
|
||||||
return y // 𝓤 ∩ y == y
|
|
||||||
case y.typ == nil:
|
|
||||||
return x // x ∩ 𝓤 == x
|
|
||||||
}
|
|
||||||
// ∅ ⊂ x, y ⊂ 𝓤
|
|
||||||
|
|
||||||
if x.disjoint(y) {
|
|
||||||
return nil // x ∩ y == ∅ if x ∩ y == ∅
|
|
||||||
}
|
|
||||||
// x.typ == y.typ
|
|
||||||
|
|
||||||
// ~t ∩ ~t == ~t
|
|
||||||
// ~t ∩ T == T
|
|
||||||
// T ∩ ~t == T
|
|
||||||
// T ∩ T == T
|
|
||||||
if !x.tilde || y.tilde {
|
|
||||||
return x
|
|
||||||
}
|
|
||||||
return y
|
|
||||||
}
|
|
||||||
|
|
||||||
// includes reports whether t ∈ x.
|
|
||||||
func (x *term) includes(t types.Type) bool {
|
|
||||||
// easy cases
|
|
||||||
switch {
|
|
||||||
case x == nil:
|
|
||||||
return false // t ∈ ∅ == false
|
|
||||||
case x.typ == nil:
|
|
||||||
return true // t ∈ 𝓤 == true
|
|
||||||
}
|
|
||||||
// ∅ ⊂ x ⊂ 𝓤
|
|
||||||
|
|
||||||
u := t
|
|
||||||
if x.tilde {
|
|
||||||
u = under(u)
|
|
||||||
}
|
|
||||||
return types.Identical(x.typ, u)
|
|
||||||
}
|
|
||||||
|
|
||||||
// subsetOf reports whether x ⊆ y.
|
|
||||||
func (x *term) subsetOf(y *term) bool {
|
|
||||||
// easy cases
|
|
||||||
switch {
|
|
||||||
case x == nil:
|
|
||||||
return true // ∅ ⊆ y == true
|
|
||||||
case y == nil:
|
|
||||||
return false // x ⊆ ∅ == false since x != ∅
|
|
||||||
case y.typ == nil:
|
|
||||||
return true // x ⊆ 𝓤 == true
|
|
||||||
case x.typ == nil:
|
|
||||||
return false // 𝓤 ⊆ y == false since y != 𝓤
|
|
||||||
}
|
|
||||||
// ∅ ⊂ x, y ⊂ 𝓤
|
|
||||||
|
|
||||||
if x.disjoint(y) {
|
|
||||||
return false // x ⊆ y == false if x ∩ y == ∅
|
|
||||||
}
|
|
||||||
// x.typ == y.typ
|
|
||||||
|
|
||||||
// ~t ⊆ ~t == true
|
|
||||||
// ~t ⊆ T == false
|
|
||||||
// T ⊆ ~t == true
|
|
||||||
// T ⊆ T == true
|
|
||||||
return !x.tilde || y.tilde
|
|
||||||
}
|
|
||||||
|
|
||||||
// disjoint reports whether x ∩ y == ∅.
|
|
||||||
// x.typ and y.typ must not be nil.
|
|
||||||
func (x *term) disjoint(y *term) bool {
|
|
||||||
if debug && (x.typ == nil || y.typ == nil) {
|
|
||||||
panic("invalid argument(s)")
|
|
||||||
}
|
|
||||||
ux := x.typ
|
|
||||||
if y.tilde {
|
|
||||||
ux = under(ux)
|
|
||||||
}
|
|
||||||
uy := y.typ
|
|
||||||
if x.tilde {
|
|
||||||
uy = under(uy)
|
|
||||||
}
|
|
||||||
return !types.Identical(ux, uy)
|
|
||||||
}
|
|
2
vendor/golang.org/x/tools/internal/typesinternal/errorcode.go
generated
vendored
2
vendor/golang.org/x/tools/internal/typesinternal/errorcode.go
generated
vendored
|
@ -167,7 +167,7 @@ const (
|
||||||
UntypedNilUse
|
UntypedNilUse
|
||||||
|
|
||||||
// WrongAssignCount occurs when the number of values on the right-hand side
|
// WrongAssignCount occurs when the number of values on the right-hand side
|
||||||
// of an assignment or or initialization expression does not match the number
|
// of an assignment or initialization expression does not match the number
|
||||||
// of variables on the left-hand side.
|
// of variables on the left-hand side.
|
||||||
//
|
//
|
||||||
// Example:
|
// Example:
|
||||||
|
|
89
vendor/golang.org/x/tools/internal/typesinternal/toonew.go
generated
vendored
Normal file
89
vendor/golang.org/x/tools/internal/typesinternal/toonew.go
generated
vendored
Normal file
|
@ -0,0 +1,89 @@
|
||||||
|
// Copyright 2024 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 typesinternal
|
||||||
|
|
||||||
|
import (
|
||||||
|
"go/types"
|
||||||
|
|
||||||
|
"golang.org/x/tools/internal/stdlib"
|
||||||
|
"golang.org/x/tools/internal/versions"
|
||||||
|
)
|
||||||
|
|
||||||
|
// TooNewStdSymbols computes the set of package-level symbols
|
||||||
|
// exported by pkg that are not available at the specified version.
|
||||||
|
// The result maps each symbol to its minimum version.
|
||||||
|
//
|
||||||
|
// The pkg is allowed to contain type errors.
|
||||||
|
func TooNewStdSymbols(pkg *types.Package, version string) map[types.Object]string {
|
||||||
|
disallowed := make(map[types.Object]string)
|
||||||
|
|
||||||
|
// Pass 1: package-level symbols.
|
||||||
|
symbols := stdlib.PackageSymbols[pkg.Path()]
|
||||||
|
for _, sym := range symbols {
|
||||||
|
symver := sym.Version.String()
|
||||||
|
if versions.Before(version, symver) {
|
||||||
|
switch sym.Kind {
|
||||||
|
case stdlib.Func, stdlib.Var, stdlib.Const, stdlib.Type:
|
||||||
|
disallowed[pkg.Scope().Lookup(sym.Name)] = symver
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pass 2: fields and methods.
|
||||||
|
//
|
||||||
|
// We allow fields and methods if their associated type is
|
||||||
|
// disallowed, as otherwise we would report false positives
|
||||||
|
// for compatibility shims. Consider:
|
||||||
|
//
|
||||||
|
// //go:build go1.22
|
||||||
|
// type T struct { F std.Real } // correct new API
|
||||||
|
//
|
||||||
|
// //go:build !go1.22
|
||||||
|
// type T struct { F fake } // shim
|
||||||
|
// type fake struct { ... }
|
||||||
|
// func (fake) M () {}
|
||||||
|
//
|
||||||
|
// These alternative declarations of T use either the std.Real
|
||||||
|
// type, introduced in go1.22, or a fake type, for the field
|
||||||
|
// F. (The fakery could be arbitrarily deep, involving more
|
||||||
|
// nested fields and methods than are shown here.) Clients
|
||||||
|
// that use the compatibility shim T will compile with any
|
||||||
|
// version of go, whether older or newer than go1.22, but only
|
||||||
|
// the newer version will use the std.Real implementation.
|
||||||
|
//
|
||||||
|
// Now consider a reference to method M in new(T).F.M() in a
|
||||||
|
// module that requires a minimum of go1.21. The analysis may
|
||||||
|
// occur using a version of Go higher than 1.21, selecting the
|
||||||
|
// first version of T, so the method M is Real.M. This would
|
||||||
|
// spuriously cause the analyzer to report a reference to a
|
||||||
|
// too-new symbol even though this expression compiles just
|
||||||
|
// fine (with the fake implementation) using go1.21.
|
||||||
|
for _, sym := range symbols {
|
||||||
|
symVersion := sym.Version.String()
|
||||||
|
if !versions.Before(version, symVersion) {
|
||||||
|
continue // allowed
|
||||||
|
}
|
||||||
|
|
||||||
|
var obj types.Object
|
||||||
|
switch sym.Kind {
|
||||||
|
case stdlib.Field:
|
||||||
|
typename, name := sym.SplitField()
|
||||||
|
if t := pkg.Scope().Lookup(typename); t != nil && disallowed[t] == "" {
|
||||||
|
obj, _, _ = types.LookupFieldOrMethod(t.Type(), false, pkg, name)
|
||||||
|
}
|
||||||
|
|
||||||
|
case stdlib.Method:
|
||||||
|
ptr, recvname, name := sym.SplitMethod()
|
||||||
|
if t := pkg.Scope().Lookup(recvname); t != nil && disallowed[t] == "" {
|
||||||
|
obj, _, _ = types.LookupFieldOrMethod(t.Type(), ptr, pkg, name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if obj != nil {
|
||||||
|
disallowed[obj] = symVersion
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return disallowed
|
||||||
|
}
|
2
vendor/golang.org/x/tools/internal/typesinternal/types.go
generated
vendored
2
vendor/golang.org/x/tools/internal/typesinternal/types.go
generated
vendored
|
@ -48,5 +48,3 @@ func ReadGo116ErrorData(err types.Error) (code ErrorCode, start, end token.Pos,
|
||||||
}
|
}
|
||||||
return ErrorCode(data[0]), token.Pos(data[1]), token.Pos(data[2]), true
|
return ErrorCode(data[0]), token.Pos(data[1]), token.Pos(data[2]), true
|
||||||
}
|
}
|
||||||
|
|
||||||
var SetGoVersion = func(conf *types.Config, version string) bool { return false }
|
|
||||||
|
|
16
vendor/golang.org/x/tools/internal/typesinternal/types_118.go
generated
vendored
16
vendor/golang.org/x/tools/internal/typesinternal/types_118.go
generated
vendored
|
@ -1,16 +0,0 @@
|
||||||
// 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 typesinternal
|
|
||||||
|
|
||||||
import (
|
|
||||||
"go/types"
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
SetGoVersion = func(conf *types.Config, version string) bool {
|
|
||||||
conf.GoVersion = version
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
17
vendor/modules.txt
vendored
17
vendor/modules.txt
vendored
|
@ -64,23 +64,23 @@ github.com/russross/blackfriday/v2
|
||||||
# go.etcd.io/bbolt v1.3.9
|
# go.etcd.io/bbolt v1.3.9
|
||||||
## explicit; go 1.17
|
## explicit; go 1.17
|
||||||
go.etcd.io/bbolt
|
go.etcd.io/bbolt
|
||||||
# golang.org/x/crypto v0.21.0
|
# golang.org/x/crypto v0.22.0
|
||||||
## explicit; go 1.18
|
## explicit; go 1.18
|
||||||
golang.org/x/crypto/acme
|
golang.org/x/crypto/acme
|
||||||
golang.org/x/crypto/bcrypt
|
golang.org/x/crypto/bcrypt
|
||||||
golang.org/x/crypto/blake2b
|
golang.org/x/crypto/blake2b
|
||||||
golang.org/x/crypto/blowfish
|
golang.org/x/crypto/blowfish
|
||||||
golang.org/x/crypto/pbkdf2
|
golang.org/x/crypto/pbkdf2
|
||||||
# golang.org/x/exp v0.0.0-20240222234643-814bf88cf225
|
# golang.org/x/exp v0.0.0-20240416160154-fe59bbe5cc7f
|
||||||
## explicit; go 1.20
|
## explicit; go 1.20
|
||||||
golang.org/x/exp/maps
|
golang.org/x/exp/maps
|
||||||
# golang.org/x/mod v0.16.0
|
# golang.org/x/mod v0.17.0
|
||||||
## explicit; go 1.18
|
## explicit; go 1.18
|
||||||
golang.org/x/mod/internal/lazyregexp
|
golang.org/x/mod/internal/lazyregexp
|
||||||
golang.org/x/mod/modfile
|
golang.org/x/mod/modfile
|
||||||
golang.org/x/mod/module
|
golang.org/x/mod/module
|
||||||
golang.org/x/mod/semver
|
golang.org/x/mod/semver
|
||||||
# golang.org/x/net v0.22.0
|
# golang.org/x/net v0.24.0
|
||||||
## explicit; go 1.18
|
## explicit; go 1.18
|
||||||
golang.org/x/net/dns/dnsmessage
|
golang.org/x/net/dns/dnsmessage
|
||||||
golang.org/x/net/html
|
golang.org/x/net/html
|
||||||
|
@ -89,7 +89,10 @@ golang.org/x/net/idna
|
||||||
golang.org/x/net/internal/socks
|
golang.org/x/net/internal/socks
|
||||||
golang.org/x/net/proxy
|
golang.org/x/net/proxy
|
||||||
golang.org/x/net/websocket
|
golang.org/x/net/websocket
|
||||||
# golang.org/x/sys v0.18.0
|
# golang.org/x/sync v0.7.0
|
||||||
|
## explicit; go 1.18
|
||||||
|
golang.org/x/sync/errgroup
|
||||||
|
# golang.org/x/sys v0.19.0
|
||||||
## explicit; go 1.18
|
## explicit; go 1.18
|
||||||
golang.org/x/sys/cpu
|
golang.org/x/sys/cpu
|
||||||
golang.org/x/sys/unix
|
golang.org/x/sys/unix
|
||||||
|
@ -120,7 +123,7 @@ golang.org/x/text/transform
|
||||||
golang.org/x/text/unicode/bidi
|
golang.org/x/text/unicode/bidi
|
||||||
golang.org/x/text/unicode/norm
|
golang.org/x/text/unicode/norm
|
||||||
golang.org/x/text/width
|
golang.org/x/text/width
|
||||||
# golang.org/x/tools v0.19.0
|
# golang.org/x/tools v0.20.0
|
||||||
## explicit; go 1.19
|
## explicit; go 1.19
|
||||||
golang.org/x/tools/go/gcexportdata
|
golang.org/x/tools/go/gcexportdata
|
||||||
golang.org/x/tools/go/internal/packagesdriver
|
golang.org/x/tools/go/internal/packagesdriver
|
||||||
|
@ -136,8 +139,8 @@ golang.org/x/tools/internal/gcimporter
|
||||||
golang.org/x/tools/internal/gocommand
|
golang.org/x/tools/internal/gocommand
|
||||||
golang.org/x/tools/internal/packagesinternal
|
golang.org/x/tools/internal/packagesinternal
|
||||||
golang.org/x/tools/internal/pkgbits
|
golang.org/x/tools/internal/pkgbits
|
||||||
|
golang.org/x/tools/internal/stdlib
|
||||||
golang.org/x/tools/internal/tokeninternal
|
golang.org/x/tools/internal/tokeninternal
|
||||||
golang.org/x/tools/internal/typeparams
|
|
||||||
golang.org/x/tools/internal/typesinternal
|
golang.org/x/tools/internal/typesinternal
|
||||||
golang.org/x/tools/internal/versions
|
golang.org/x/tools/internal/versions
|
||||||
# google.golang.org/protobuf v1.31.0
|
# google.golang.org/protobuf v1.31.0
|
||||||
|
|
Loading…
Reference in a new issue