Types
Expr = ref object case kind*: ExprKind of ekNum: num*: int of ekStep: stepExpr*: Expr step*: int of ekRange: rangeSlice*: Slice[int] of ekSeq: exprs*: seq[Expr] of ekIndex: indexer*: int index*: int of ekNearest: of ekLastN: last*: int else: nil
ExprKind = enum ekAll, ekAny, ekLast, ekLastN, ekHash, ekNum, ekStep, ekRange, ekSeq, ekIndex, ekNearest
Procs
proc newAllExpr(): Expr {....raises: [], tags: [], forbids: [].}
proc newAnyExpr(): Expr {....raises: [], tags: [], forbids: [].}
proc newHashExpr(): Expr {....raises: [], tags: [], forbids: [].}
proc newIndexExpr(indexer: int; index: int): Expr {....raises: [], tags: [], forbids: [].}
proc newLastExpr(): Expr {....raises: [], tags: [], forbids: [].}
proc newLastNExpr(last: int): Expr {....raises: [], tags: [], forbids: [].}
proc newNearestExpr(nearest: int): Expr {....raises: [], tags: [], forbids: [].}
proc newNumExpr(num: int): Expr {....raises: [], tags: [], forbids: [].}
proc newRangeExpr(start: int; stop: int): Expr {....raises: [], tags: [], forbids: [].}
proc newSeqExpr(exprs: seq[Expr]): Expr {....raises: [], tags: [], forbids: [].}
proc newStepExpr(expr: Expr; step: int): Expr {....raises: [], tags: [], forbids: [].}