code: final boolean applyNewNode(Parser<?> parser, String name) {
      int physical = at;
      int logical = step;
      TreeNode latestChild = trace.getLatestChild();
      trace.push(name);
      if (parser.apply(this)) {
        trace.setCurrentResult(result);
        trace.pop();
        return true;
      }
      if (stillThere(physical, logical)) expected(name);
      trace.pop();
      // On failure, the erroneous path shouldn't be counted in the parse tree.
      trace.setLatestChild(latestChild);
      return false;
    }
docs: Applies {@code parser} as a new tree node with {@code name}, and if fails, reports
  "expecting $name".