示例#1
0
  public static Sequence append(Sequence s, TypedAST e) {
    Iterator<TypedAST> innerIter = s.iterator();
    if (s instanceof DeclSequence && e instanceof Declaration) {
      return DeclSequence.simplify(new DeclSequence(s, e));
    }
    return new Sequence(
        () ->
            new Iterator<TypedAST>() {
              private boolean fetched = false;

              @Override
              public boolean hasNext() {
                if (innerIter.hasNext()) return true;
                return !fetched;
              }

              @Override
              public TypedAST next() {
                if (innerIter.hasNext()) return innerIter.next();
                if (!fetched) {
                  fetched = true;
                  return e;
                }
                throw new RuntimeException();
              }
            });
  }