Source File
under.go
Belonging Package
go/types
// Code generated by "go test -run=Generate -write=all"; DO NOT EDIT.// Source: ../../cmd/compile/internal/types2/under.go// Copyright 2011 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 types// under returns the true expanded underlying type.// If it doesn't exist, the result is Typ[Invalid].// under must only be called when a type is known// to be fully set up.func ( Type) Type {if := asNamed(); != nil {return .under()}return .Underlying()}// If typ is a type parameter, underIs returns the result of typ.underIs(f).// Otherwise, underIs returns the result of f(under(typ)).func ( Type, func(Type) bool) bool {var booltypeset(, func(, Type) bool {= ()return})return}// typeset is an iterator over the (type/underlying type) pairs of the// specific type terms of the type set implied by t.// If t is a type parameter, the implied type set is the type set of t's constraint.// In that case, if there are no specific terms, typeset calls yield with (nil, nil).// If t is not a type parameter, the implied type set consists of just t.// In any case, typeset is guaranteed to call yield at least once.func ( Type, func(, Type) bool) {if , := Unalias().(*TypeParam); != nil {.typeset()return}(, under())}// If t is not a type parameter, coreType returns the underlying type.// If t is a type parameter, coreType returns the single underlying// type of all types in its type set if it exists, or nil otherwise. If the// type set contains only unrestricted and restricted channel types (with// identical element types), the single underlying type is the restricted// channel type if the restrictions are always the same, or nil otherwise.func ( Type) Type {var Typetypeset(, func(, Type) bool {if == nil {return false}if != nil {= match(, )if == nil {= nilreturn false}}// su == nil || match(su, u) != nil=return true})return}// coreString is like coreType but also considers []byte// and strings as identical. In this case, if successful and we saw// a string, the result is of type (possibly untyped) string.func ( Type) Type {// This explicit case is needed because otherwise the// result would be string if t is an untyped string.if !isTypeParam() {return under() // untyped string remains untyped}var Type:= falsetypeset(, func(, Type) bool {if == nil {return false}if isString() {= NewSlice(universeByte)= true}if != nil {= match(, )if == nil {= nil= falsereturn false}}// su == nil || match(su, u) != nil=return true})if {return Typ[String]}return}// If x and y are identical, match returns x.// If x and y are identical channels but for their direction// and one of them is unrestricted, match returns the channel// with the restricted direction.// In all other cases, match returns nil.func (, Type) Type {// Common case: we don't have channels.if Identical(, ) {return}// We may have channels that differ in direction only.if , := .(*Chan); != nil {if , := .(*Chan); != nil && Identical(.elem, .elem) {// We have channels that differ in direction only.// If there's an unrestricted channel, select the restricted one.switch {case .dir == SendRecv:returncase .dir == SendRecv:return}}}// types are differentreturn nil}
The pages are generated with Golds v0.7.6. (GOOS=linux GOARCH=amd64)