def args.go

bolt@1.27.0.0 · src/rules/calls.bend:95

import bolt@1.27.0.0/src/rules/calls.bend as Calls
import Base
import bolt@1.27.0.0/src/syntax/lex.bend as Lex
import bolt@1.27.0.0/src/syntax/tree.bend as Tree
import bolt@1.27.0.0/src/lazy/lazy.bend as Lazy

95# the arguments of a group, split at its top-level commas (each a chain)
96def args.go(kids: Tree.Node, +cur: Tree.Node, +acc: List<&2, Tree.Node>) -> List<&2, Tree.Node>:
97  match kids:
98    case Tree.NCons{+h, +rest}:
99      Lazy.either(List<&2, Tree.Node>, kind.leaf(~Lex.is_comma, h),
100        _u => args.go(rest, Tree.NNil{}, Tree.reverse(cur, Tree.NNil{}) <> acc),
101        _v => args.go(rest, Tree.NCons{h, cur}, acc))
102    case other:
103      List.reverse(&2, Tree.Node, Tree.reverse(cur, Tree.NNil{}) <> acc)

Uses (7)

Used by (1)