2014-11-27 08:06:42 +08:00
|
|
|
//===- predicates.go - type predicates ------------------------------------===//
|
|
|
|
//
|
|
|
|
// The LLVM Compiler Infrastructure
|
|
|
|
//
|
|
|
|
// This file is distributed under the University of Illinois Open Source
|
|
|
|
// License. See LICENSE.TXT for details.
|
|
|
|
//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
//
|
|
|
|
// This file implements commonly used type predicates.
|
|
|
|
//
|
|
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
|
|
|
|
package irgen
|
|
|
|
|
|
|
|
import (
|
2015-01-14 04:45:08 +08:00
|
|
|
"llvm.org/llgo/third_party/gotools/go/types"
|
2014-11-27 08:06:42 +08:00
|
|
|
)
|
|
|
|
|
|
|
|
func isBoolean(typ types.Type) bool {
|
|
|
|
t, ok := typ.Underlying().(*types.Basic)
|
|
|
|
return ok && t.Info()&types.IsBoolean != 0
|
|
|
|
}
|
|
|
|
|
|
|
|
func isInteger(typ types.Type) bool {
|
|
|
|
t, ok := typ.Underlying().(*types.Basic)
|
|
|
|
return ok && t.Info()&types.IsInteger != 0
|
|
|
|
}
|
|
|
|
|
|
|
|
func isUnsigned(typ types.Type) bool {
|
|
|
|
t, ok := typ.Underlying().(*types.Basic)
|
|
|
|
return ok && t.Info()&types.IsUnsigned != 0
|
|
|
|
}
|
|
|
|
|
|
|
|
func isFloat(typ types.Type) bool {
|
|
|
|
t, ok := typ.Underlying().(*types.Basic)
|
|
|
|
return ok && t.Info()&types.IsFloat != 0
|
|
|
|
}
|
|
|
|
|
|
|
|
func isComplex(typ types.Type) bool {
|
|
|
|
t, ok := typ.Underlying().(*types.Basic)
|
|
|
|
return ok && t.Info()&types.IsComplex != 0
|
|
|
|
}
|
|
|
|
|
|
|
|
func isString(typ types.Type) bool {
|
|
|
|
t, ok := typ.Underlying().(*types.Basic)
|
|
|
|
return ok && t.Info()&types.IsString != 0
|
|
|
|
}
|
|
|
|
|
|
|
|
func isUntyped(typ types.Type) bool {
|
|
|
|
t, ok := typ.Underlying().(*types.Basic)
|
|
|
|
return ok && t.Info()&types.IsUntyped != 0
|
|
|
|
}
|
|
|
|
|
|
|
|
func isSlice(typ types.Type, bkind types.BasicKind) bool {
|
|
|
|
t, ok := typ.Underlying().(*types.Slice)
|
|
|
|
return ok && types.Identical(t.Elem().Underlying(), types.Typ[bkind])
|
|
|
|
}
|