|
Packit |
1c1d7e |
/* Generated By:JavaCC: Do not edit this line. CharStream.cc Version 6.0 */
|
|
Packit |
1c1d7e |
/* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
|
|
Packit |
1c1d7e |
#include "CharStream.h"
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
namespace {
|
|
Packit |
1c1d7e |
template <class T>
|
|
Packit |
1c1d7e |
void ArrayCopy(T* src, int src_offset, T* dest, int dest_offset, int len) {
|
|
Packit |
1c1d7e |
for (int i = 0; i < len; i++) {
|
|
Packit |
1c1d7e |
dest[dest_offset + i] = src[src_offset + i];
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
class StringReaderStream : public ReaderStream {
|
|
Packit |
1c1d7e |
public:
|
|
Packit |
1c1d7e |
StringReaderStream(const JAVACC_STRING_TYPE& str) : str_(str), cur_(0), max_(str.size()) {}
|
|
Packit |
1c1d7e |
virtual size_t read(JAVACC_CHAR_TYPE *bufptr, int offset, size_t len) {
|
|
Packit |
1c1d7e |
size_t count = str_.copy(bufptr + offset, len > max_ ? max_ : len, cur_);
|
|
Packit |
1c1d7e |
cur_ += count;
|
|
Packit |
1c1d7e |
max_ -= count;
|
|
Packit |
1c1d7e |
return count;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
virtual ~StringReaderStream() {}
|
|
Packit |
1c1d7e |
virtual bool endOfInput() {
|
|
Packit |
1c1d7e |
return max_ == 0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
private:
|
|
Packit |
1c1d7e |
const JAVACC_STRING_TYPE str_;
|
|
Packit |
1c1d7e |
size_t cur_;
|
|
Packit |
1c1d7e |
size_t max_;
|
|
Packit |
1c1d7e |
};
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
namespace vhdl {
|
|
Packit |
1c1d7e |
namespace parser {
|
|
Packit |
1c1d7e |
void CharStream::ReInit(const JAVACC_STRING_TYPE& str, int startline,
|
|
Packit |
1c1d7e |
int startcolumn, int buffersize) {
|
|
Packit |
1c1d7e |
StringReaderStream *stream = new StringReaderStream(str);
|
|
Packit |
1c1d7e |
ReInit(stream, startline, startcolumn, buffersize);
|
|
Packit |
1c1d7e |
deleteStream = true;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void CharStream::ReInit(ReaderStream *input_stream, int startline,
|
|
Packit |
1c1d7e |
int startcolumn, int buffersize) {
|
|
Packit |
1c1d7e |
if (deleteStream) {
|
|
Packit |
1c1d7e |
delete inputStream;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (buffer != NULL) {
|
|
Packit |
1c1d7e |
DeleteBuffers();
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
available = bufsize = buffersize;
|
|
Packit |
1c1d7e |
buffer = new JAVACC_CHAR_TYPE[buffersize];
|
|
Packit |
1c1d7e |
bufline = new int[buffersize];
|
|
Packit |
1c1d7e |
bufcolumn = new int[buffersize];
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
column = startcolumn - 1;
|
|
Packit |
1c1d7e |
inputStream = input_stream;
|
|
Packit |
1c1d7e |
line = startline;
|
|
Packit |
1c1d7e |
prevCharIsLF = prevCharIsCR = false;
|
|
Packit |
1c1d7e |
tokenBegin = inBuf = maxNextCharInd = 0;
|
|
Packit |
1c1d7e |
bufpos = -1;
|
|
Packit |
1c1d7e |
deleteStream = false;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void CharStream::DeleteBuffers() {
|
|
Packit |
1c1d7e |
delete[] buffer;
|
|
Packit |
1c1d7e |
delete[] bufline;
|
|
Packit |
1c1d7e |
delete[] bufcolumn;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void CharStream::adjustBeginLineColumn(int newLine, int newCol) {
|
|
Packit |
1c1d7e |
int start = tokenBegin;
|
|
Packit |
1c1d7e |
int len;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (bufpos >= tokenBegin) {
|
|
Packit |
1c1d7e |
len = bufpos - tokenBegin + inBuf + 1;
|
|
Packit |
1c1d7e |
} else {
|
|
Packit |
1c1d7e |
len = bufsize - tokenBegin + bufpos + 1 + inBuf;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
int i = 0, j = 0, k = 0;
|
|
Packit |
1c1d7e |
int nextColDiff = 0, columnDiff = 0;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
while (i < len && bufline[j = start % bufsize] ==
|
|
Packit |
1c1d7e |
bufline[k = (start + 1) % bufsize]) {
|
|
Packit |
1c1d7e |
bufline[j] = newLine;
|
|
Packit |
1c1d7e |
nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j];
|
|
Packit |
1c1d7e |
bufcolumn[j] = newCol + columnDiff;
|
|
Packit |
1c1d7e |
columnDiff = nextColDiff;
|
|
Packit |
1c1d7e |
i++;
|
|
Packit |
1c1d7e |
start++;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (i < len) {
|
|
Packit |
1c1d7e |
bufline[j] = newLine++;
|
|
Packit |
1c1d7e |
bufcolumn[j] = newCol + columnDiff;
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
while (i++ < len) {
|
|
Packit |
1c1d7e |
if (bufline[j = start % bufsize] != bufline[(start + 1) % bufsize])
|
|
Packit |
1c1d7e |
bufline[j] = newLine++;
|
|
Packit |
1c1d7e |
else
|
|
Packit |
1c1d7e |
bufline[j] = newLine;
|
|
Packit |
1c1d7e |
start++;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
line = bufline[j];
|
|
Packit |
1c1d7e |
column = bufcolumn[j];
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void CharStream::ExpandBuff(bool wrapAround) {
|
|
Packit |
1c1d7e |
JAVACC_CHAR_TYPE *newbuffer = new JAVACC_CHAR_TYPE[bufsize + 2048];
|
|
Packit |
1c1d7e |
int *newbufline = new int[bufsize + 2048];
|
|
Packit |
1c1d7e |
int *newbufcolumn = new int[bufsize + 2048];
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
if (wrapAround) {
|
|
Packit |
1c1d7e |
ArrayCopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
|
|
Packit |
1c1d7e |
ArrayCopy(buffer, 0, newbuffer, bufsize - tokenBegin, bufpos);
|
|
Packit |
1c1d7e |
ArrayCopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
|
|
Packit |
1c1d7e |
ArrayCopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos);
|
|
Packit |
1c1d7e |
ArrayCopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
|
|
Packit |
1c1d7e |
ArrayCopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos);
|
|
Packit |
1c1d7e |
bufpos += (bufsize - tokenBegin);
|
|
Packit |
1c1d7e |
} else {
|
|
Packit |
1c1d7e |
ArrayCopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
|
|
Packit |
1c1d7e |
ArrayCopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
|
|
Packit |
1c1d7e |
ArrayCopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
|
|
Packit |
1c1d7e |
bufpos -= tokenBegin;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
maxNextCharInd = bufpos;
|
|
Packit |
1c1d7e |
DeleteBuffers();
|
|
Packit |
1c1d7e |
buffer = newbuffer;
|
|
Packit |
1c1d7e |
bufline = newbufline;
|
|
Packit |
1c1d7e |
bufcolumn = newbufcolumn;
|
|
Packit |
1c1d7e |
bufsize += 2048;
|
|
Packit |
1c1d7e |
available = bufsize;
|
|
Packit |
1c1d7e |
tokenBegin = 0;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void CharStream::FillBuff() {
|
|
Packit |
1c1d7e |
if (maxNextCharInd == available) {
|
|
Packit |
1c1d7e |
if (available == bufsize) {
|
|
Packit |
1c1d7e |
if (tokenBegin > 2048) {
|
|
Packit |
1c1d7e |
bufpos = maxNextCharInd = 0;
|
|
Packit |
1c1d7e |
available = tokenBegin;
|
|
Packit |
1c1d7e |
} else if (tokenBegin < 0) {
|
|
Packit |
1c1d7e |
bufpos = maxNextCharInd = 0;
|
|
Packit |
1c1d7e |
} else {
|
|
Packit |
1c1d7e |
ExpandBuff(false);
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
} else if (available > tokenBegin) {
|
|
Packit |
1c1d7e |
available = bufsize;
|
|
Packit |
1c1d7e |
} else if ((tokenBegin - available) < 2048) {
|
|
Packit |
1c1d7e |
ExpandBuff(true);
|
|
Packit |
1c1d7e |
} else {
|
|
Packit |
1c1d7e |
available = tokenBegin;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
int i = inputStream->read(buffer, maxNextCharInd, available - maxNextCharInd);
|
|
Packit |
1c1d7e |
if (i > 0) {
|
|
Packit |
1c1d7e |
maxNextCharInd += i;
|
|
Packit |
1c1d7e |
} else {
|
|
Packit |
1c1d7e |
--bufpos;
|
|
Packit |
1c1d7e |
backup(0);
|
|
Packit |
1c1d7e |
if (tokenBegin == -1) {
|
|
Packit |
1c1d7e |
tokenBegin = bufpos;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
void CharStream::UpdateLineColumn(JAVACC_CHAR_TYPE c) {
|
|
Packit |
1c1d7e |
column++;
|
|
Packit |
1c1d7e |
if (prevCharIsLF) {
|
|
Packit |
1c1d7e |
prevCharIsLF = false;
|
|
Packit |
1c1d7e |
column = 1;
|
|
Packit |
1c1d7e |
line++;
|
|
Packit |
1c1d7e |
} else if (prevCharIsCR) {
|
|
Packit |
1c1d7e |
prevCharIsCR = false;
|
|
Packit |
1c1d7e |
if (c == '\n') {
|
|
Packit |
1c1d7e |
prevCharIsLF = true;
|
|
Packit |
1c1d7e |
} else {
|
|
Packit |
1c1d7e |
column = 1;
|
|
Packit |
1c1d7e |
line++;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
switch (c) {
|
|
Packit |
1c1d7e |
case '\r' :
|
|
Packit |
1c1d7e |
prevCharIsCR = true;
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case '\n' :
|
|
Packit |
1c1d7e |
prevCharIsLF = true;
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
case '\t' :
|
|
Packit |
1c1d7e |
column--;
|
|
Packit |
1c1d7e |
column += (tabSize - (column % tabSize));
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
default :
|
|
Packit |
1c1d7e |
break;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
bufline[bufpos] = line;
|
|
Packit |
1c1d7e |
bufcolumn[bufpos] = column;
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
}
|
|
Packit |
1c1d7e |
/* JavaCC - OriginalChecksum=e709b9ee1adf0fcb6b1c5e1641f10348 (do not edit this line) */
|