Blame vhdlparser/CharStream.cc

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) */