rsc.io/go@v0.0.0-20150416155037-e040fd465409/src/reflect/export_test.go (about)

     1  // Copyright 2012 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 reflect
     6  
     7  // MakeRO returns a copy of v with the read-only flag set.
     8  func MakeRO(v Value) Value {
     9  	v.flag |= flagRO
    10  	return v
    11  }
    12  
    13  // IsRO reports whether v's read-only flag is set.
    14  func IsRO(v Value) bool {
    15  	return v.flag&flagRO != 0
    16  }
    17  
    18  var ArrayOf = arrayOf
    19  var CallGC = &callGC
    20  
    21  const PtrSize = ptrSize
    22  const BitsPointer = bitsPointer
    23  const BitsScalar = bitsScalar
    24  
    25  func FuncLayout(t Type, rcvr Type) (frametype Type, argSize, retOffset uintptr, stack []byte, gc []byte, ptrs bool) {
    26  	var ft *rtype
    27  	var s *bitVector
    28  	if rcvr != nil {
    29  		ft, argSize, retOffset, s, _ = funcLayout(t.(*rtype), rcvr.(*rtype))
    30  	} else {
    31  		ft, argSize, retOffset, s, _ = funcLayout(t.(*rtype), nil)
    32  	}
    33  	frametype = ft
    34  	for i := uint32(0); i < s.n; i += 2 {
    35  		stack = append(stack, s.data[i/8]>>(i%8)&3)
    36  	}
    37  	if ft.kind&kindGCProg != 0 {
    38  		panic("can't handle gc programs")
    39  	}
    40  	gcdata := (*[1000]byte)(ft.gc[0])
    41  	for i := uintptr(0); i < ft.size/ptrSize; i++ {
    42  		gc = append(gc, gcdata[i/2]>>(i%2*4+2)&3)
    43  	}
    44  	ptrs = ft.kind&kindNoPointers == 0
    45  	return
    46  }
    47  
    48  func TypeLinks() []string {
    49  	var r []string
    50  	for _, m := range typelinks() {
    51  		for _, t := range m {
    52  			r = append(r, *t.string)
    53  		}
    54  	}
    55  	return r
    56  }