123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- package parser
- import (
- "strings"
- )
- const (
- nullRep = "<null>"
- )
- // Node represents a node in the AST.
- type Node interface {
- // Pos returns the position of first character belonging to the node.
- Pos() Pos
- // End returns the position of first character immediately after the node.
- End() Pos
- // String returns a string representation of the node.
- String() string
- }
- // IdentList represents a list of identifiers.
- type IdentList struct {
- LParen Pos
- VarArgs bool
- List []*Ident
- RParen Pos
- }
- // Pos returns the position of first character belonging to the node.
- func (n *IdentList) Pos() Pos {
- if n.LParen.IsValid() {
- return n.LParen
- }
- if len(n.List) > 0 {
- return n.List[0].Pos()
- }
- return NoPos
- }
- // End returns the position of first character immediately after the node.
- func (n *IdentList) End() Pos {
- if n.RParen.IsValid() {
- return n.RParen + 1
- }
- if l := len(n.List); l > 0 {
- return n.List[l-1].End()
- }
- return NoPos
- }
- // NumFields returns the number of fields.
- func (n *IdentList) NumFields() int {
- if n == nil {
- return 0
- }
- return len(n.List)
- }
- func (n *IdentList) String() string {
- var list []string
- for i, e := range n.List {
- if n.VarArgs && i == len(n.List)-1 {
- list = append(list, "..."+e.String())
- } else {
- list = append(list, e.String())
- }
- }
- return "(" + strings.Join(list, ", ") + ")"
- }
|