diff options
author | Alon Zakai <alonzakai@gmail.com> | 2015-11-04 20:46:17 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2015-11-04 20:46:17 -0800 |
commit | 8bc2c03d245df4eab03f6545d55a9f2d34c261a3 (patch) | |
tree | 799ee4d3a7524247e614eee01108f67bb24a1da5 /src/wasm-s-parser.h | |
parent | 10d59ea332a69971a0284ae08379672eb0fb8477 (diff) | |
download | binaryen-8bc2c03d245df4eab03f6545d55a9f2d34c261a3.tar.gz binaryen-8bc2c03d245df4eab03f6545d55a9f2d34c261a3.tar.bz2 binaryen-8bc2c03d245df4eab03f6545d55a9f2d34c261a3.zip |
fix hex parsing
Diffstat (limited to 'src/wasm-s-parser.h')
-rw-r--r-- | src/wasm-s-parser.h | 31 |
1 files changed, 26 insertions, 5 deletions
diff --git a/src/wasm-s-parser.h b/src/wasm-s-parser.h index 93a650ca5..e35f081c4 100644 --- a/src/wasm-s-parser.h +++ b/src/wasm-s-parser.h @@ -3,6 +3,8 @@ // Parses WebAssembly code in S-Expression format, as in .wast files. // +#include <sstream> + #include "wasm.h" #include "mixed_arena.h" @@ -491,12 +493,31 @@ private: Expression* makeConst(Element& s, WasmType type) { auto ret = allocator.alloc<Const>(); ret->type = ret->value.type = type; - const char *value = s[1]->c_str(); + const char *str = s[1]->c_str(); + std::istringstream istr(str); switch (type) { - case i32: ret->value.i32 = atoi(value); break; - case i64: ret->value.i64 = atol(value); break; - case f32: ret->value.f32 = atof(value); break; - case f64: ret->value.f64 = atof(value); break; + case i32: { + int32_t temp; + if (str[0] == '0' && str[1] == 'x') { + istr >> std::hex >> temp; + } else { + istr >> temp; + } + ret->value.i32 = temp; + break; + } + case i64: { + int64_t temp; + if (str[0] == '0' && str[1] == 'x') { + istr >> std::hex >> temp; + } else { + istr >> temp; + } + ret->value.i64 = temp; + break; + } + case f32: istr >> ret->value.f32; break; + case f64: istr >> ret->value.f64; break; default: abort(); } return ret; |