diff options
author | Alon Zakai <alonzakai@gmail.com> | 2015-11-05 10:42:47 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2015-11-05 10:42:47 -0800 |
commit | 9c5850f24085ac5843a799692d5099c8af98def7 (patch) | |
tree | 22248bd6a84978ee3df9a459ce47e4ca3fe0c9ac | |
parent | d16e8900cb98af97775e406c25d4a8b0c8c86039 (diff) | |
download | binaryen-9c5850f24085ac5843a799692d5099c8af98def7.tar.gz binaryen-9c5850f24085ac5843a799692d5099c8af98def7.tar.bz2 binaryen-9c5850f24085ac5843a799692d5099c8af98def7.zip |
conversion and parsing fixes
-rw-r--r-- | src/wasm-interpreter.h | 2 | ||||
-rw-r--r-- | src/wasm-s-parser.h | 10 |
2 files changed, 8 insertions, 4 deletions
diff --git a/src/wasm-interpreter.h b/src/wasm-interpreter.h index 5d9bf89b0..b93832d03 100644 --- a/src/wasm-interpreter.h +++ b/src/wasm-interpreter.h @@ -368,7 +368,7 @@ public: return Flow(Literal(int32_t(val))); } else { int64_t converted = val; - if ((val > 0 && converted <= 0) || val < (double)LLONG_MIN) instance.externalInterface->trap(); + if ((val >= 1 && converted <= 0) || val < (double)LLONG_MIN) instance.externalInterface->trap(); return Flow(Literal(converted)); } } diff --git a/src/wasm-s-parser.h b/src/wasm-s-parser.h index df0427e08..4bddf7e05 100644 --- a/src/wasm-s-parser.h +++ b/src/wasm-s-parser.h @@ -535,9 +535,11 @@ private: } } const char *str = s[1]->c_str(); - std::istringstream istr(str); + size_t size; switch (type) { case i32: { + const char *str = s[1]->c_str(); + std::istringstream istr(str); int32_t temp; if (str[0] == '0' && str[1] == 'x') { uint32_t temp2; @@ -550,6 +552,8 @@ private: break; } case i64: { + const char *str = s[1]->c_str(); + std::istringstream istr(str); int64_t temp; if (str[0] == '0' && str[1] == 'x') { uint64_t temp2; @@ -561,8 +565,8 @@ private: ret->value.i64 = temp; break; } - case f32: istr >> ret->value.f32; break; - case f64: istr >> ret->value.f64; break; + case f32: ret->value.f32 = std::stof(str, &size); break; + case f64: ret->value.f64 = std::stod(str, &size); break; default: abort(); } return ret; |