]> Cypherpunks repositories - gostls13.git/commitdiff
reflect: add a secret method to ArrayOrSliceType.
authorRob Pike <r@golang.org>
Tue, 22 Feb 2011 17:21:50 +0000 (09:21 -0800)
committerRob Pike <r@golang.org>
Tue, 22 Feb 2011 17:21:50 +0000 (09:21 -0800)
It was observed that the interface was generic enough
that several other types implemented it too.

Fixes #1530.

R=rsc
CC=golang-dev
https://golang.org/cl/4169063

src/pkg/reflect/type.go

index 6ee9c127a49291baaf43b6808eeaee19a91f68f6..9ccee3ae9d2c0e6605f72b2ece3e75b69ca2e018 100644 (file)
@@ -163,6 +163,10 @@ type SliceType struct {
        elem       *runtime.Type
 }
 
+// arrayOrSliceType is an unexported method that guarantees only
+// arrays and slices implement ArrayOrSliceType.
+func (*SliceType) arrayOrSliceType() {}
+
 // Struct field
 type structField struct {
        name    *string
@@ -397,6 +401,10 @@ func (t *ArrayType) Len() int { return int(t.len) }
 // Elem returns the type of the array's elements.
 func (t *ArrayType) Elem() Type { return toType(*t.elem) }
 
+// arrayOrSliceType is an unexported method that guarantees only
+// arrays and slices implement ArrayOrSliceType.
+func (*ArrayType) arrayOrSliceType() {}
+
 // Dir returns the channel direction.
 func (t *ChanType) Dir() ChanDir { return ChanDir(t.dir) }
 
@@ -675,6 +683,7 @@ func toType(i interface{}) Type {
 type ArrayOrSliceType interface {
        Type
        Elem() Type
+       arrayOrSliceType() // Guarantees only Array and Slice implement this interface.
 }
 
 // Typeof returns the reflection Type of the value in the interface{}.