/*
* Copyright 2013 Guidewire Software, Inc.
*/
package gw.internal.gosu.parser;
import gw.lang.parser.IParserState;
public class LightweightParserState implements IParserState
{
private int _lineNum;
private int _lineOffset;
private int _offsetShift;
private int _tokenColumn;
private String _src;
private int _tokenStart;
private int _tokenEnd;
public LightweightParserState( SourceCodeTokenizer tokenizer, int offsetShift, int lineShift )
{
_offsetShift = offsetShift;
init( tokenizer.getSource(),
tokenizer.getLineNumber() + lineShift,
tokenizer.getLineOffset(),
tokenizer.getTokenColumn(),
tokenizer.getTokenStart() + offsetShift,
tokenizer.getTokenEnd() + offsetShift );
}
protected LightweightParserState()
{
//subtypes should call init() explicitly
}
void init( String src, int lineNum, int lineOffset, int tokenColumn, int tokenStart, int tokenEnd )
{
_lineNum = lineNum;
_lineOffset = lineOffset;
_tokenColumn = tokenColumn;
_src = src;
_tokenStart = tokenStart;
_tokenEnd = tokenEnd;
}
public int getLineNumber()
{
return _lineNum;
}
public int getLineOffset()
{
return _lineOffset;
}
public int getTokenColumn()
{
return _tokenColumn;
}
public String getSource()
{
return _src;
}
public int getTokenStart()
{
return _tokenStart;
}
public LightweightParserState cloneWithNewTokenStartAndTokenEnd(int newTokenStart, int newLength) {
LightweightParserState clone = new LightweightParserState();
clone.init(_src, _lineNum, _lineOffset, _tokenColumn, newTokenStart + _offsetShift, newTokenStart + newLength - 1 + _offsetShift);
return clone;
}
public int getTokenEnd()
{
return _tokenEnd;
}
}