From: Rob Pike Date: Sat, 6 Oct 2012 20:15:11 +0000 (+1100) Subject: text/template: add an unexported method to Node X-Git-Tag: go1.1rc2~2240 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=421b75c0dbab3460dbfdb023d67ce0807c4d5327;p=gostls13.git text/template: add an unexported method to Node Protects the package a little against undesirable clients. R=golang-dev, bradfitz, rsc CC=golang-dev https://golang.org/cl/6624054 --- diff --git a/src/pkg/text/template/parse/node.go b/src/pkg/text/template/parse/node.go index 0cb7ceff4d..9d0d09eb5f 100644 --- a/src/pkg/text/template/parse/node.go +++ b/src/pkg/text/template/parse/node.go @@ -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 {