in build/lex.go [685:825]
func (in *input) order(v Expr) {
if v != nil {
in.pre = append(in.pre, v)
}
switch v := v.(type) {
default:
panic(fmt.Errorf("order: unexpected type %T", v))
case nil:
// nothing
case *End:
// nothing
case *File:
for _, stmt := range v.Stmt {
in.order(stmt)
}
case *CommentBlock:
// nothing
case *CallExpr:
in.order(v.X)
for _, x := range v.List {
in.order(x)
}
in.order(&v.End)
case *LoadStmt:
in.order(v.Module)
for i := range v.From {
in.order(v.To[i])
in.order(v.From[i])
}
in.order(&v.Rparen)
case *LiteralExpr:
// nothing
case *StringExpr:
// nothing
case *Ident:
// nothing
case *TypedIdent:
in.order(v.Type)
case *BranchStmt:
// nothing
case *DotExpr:
in.order(v.X)
case *ListExpr:
for _, x := range v.List {
in.order(x)
}
in.order(&v.End)
case *Comprehension:
in.order(v.Body)
for _, c := range v.Clauses {
in.order(c)
}
in.order(&v.End)
case *SetExpr:
for _, x := range v.List {
in.order(x)
}
in.order(&v.End)
case *ForClause:
in.order(v.Vars)
in.order(v.X)
case *IfClause:
in.order(v.Cond)
case *KeyValueExpr:
in.order(v.Key)
in.order(v.Value)
case *DictExpr:
for _, x := range v.List {
in.order(x)
}
in.order(&v.End)
case *TupleExpr:
for _, x := range v.List {
in.order(x)
}
if !v.NoBrackets {
in.order(&v.End)
}
case *UnaryExpr:
in.order(v.X)
case *BinaryExpr:
in.order(v.X)
in.order(v.Y)
case *AssignExpr:
in.order(v.LHS)
in.order(v.RHS)
case *ConditionalExpr:
in.order(v.Then)
in.order(v.Test)
in.order(v.Else)
case *ParenExpr:
in.order(v.X)
in.order(&v.End)
case *SliceExpr:
in.order(v.X)
in.order(v.From)
in.order(v.To)
in.order(v.Step)
case *IndexExpr:
in.order(v.X)
in.order(v.Y)
case *LambdaExpr:
for _, param := range v.Params {
in.order(param)
}
for _, expr := range v.Body {
in.order(expr)
}
case *ReturnStmt:
if v.Result != nil {
in.order(v.Result)
}
case *DefStmt:
for _, x := range v.Params {
in.order(x)
}
for _, x := range v.Body {
in.order(x)
}
case *ForStmt:
in.order(v.Vars)
in.order(v.X)
for _, x := range v.Body {
in.order(x)
}
case *IfStmt:
in.order(v.Cond)
for _, s := range v.True {
in.order(s)
}
if len(v.False) > 0 {
in.order(&v.ElsePos)
}
for _, s := range v.False {
in.order(s)
}
}
if v != nil {
in.post = append(in.post, v)
}
}