package slangc.parser; public final class SourcePosition { private final Source source; private final int index, line, character; public SourcePosition(Source source, int index, int line, int character) { this.source = source; this.index = index; this.line = line; this.character = character; } public SourcePosition(Source source) { this(source, 0, 1, 1); } public SourcePosition clone() { return new SourcePosition(source, index, line, character); } public Source getSource() { return source; } public int getIndex() { return index; } public int getLineCount() { return line; } public int getCharacterCount() { return character; } public boolean isAtEnd() { return !source.isIndexWithinBounds(index); } @Override public String toString() { return "SourcePosition(" + source.toString() + ", " + index + ", " + line + ", " + character + ")"; } }