github.com/khulnasoft-lab/defsec@v1.0.5-0.20230827010352-5e9f46893d95/pkg/scanners/azure/expressions/token_walker.go (about) 1 package expressions 2 3 type tokenWalker struct { 4 tokens []Token 5 currentPosition int 6 } 7 8 func newTokenWalker(tokens []Token) *tokenWalker { 9 return &tokenWalker{ 10 tokens: tokens, 11 currentPosition: 0, 12 } 13 } 14 15 func (t *tokenWalker) peek() Token { 16 if t.currentPosition >= len(t.tokens) { 17 return Token{} 18 } 19 return t.tokens[t.currentPosition] 20 } 21 22 func (t *tokenWalker) hasNext() bool { 23 return t.currentPosition+1 < len(t.tokens) 24 } 25 26 func (t *tokenWalker) unPop() { 27 if t.currentPosition > 0 { 28 t.currentPosition-- 29 } 30 } 31 32 func (t *tokenWalker) pop() *Token { 33 if !t.hasNext() { 34 return nil 35 } 36 37 token := t.tokens[t.currentPosition] 38 t.currentPosition++ 39 return &token 40 }