// Path: src/main/java/org/anarres/cpp/Token.java
// public static final int CCOMMENT = 260;
// 
// Path: src/main/java/org/anarres/cpp/Token.java
// public static final int CPPCOMMENT = 261;
// 
// Path: src/main/java/org/anarres/cpp/Token.java
// public static final int EOF = 265;
// 
// Path: src/main/java/org/anarres/cpp/Token.java
// public static final int NL = 284;
// 
// Path: src/main/java/org/anarres/cpp/Token.java
// public static final int WHITESPACE = 294;


import java.io.Closeable;
import java.io.IOException;
import java.util.Iterator;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnegative;
import javax.annotation.Nonnull;
import static org.anarres.cpp.Token.CCOMMENT;
import static org.anarres.cpp.Token.CPPCOMMENT;
import static org.anarres.cpp.Token.EOF;
import static org.anarres.cpp.Token.NL;
import static org.anarres.cpp.Token.WHITESPACE;
        return new SourceIterator(this);
    }

    /**
     * Skips tokens until the end of line.
     *
     * @param white true if only whitespace is permitted on the
     *	remainder of the line.
     * @return the NL token.
     */
    @Nonnull
    public Token skipline(boolean white)
            throws IOException,
            LexerException {
        for (;;) {
            Token tok = token();
            switch (tok.getType()) {
                case EOF:
                    /* There ought to be a newline before EOF.
                     * At least, in any skipline context. */
                    /* XXX Are we sure about this? */
                    warning(tok.getLine(), tok.getColumn(),
                            "No newline before end of file");
                    return new Token(NL,
                            tok.getLine(), tok.getColumn(),
                            "\n");
                // return tok;
                case NL:
                    /* This may contain one or more newlines. */
                    return tok;
// Path: src/main/java/org/anarres/cpp/Token.java
// public static final int CCOMMENT = 260;
// 
// Path: src/main/java/org/anarres/cpp/Token.java
// public static final int CPPCOMMENT = 261;
// 
// Path: src/main/java/org/anarres/cpp/Token.java
// public static final int EOF = 265;
// 
// Path: src/main/java/org/anarres/cpp/Token.java
// public static final int NL = 284;
// 
// Path: src/main/java/org/anarres/cpp/Token.java
// public static final int WHITESPACE = 294;


// Path: src/main/java/org/anarres/cpp/Source.java
import java.io.Closeable;
import java.io.IOException;
import java.util.Iterator;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnegative;
import javax.annotation.Nonnull;
import static org.anarres.cpp.Token.CCOMMENT;
import static org.anarres.cpp.Token.CPPCOMMENT;
import static org.anarres.cpp.Token.EOF;
import static org.anarres.cpp.Token.NL;
import static org.anarres.cpp.Token.WHITESPACE;

        return new SourceIterator(this);
    }

    /**
     * Skips tokens until the end of line.
     *
     * @param white true if only whitespace is permitted on the
     *	remainder of the line.
     * @return the NL token.
     */
    @Nonnull
    public Token skipline(boolean white)
            throws IOException,
            LexerException {
        for (;;) {
            Token tok = token();
            switch (tok.getType()) {
                case EOF:
                    /* There ought to be a newline before EOF.
                     * At least, in any skipline context. */
                    /* XXX Are we sure about this? */
                    warning(tok.getLine(), tok.getColumn(),
                            "No newline before end of file");
                    return new Token(NL,
                            tok.getLine(), tok.getColumn(),
                            "\n");
                // return tok;
                case NL:
                    /* This may contain one or more newlines. */
                    return tok;
                case CCOMMENT: