Blame vhdlparser/CharStream.cc

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