Stack[T] = object top*: int
proc `$`[T](s: Stack[T]): string
proc grow[T](s: var Stack[T])
proc initStack[T](name: string; len: int; max: int = int.high): Stack[T]
template `[]`[T](s: Stack[T]; idx: int): T
template peek[T](s: Stack[T]): T
template pop[T](s: var Stack[T]): T
template push[T](s: var Stack[T]; frame: T)
template update[T](s: Stack[T]; field: untyped; val: untyped)