diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/wasm-binary.h | 50 |
1 files changed, 43 insertions, 7 deletions
diff --git a/src/wasm-binary.h b/src/wasm-binary.h index 70af27856..35f84c6b4 100644 --- a/src/wasm-binary.h +++ b/src/wasm-binary.h @@ -48,7 +48,7 @@ struct LEB { bool hasMore(T temp, MiniT byte) { // for signed, we must ensure the last bit has the right sign, as it will zero extend - return std::is_signed<T>::value ? (temp != 0 && int32_t(temp) != -1) || (value >= 0 && (byte & 64)) || (value < 0 && !(byte & 64)): (temp != 0); + return std::is_signed<T>::value ? (temp != 0 && temp != -1) || (value >= 0 && (byte & 64)) || (value < 0 && !(byte & 64)) : (temp != 0); } void write(std::vector<uint8_t>* out) { @@ -165,23 +165,59 @@ public: return *this; } BufferWithRandomAccess& operator<<(U32LEB x) { - if (debug) std::cerr << "writeU32LEB: " << x.value << " (at " << size() << ")" << std::endl; + size_t before = -1; + if (debug) { + before = size(); + std::cerr << "writeU32LEB: " << x.value << " (at " << before << ")" << std::endl; + } x.write(this); + if (debug) { + for (size_t i = before; i < size(); i++) { + std::cerr << " " << (int)at(i) << " (at " << i << ")\n"; + } + } return *this; } BufferWithRandomAccess& operator<<(U64LEB x) { - if (debug) std::cerr << "writeU64LEB: " << x.value << " (at " << size() << ")" << std::endl; + size_t before = -1; + if (debug) { + before = size(); + std::cerr << "writeU64LEB: " << x.value << " (at " << before << ")" << std::endl; + } x.write(this); + if (debug) { + for (size_t i = before; i < size(); i++) { + std::cerr << " " << (int)at(i) << " (at " << i << ")\n"; + } + } return *this; } BufferWithRandomAccess& operator<<(S32LEB x) { - if (debug) std::cerr << "writeS32LEB: " << x.value << " (at " << size() << ")" << std::endl; + size_t before = -1; + if (debug) { + before = size(); + std::cerr << "writeS32LEB: " << x.value << " (at " << before << ")" << std::endl; + } x.write(this); + if (debug) { + for (size_t i = before; i < size(); i++) { + std::cerr << " " << (int)at(i) << " (at " << i << ")\n"; + } + } return *this; } BufferWithRandomAccess& operator<<(S64LEB x) { - if (debug) std::cerr << "writeS64LEB: " << x.value << " (at " << size() << ")" << std::endl; + size_t before = -1; + if (debug) { + before = size(); + std::cerr << "writeS64LEB: " << x.value << " (at " << before << ")" << std::endl; + } x.write(this); + if (debug) { + for (size_t i = before; i < size(); i++) { + std::cerr << " " << (int)at(i) << " (at " << i << ")\n"; + } + } return *this; } @@ -1420,7 +1456,7 @@ public: ret.read([&]() { return (int8_t)getInt8(); }); - if (debug) std::cerr << "getU32LEB: " << ret.value << " ==>" << std::endl; + if (debug) std::cerr << "getS32LEB: " << ret.value << " ==>" << std::endl; return ret.value; } int64_t getS64LEB() { @@ -1429,7 +1465,7 @@ public: ret.read([&]() { return (int8_t)getInt8(); }); - if (debug) std::cerr << "getU64LEB: " << ret.value << " ==>" << std::endl; + if (debug) std::cerr << "getS64LEB: " << ret.value << " ==>" << std::endl; return ret.value; } WasmType getWasmType() { |