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.
123456789101112131415161718192021222324252627282930313233343536package ast
import ( "git.urbach.dev/cli/q/src/expression" "git.urbach.dev/cli/q/src/fs" "git.urbach.dev/cli/q/src/token")
// parseCases generates the cases inside a switch statement.func parseCases(tokens token.List, file *fs.File) ([]Case, error) { cases := make([]Case, 0, 4)
for caseTokens := range tokens.Instructions { blockStart, _, body, err := block(caseTokens, file)
if err != nil { return nil, err }
conditionTokens := caseTokens[:blockStart] var condition *expression.Expression
if len(conditionTokens) == 1 && conditionTokens[0].Kind == token.Identifier && conditionTokens[0].StringFrom(file.Bytes) == "_" { condition = nil } else { condition = expression.Parse(conditionTokens) }
cases = append(cases, Case{ Condition: condition, Body: body, }) }
return cases, nil}