mirror of
https://github.com/golang/go
synced 2024-11-20 05:44:44 -07:00
cmd/api: bug fix for goapi's lame type checker
This is blocking me submitting the net fd timeout CL, since goapi chokes on my constant. The much more extensive fix to goapi's type checker in pending review in https://golang.org/cl/6742050 But I'd rather get this quick fix in first. R=golang-dev, mikioh.mikioh CC=golang-dev https://golang.org/cl/6818104
This commit is contained in:
parent
48b739caac
commit
a384b5b9c3
@ -331,20 +331,6 @@ const (
|
||||
loaded
|
||||
)
|
||||
|
||||
// hardCodedConstantType is a hack until the type checker is sufficient for our needs.
|
||||
// Rather than litter the code with unnecessary type annotations, we'll hard-code
|
||||
// the cases we can't handle yet.
|
||||
func (w *Walker) hardCodedConstantType(name string) (typ string, ok bool) {
|
||||
switch w.scope[0] {
|
||||
case "pkg syscall":
|
||||
switch name {
|
||||
case "darwinAMD64":
|
||||
return "bool", true
|
||||
}
|
||||
}
|
||||
return "", false
|
||||
}
|
||||
|
||||
func (w *Walker) Features() (fs []string) {
|
||||
for f := range w.features {
|
||||
fs = append(fs, f)
|
||||
@ -596,6 +582,10 @@ func (w *Walker) constValueType(vi interface{}) (string, error) {
|
||||
}
|
||||
return constDepPrefix + v.Name, nil
|
||||
case *ast.BinaryExpr:
|
||||
switch v.Op {
|
||||
case token.EQL, token.LSS, token.GTR, token.NOT, token.NEQ, token.LEQ, token.GEQ:
|
||||
return "bool", nil
|
||||
}
|
||||
left, err := w.constValueType(v.X)
|
||||
if err != nil {
|
||||
return "", err
|
||||
@ -768,15 +758,10 @@ func (w *Walker) walkConst(vs *ast.ValueSpec) {
|
||||
var err error
|
||||
litType, err = w.constValueType(vs.Values[0])
|
||||
if err != nil {
|
||||
if t, ok := w.hardCodedConstantType(ident.Name); ok {
|
||||
litType = t
|
||||
err = nil
|
||||
} else {
|
||||
log.Fatalf("unknown kind in const %q (%T): %v", ident.Name, vs.Values[0], err)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if strings.HasPrefix(litType, constDepPrefix) {
|
||||
dep := litType[len(constDepPrefix):]
|
||||
w.constDep[ident.Name] = dep
|
||||
|
6
src/cmd/api/testdata/src/pkg/p1/p1.go
vendored
6
src/cmd/api/testdata/src/pkg/p1/p1.go
vendored
@ -161,3 +161,9 @@ func (common) OnBothTandBVal() {}
|
||||
type EmbedSelector struct {
|
||||
time.Time
|
||||
}
|
||||
|
||||
const (
|
||||
foo = "foo"
|
||||
foo2 string = "foo2"
|
||||
truth = foo == "foo" || foo2 == "foo2"
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user