Home | History | Annotate | Download | only in ssa
      1 // Copyright 2015 The Go Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style
      3 // license that can be found in the LICENSE file.
      4 
      5 package ssa
      6 
      7 // Stub implementation used for testing.
      8 type TypeImpl struct {
      9 	Size_   int64
     10 	Align   int64
     11 	Boolean bool
     12 	Integer bool
     13 	Signed  bool
     14 	Float   bool
     15 	Complex bool
     16 	Ptr     bool
     17 	string  bool
     18 	slice   bool
     19 	array   bool
     20 	struct_ bool
     21 	inter   bool
     22 	Elem_   Type
     23 
     24 	Name string
     25 }
     26 
     27 func (t *TypeImpl) Size() int64            { return t.Size_ }
     28 func (t *TypeImpl) Alignment() int64       { return t.Align }
     29 func (t *TypeImpl) IsBoolean() bool        { return t.Boolean }
     30 func (t *TypeImpl) IsInteger() bool        { return t.Integer }
     31 func (t *TypeImpl) IsSigned() bool         { return t.Signed }
     32 func (t *TypeImpl) IsFloat() bool          { return t.Float }
     33 func (t *TypeImpl) IsComplex() bool        { return t.Complex }
     34 func (t *TypeImpl) IsPtrShaped() bool      { return t.Ptr }
     35 func (t *TypeImpl) IsString() bool         { return t.string }
     36 func (t *TypeImpl) IsSlice() bool          { return t.slice }
     37 func (t *TypeImpl) IsArray() bool          { return t.array }
     38 func (t *TypeImpl) IsStruct() bool         { return t.struct_ }
     39 func (t *TypeImpl) IsInterface() bool      { return t.inter }
     40 func (t *TypeImpl) IsMemory() bool         { return false }
     41 func (t *TypeImpl) IsFlags() bool          { return false }
     42 func (t *TypeImpl) IsTuple() bool          { return false }
     43 func (t *TypeImpl) IsVoid() bool           { return false }
     44 func (t *TypeImpl) String() string         { return t.Name }
     45 func (t *TypeImpl) SimpleString() string   { return t.Name }
     46 func (t *TypeImpl) ElemType() Type         { return t.Elem_ }
     47 func (t *TypeImpl) PtrTo() Type            { return TypeBytePtr }
     48 func (t *TypeImpl) NumFields() int         { panic("not implemented") }
     49 func (t *TypeImpl) FieldType(i int) Type   { panic("not implemented") }
     50 func (t *TypeImpl) FieldOff(i int) int64   { panic("not implemented") }
     51 func (t *TypeImpl) FieldName(i int) string { panic("not implemented") }
     52 func (t *TypeImpl) NumElem() int64         { panic("not implemented") }
     53 
     54 func (t *TypeImpl) Equal(u Type) bool {
     55 	x, ok := u.(*TypeImpl)
     56 	if !ok {
     57 		return false
     58 	}
     59 	return x == t
     60 }
     61 
     62 func (t *TypeImpl) Compare(u Type) Cmp {
     63 	x, ok := u.(*TypeImpl)
     64 	// ssa.CompilerType < ssa.TypeImpl < gc.Type
     65 	if !ok {
     66 		_, ok := u.(*CompilerType)
     67 		if ok {
     68 			return CMPgt
     69 		}
     70 		return CMPlt
     71 	}
     72 	if t == x {
     73 		return CMPeq
     74 	}
     75 	if t.Name < x.Name {
     76 		return CMPlt
     77 	}
     78 	if t.Name > x.Name {
     79 		return CMPgt
     80 	}
     81 	return CMPeq
     82 
     83 }
     84 
     85 var (
     86 	// shortcuts for commonly used basic types
     87 	TypeInt8       = &TypeImpl{Size_: 1, Align: 1, Integer: true, Signed: true, Name: "int8"}
     88 	TypeInt16      = &TypeImpl{Size_: 2, Align: 2, Integer: true, Signed: true, Name: "int16"}
     89 	TypeInt32      = &TypeImpl{Size_: 4, Align: 4, Integer: true, Signed: true, Name: "int32"}
     90 	TypeInt64      = &TypeImpl{Size_: 8, Align: 8, Integer: true, Signed: true, Name: "int64"}
     91 	TypeFloat32    = &TypeImpl{Size_: 4, Align: 4, Float: true, Name: "float32"}
     92 	TypeFloat64    = &TypeImpl{Size_: 8, Align: 8, Float: true, Name: "float64"}
     93 	TypeComplex64  = &TypeImpl{Size_: 8, Align: 4, Complex: true, Name: "complex64"}
     94 	TypeComplex128 = &TypeImpl{Size_: 16, Align: 8, Complex: true, Name: "complex128"}
     95 	TypeUInt8      = &TypeImpl{Size_: 1, Align: 1, Integer: true, Name: "uint8"}
     96 	TypeUInt16     = &TypeImpl{Size_: 2, Align: 2, Integer: true, Name: "uint16"}
     97 	TypeUInt32     = &TypeImpl{Size_: 4, Align: 4, Integer: true, Name: "uint32"}
     98 	TypeUInt64     = &TypeImpl{Size_: 8, Align: 8, Integer: true, Name: "uint64"}
     99 	TypeBool       = &TypeImpl{Size_: 1, Align: 1, Boolean: true, Name: "bool"}
    100 	TypeBytePtr    = &TypeImpl{Size_: 8, Align: 8, Ptr: true, Name: "*byte"}
    101 	TypeInt64Ptr   = &TypeImpl{Size_: 8, Align: 8, Ptr: true, Name: "*int64"}
    102 )
    103