Giant blob of minor changes
[dotfiles/.git] / .config / coc / extensions / coc-go-data / tools / pkg / mod / golang.org / x / tools@v0.0.0-20201105173854-bc9fc8d8c4bc / go / pointer / testdata / structreflect.go
diff --git a/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.0.0-20201105173854-bc9fc8d8c4bc/go/pointer/testdata/structreflect.go b/.config/coc/extensions/coc-go-data/tools/pkg/mod/golang.org/x/tools@v0.0.0-20201105173854-bc9fc8d8c4bc/go/pointer/testdata/structreflect.go
new file mode 100644 (file)
index 0000000..9fb49f5
--- /dev/null
@@ -0,0 +1,45 @@
+// +build ignore
+
+package main
+
+import "reflect"
+
+type A struct {
+       f *int
+       g interface{}
+       h bool
+}
+
+var dyn string
+
+func reflectTypeFieldByName() {
+       f, _ := reflect.TypeOf(A{}).FieldByName("f")
+       print(f.Type) // @pointsto *int
+
+       g, _ := reflect.TypeOf(A{}).FieldByName("g")
+       print(g.Type)               // @pointsto interface{}
+       print(reflect.Zero(g.Type)) // @pointsto <alloc in reflect.Zero>
+       print(reflect.Zero(g.Type)) // @types interface{}
+
+       print(reflect.Zero(g.Type).Interface()) // @pointsto
+       print(reflect.Zero(g.Type).Interface()) // @types
+
+       h, _ := reflect.TypeOf(A{}).FieldByName("h")
+       print(h.Type) // @pointsto bool
+
+       missing, _ := reflect.TypeOf(A{}).FieldByName("missing")
+       print(missing.Type) // @pointsto
+
+       dyn, _ := reflect.TypeOf(A{}).FieldByName(dyn)
+       print(dyn.Type) // @pointsto *int | bool | interface{}
+}
+
+func reflectTypeField() {
+       fld := reflect.TypeOf(A{}).Field(0)
+       print(fld.Type) // @pointsto *int | bool | interface{}
+}
+
+func main() {
+       reflectTypeFieldByName()
+       reflectTypeField()
+}