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])
 | |
| }
 |