diff options
author | myrtle <gatecat@ds0.me> | 2023-02-18 16:37:53 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-18 16:37:53 +0100 |
commit | d20a5e9001f46262bf0cef220f1a6943946e421d (patch) | |
tree | 6ec76a7b9146145cd9117d7b6a4e244487d77d79 /icebram | |
parent | 5991092f5179b9bccdb7fa8d46a0bc0245b0996f (diff) | |
parent | dd2dce84c4e3d895671a559a7ccb8b96e01587e8 (diff) | |
download | icestorm-master.tar.gz icestorm-master.tar.bz2 icestorm-master.zip |
icebram: fix WebAssembly compatibility
Diffstat (limited to 'icebram')
-rw-r--r-- | icebram/icebram.cc | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/icebram/icebram.cc b/icebram/icebram.cc index 86ca11e..edebb9f 100644 --- a/icebram/icebram.cc +++ b/icebram/icebram.cc @@ -19,9 +19,9 @@ #include <stdio.h> #include <stdint.h> #include <stdlib.h> +#include <limits.h> #include <unistd.h> #include <sys/time.h> -#include <bits/stdc++.h> #include <cstring> #include <fstream> @@ -67,7 +67,7 @@ private: size_t m_word_size; std::vector<bool> parse_digits(std::vector<int> &digits) const; - void parse_line(std::string &line); + bool parse_line(std::string &line); public: HexFile(const char *filename, bool pad_words); virtual ~HexFile() { }; @@ -87,17 +87,15 @@ HexFile::HexFile(const char *filename, bool pad_words=false) if (!stream.is_open()) { fprintf(stderr, "Failed to open file %s\n", filename); - throw std::runtime_error("Unable to open input file"); + exit(1); } // Parse file std::string line; for (int i=1; std::getline(stream, line); i++) - try { - this->parse_line(line); - } catch (std::exception &e) { + if (!this->parse_line(line)) { fprintf(stderr, "Can't parse line %d of %s: %s\n", i, filename, line.c_str()); - throw std::runtime_error("Invalid input file"); + exit(1); } // Check word size @@ -107,7 +105,7 @@ HexFile::HexFile(const char *filename, bool pad_words=false) { if ((w.size() != this->m_word_size) && !pad_words) { fprintf(stderr, "Inconsistent word sizes in %s\n", filename); - throw std::runtime_error("Invalid input file"); + exit(1); } if (w.size() > this->m_word_size) this->m_word_size = w.size(); @@ -129,7 +127,7 @@ HexFile::parse_digits(std::vector<int> &digits) const return line_data; } -void +bool HexFile::parse_line(std::string &line) { std::vector<int> digits; @@ -152,12 +150,14 @@ HexFile::parse_line(std::string &line) digits.clear(); } } else { - throw std::runtime_error("Invalid char"); + return false; } } if (digits.size()) this->m_data.push_back(this->parse_digits(digits)); + + return true; } void @@ -197,7 +197,7 @@ HexFile::generate_pattern(HexFile &to) const if (pattern_from.size() == 256) { if (pattern.count(pattern_from)) { fprintf(stderr, "Conflicting from pattern for bit slice from_hexfile[%d:%d][%d]!\n", j, j-255, i); - throw std::runtime_error("Non-unique source pattern"); + exit(1); } pattern[pattern_from] = std::make_pair(pattern_to, 0); pattern_from.clear(), pattern_to.clear(); @@ -283,8 +283,10 @@ EBRData::load_data() digit = 10 + c - 'a'; else if ('A' <= c && c <= 'F') digit = 10 + c - 'A'; - else - throw std::runtime_error("Invalid char"); + else { + fprintf(stderr, "Invalid char in BRAM data\n"); + exit(1); + } idx -= 4; |