|  | // run | 
|  |  | 
|  | // Copyright 2019 The Go Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style | 
|  | // license that can be found in the LICENSE file. | 
|  |  | 
|  | package main | 
|  |  | 
|  | import "reflect" | 
|  |  | 
|  | func main() {} | 
|  |  | 
|  | func typ(x interface{}) reflect.Type { return reflect.ValueOf(x).Type() } | 
|  |  | 
|  | var byteType = typ((byte)(0)) | 
|  | var ptrType = typ((*byte)(nil)) | 
|  |  | 
|  | // Arrays of pointers. There are two size thresholds. | 
|  | // Bit masks are chunked in groups of 120 pointers. | 
|  | // Array types with >16384 pointers have a GC program instead of a bitmask. | 
|  | var smallPtrType = reflect.ArrayOf(100, ptrType) | 
|  | var mediumPtrType = reflect.ArrayOf(1000, ptrType) | 
|  | var bigPtrType = reflect.ArrayOf(16385, ptrType) | 
|  |  | 
|  | var x0 = reflect.New(reflect.StructOf([]reflect.StructField{ | 
|  | {Name: "F1", Type: byteType}, | 
|  | {Name: "F2", Type: bigPtrType}, | 
|  | })) | 
|  | var x1 = reflect.New(reflect.StructOf([]reflect.StructField{ | 
|  | {Name: "F1", Type: smallPtrType}, | 
|  | {Name: "F2", Type: bigPtrType}, | 
|  | })) | 
|  | var x2 = reflect.New(reflect.StructOf([]reflect.StructField{ | 
|  | {Name: "F1", Type: mediumPtrType}, | 
|  | {Name: "F2", Type: bigPtrType}, | 
|  | })) | 
|  | var x3 = reflect.New(reflect.StructOf([]reflect.StructField{ | 
|  | {Name: "F1", Type: ptrType}, | 
|  | {Name: "F2", Type: byteType}, | 
|  | {Name: "F3", Type: bigPtrType}, | 
|  | })) | 
|  | var x4 = reflect.New(reflect.StructOf([]reflect.StructField{ | 
|  | {Name: "F1", Type: ptrType}, | 
|  | {Name: "F2", Type: smallPtrType}, | 
|  | {Name: "F3", Type: bigPtrType}, | 
|  | })) | 
|  | var x5 = reflect.New(reflect.StructOf([]reflect.StructField{ | 
|  | {Name: "F1", Type: ptrType}, | 
|  | {Name: "F2", Type: mediumPtrType}, | 
|  | {Name: "F3", Type: bigPtrType}, | 
|  | })) |