mirror of
https://github.com/golang/go
synced 2024-11-25 09:17:57 -07:00
exp/template: remove else and end nodes from public view.
They are used internally and do not appear in the final parse tree. R=golang-dev, dsymonds CC=golang-dev https://golang.org/cl/4905052
This commit is contained in:
parent
a576535e5e
commit
4cf630da0f
@ -35,8 +35,8 @@ const (
|
||||
NodeBool // A boolean constant.
|
||||
NodeCommand // An element of a pipeline.
|
||||
NodeDot // The cursor, dot.
|
||||
NodeElse // An else action.
|
||||
NodeEnd // An end action.
|
||||
nodeElse // An else action. Not added to tree.
|
||||
nodeEnd // An end action. Not added to tree.
|
||||
NodeField // A field or method name.
|
||||
NodeIdentifier // An identifier; always a function name.
|
||||
NodeIf // An if action.
|
||||
@ -356,36 +356,37 @@ func (s *StringNode) String() string {
|
||||
return fmt.Sprintf("S=%#q", s.Text)
|
||||
}
|
||||
|
||||
// EndNode represents an {{end}} action. It is represented by a nil pointer.
|
||||
type EndNode bool
|
||||
// endNode represents an {{end}} action. It is represented by a nil pointer.
|
||||
// It does not appear in the final parse tree.
|
||||
type endNode bool
|
||||
|
||||
func newEnd() *EndNode {
|
||||
func newEnd() *endNode {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (e *EndNode) Type() NodeType {
|
||||
return NodeEnd
|
||||
func (e *endNode) Type() NodeType {
|
||||
return nodeEnd
|
||||
}
|
||||
|
||||
func (e *EndNode) String() string {
|
||||
func (e *endNode) String() string {
|
||||
return "{{end}}"
|
||||
}
|
||||
|
||||
// ElseNode represents an {{else}} action.
|
||||
type ElseNode struct {
|
||||
// elseNode represents an {{else}} action. Does not appear in the final tree.
|
||||
type elseNode struct {
|
||||
NodeType
|
||||
Line int // The line number in the input.
|
||||
}
|
||||
|
||||
func newElse(line int) *ElseNode {
|
||||
return &ElseNode{NodeType: NodeElse, Line: line}
|
||||
func newElse(line int) *elseNode {
|
||||
return &elseNode{NodeType: nodeElse, Line: line}
|
||||
}
|
||||
|
||||
func (e *ElseNode) Type() NodeType {
|
||||
return NodeElse
|
||||
func (e *elseNode) Type() NodeType {
|
||||
return nodeElse
|
||||
}
|
||||
|
||||
func (e *ElseNode) String() string {
|
||||
func (e *elseNode) String() string {
|
||||
return "{{else}}"
|
||||
}
|
||||
|
||||
|
@ -173,7 +173,7 @@ func (t *Tree) itemList(toEOF bool) (list *ListNode, next Node) {
|
||||
for t.peek().typ != itemEOF {
|
||||
n := t.textOrAction()
|
||||
switch n.Type() {
|
||||
case NodeEnd, NodeElse:
|
||||
case nodeEnd, nodeElse:
|
||||
return list, n
|
||||
}
|
||||
list.append(n)
|
||||
@ -278,10 +278,10 @@ func (t *Tree) parseControl(context string) (lineNum int, pipe *PipeNode, list,
|
||||
var next Node
|
||||
list, next = t.itemList(false)
|
||||
switch next.Type() {
|
||||
case NodeEnd: //done
|
||||
case NodeElse:
|
||||
case nodeEnd: //done
|
||||
case nodeElse:
|
||||
elseList, next = t.itemList(false)
|
||||
if next.Type() != NodeEnd {
|
||||
if next.Type() != nodeEnd {
|
||||
t.errorf("expected end; found %s", next)
|
||||
}
|
||||
elseList = elseList
|
||||
|
@ -37,7 +37,7 @@ func Set(text string, funcs ...map[string]interface{}) (tree map[string]*Tree, e
|
||||
if end == nil {
|
||||
t.errorf("unexpected EOF in %s", context)
|
||||
}
|
||||
if end.Type() != NodeEnd {
|
||||
if end.Type() != nodeEnd {
|
||||
t.errorf("unexpected %s in %s", end, context)
|
||||
}
|
||||
t.stopParse()
|
||||
|
Loading…
Reference in New Issue
Block a user