| // 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}, |
| })) |