USING_YOSYS_NAMESPACE
#define YY_INPUT(buf,result,max_size) \
- result = ILANG_FRONTEND::lexin->readsome(buf, max_size);
+ result = readsome(*ILANG_FRONTEND::lexin, buf, max_size);
%}
return TOK_ID;
#define YY_INPUT(buf,result,max_size) \
- result = lexin->readsome(buf, max_size);
+ result = readsome(*lexin, buf, max_size);
%}
auto it = input_buffer.begin();
input_buffer.insert(it, "`file_push " + filename + "\n");
- while ((rc = f.readsome(buffer, sizeof(buffer)-1)) > 0) {
+ while ((rc = readsome(f, buffer, sizeof(buffer)-1)) > 0) {
buffer[rc] = 0;
input_buffer.insert(it, buffer);
}
return false;
}
+int readsome(std::istream &f, char *s, int n)
+{
+ int rc = f.readsome(s, n);
+
+ // win32 sometimes returns 0 on a non-empty stream..
+ if (rc == 0) {
+ int c = f.get();
+ if (c != EOF) {
+ *s = c;
+ rc = 1;
+ }
+ }
+
+ return rc;
+}
+
int GetSize(RTLIL::Wire *wire)
{
return wire->width;
std::string vstringf(const char *fmt, va_list ap);
std::string next_token(std::string &text, const char *sep);
bool patmatch(const char *pattern, const char *string);
+int readsome(std::istream &f, char *s, int n);
template<typename T> int GetSize(const T &obj) { return obj.size(); }
int GetSize(RTLIL::Wire *wire);
char buffer[64 * 1024];
size_t bytes;
- while (0 < (bytes = f->readsome(buffer, sizeof(buffer))))
+ while (0 < (bytes = readsome(*f, buffer, sizeof(buffer))))
fwrite(buffer, bytes, 1, of);
fclose(of);