summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2015-11-05 10:42:47 -0800
committerAlon Zakai <alonzakai@gmail.com>2015-11-05 10:42:47 -0800
commit9c5850f24085ac5843a799692d5099c8af98def7 (patch)
tree22248bd6a84978ee3df9a459ce47e4ca3fe0c9ac
parentd16e8900cb98af97775e406c25d4a8b0c8c86039 (diff)
downloadbinaryen-9c5850f24085ac5843a799692d5099c8af98def7.tar.gz
binaryen-9c5850f24085ac5843a799692d5099c8af98def7.tar.bz2
binaryen-9c5850f24085ac5843a799692d5099c8af98def7.zip
conversion and parsing fixes
-rw-r--r--src/wasm-interpreter.h2
-rw-r--r--src/wasm-s-parser.h10
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;