code: def run(self, tokens):
          
          for fn in self._stack:
              results = []
              for i, token in enumerate(tokens):
                  # JS ignores additional arguments to the functions but we
                  # force pipeline functions to declare (token, i, tokens)
                  # or *args
                  result = fn(token, i, tokens)
                  if not result:
                      continue
                  if isinstance(result, (list, tuple)):  # simulate Array.concat
                      results.extend(result)
                  else:
                      results.append(result)
              tokens = results
  
          return tokens
docs: Runs the current list of functions that make up the pipeline against
          the passed tokens.