Commit 421b75c0 authored by Rob Pike's avatar Rob Pike

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
parent bbccfddb
...@@ -13,7 +13,9 @@ import ( ...@@ -13,7 +13,9 @@ import (
"strings" "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 Node interface {
Type() NodeType Type() NodeType
String() string String() string
...@@ -22,6 +24,8 @@ type Node interface { ...@@ -22,6 +24,8 @@ type Node interface {
// CopyXxx methods that return *XxxNode. // CopyXxx methods that return *XxxNode.
Copy() Node Copy() Node
Position() Pos // byte position of start of node in full original input string 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. // NodeType identifies the type of a parse tree node.
...@@ -35,6 +39,11 @@ func (p Pos) Position() Pos { ...@@ -35,6 +39,11 @@ func (p Pos) Position() Pos {
return p 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 // Type returns itself and provides an easy default implementation
// for embedding in a Node. Embedded in all non-trivial Nodes. // for embedding in a Node. Embedded in all non-trivial Nodes.
func (t NodeType) Type() NodeType { func (t NodeType) Type() NodeType {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment