59 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			59 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			Go
		
	
	
	
//===- 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 (
 | 
						|
	"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])
 | 
						|
}
 |