]> Cypherpunks repositories - gostls13.git/commitdiff
text/template: add an unexported method to Node
authorRob Pike <r@golang.org>
Sat, 6 Oct 2012 20:15:11 +0000 (07:15 +1100)
committerRob Pike <r@golang.org>
Sat, 6 Oct 2012 20:15:11 +0000 (07:15 +1100)
Protects the package a little against undesirable clients.

R=golang-dev, bradfitz, rsc
CC=golang-dev
https://golang.org/cl/6624054

src/pkg/text/template/parse/node.go

index 0cb7ceff4dc8bd6c303c4abe3c9d57a2c6b9eda7..9d0d09eb5fa644c34817bc2fe94324735bc10135 100644 (file)
@@ -13,7 +13,9 @@ import (
        "strings"
 )
 
-// A node is an element in the parse tree. The interface is trivial.
+// A Node is an element in the parse tree. The interface is trivial.
+// The interface contains an unexported method so that only
+// types local to this package can satisfy it.
 type Node interface {
        Type() NodeType
        String() string
@@ -22,6 +24,8 @@ type Node interface {
        // CopyXxx methods that return *XxxNode.
        Copy() Node
        Position() Pos // byte position of start of node in full original input string
+       // Make sure only functions in this package can create Nodes.
+       unexported()
 }
 
 // NodeType identifies the type of a parse tree node.
@@ -35,6 +39,11 @@ func (p Pos) Position() Pos {
        return p
 }
 
+// unexported keeps Node implementations local to the package.
+// All implementations embed Pos, so this takes care of it.
+func (Pos) unexported() {
+}
+
 // Type returns itself and provides an easy default implementation
 // for embedding in a Node. Embedded in all non-trivial Nodes.
 func (t NodeType) Type() NodeType {