github.com/huandu/go@v0.0.0-20151114150818-04e615e41150/src/cmd/asm/internal/lex/slice.go (about)

     1  // Copyright 2015 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package lex
     6  
     7  import "text/scanner"
     8  
     9  // A Slice reads from a slice of Tokens.
    10  type Slice struct {
    11  	tokens   []Token
    12  	fileName string
    13  	line     int
    14  	pos      int
    15  }
    16  
    17  func NewSlice(fileName string, line int, tokens []Token) *Slice {
    18  	return &Slice{
    19  		tokens:   tokens,
    20  		fileName: fileName,
    21  		line:     line,
    22  		pos:      -1, // Next will advance to zero.
    23  	}
    24  }
    25  
    26  func (s *Slice) Next() ScanToken {
    27  	s.pos++
    28  	if s.pos >= len(s.tokens) {
    29  		return scanner.EOF
    30  	}
    31  	return s.tokens[s.pos].ScanToken
    32  }
    33  
    34  func (s *Slice) Text() string {
    35  	return s.tokens[s.pos].text
    36  }
    37  
    38  func (s *Slice) File() string {
    39  	return s.fileName
    40  }
    41  
    42  func (s *Slice) Line() int {
    43  	return s.line
    44  }
    45  
    46  func (s *Slice) Col() int {
    47  	// Col is only called when defining a macro, which can't reach here.
    48  	panic("cannot happen: slice col")
    49  }
    50  
    51  func (s *Slice) SetPos(line int, file string) {
    52  	// Cannot happen because we only have slices of already-scanned
    53  	// text, but be prepared.
    54  	s.line = line
    55  	s.fileName = file
    56  }
    57  
    58  func (s *Slice) Close() {
    59  }