forked from OSchip/llvm-project
58 lines
1.6 KiB
Go
58 lines
1.6 KiB
Go
//===- predicates.go - type predicates ------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This file implements commonly used type predicates.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
package irgen
|
|
|
|
import (
|
|
"llvm.org/llgo/third_party/gotools/go/types"
|
|
)
|
|
|
|
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])
|
|
}
|