Something went wrong. Try again.
🌱 A minimal programming language and compiler. git.urbach.dev/cli/q
high-performance programming-language compiler
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839package ast
import ( "git.urbach.dev/cli/q/src/errors" "git.urbach.dev/cli/q/src/expression" "git.urbach.dev/cli/q/src/fs" "git.urbach.dev/cli/q/src/token")
func parseSwitch(tokens token.List, file *fs.File) (Node, error) { var ( head *expression.Expression blockStart = tokens.IndexKind(token.BlockStart) blockEnd = tokens.LastIndexKind(token.BlockEnd) )
if blockStart == -1 { return nil, errors.NewAt(MissingBlockStart, file, tokens[0].End()) }
if blockEnd == -1 { return nil, errors.NewAt(MissingBlockEnd, file, tokens[len(tokens)-1].End()) }
headTokens := tokens[1:blockStart]
if len(headTokens) > 0 { head = expression.Parse(headTokens) }
body := tokens[blockStart+1 : blockEnd]
if len(body) == 0 { return nil, errors.New(EmptySwitch, file, tokens[0]) }
cases, err := parseCases(body, file) return &Switch{Head: head, Cases: cases}, err}