diff options
author | Alon Zakai <alonzakai@gmail.com> | 2015-11-04 21:51:18 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2015-11-04 21:51:18 -0800 |
commit | 04388516db30df7184bd4eb3ef36498af9b9d9c7 (patch) | |
tree | 5bb260cd2d0f6024aa87a9fa959e0e7aaa42a03d /src | |
parent | 69f0f91c03f593ea6b5c30515afdf33d5c7827fb (diff) | |
download | binaryen-04388516db30df7184bd4eb3ef36498af9b9d9c7.tar.gz binaryen-04388516db30df7184bd4eb3ef36498af9b9d9c7.tar.bz2 binaryen-04388516db30df7184bd4eb3ef36498af9b9d9c7.zip |
nan
Diffstat (limited to 'src')
-rw-r--r-- | src/wasm-interpreter.h | 1 | ||||
-rw-r--r-- | src/wasm-s-parser.h | 11 |
2 files changed, 11 insertions, 1 deletions
diff --git a/src/wasm-interpreter.h b/src/wasm-interpreter.h index a22a631b1..f72dc524e 100644 --- a/src/wasm-interpreter.h +++ b/src/wasm-interpreter.h @@ -361,6 +361,7 @@ public: case WrapInt64: return Flow(Literal(int32_t(value.geti64()))); case TruncSFloat32: { float val = value.getf32(); + if (isnan(val)) instance.externalInterface->trap(); if (val > (double)INT_MAX || val < (double)INT_MIN) instance.externalInterface->trap(); return Flow(Literal(int32_t(val))); } diff --git a/src/wasm-s-parser.h b/src/wasm-s-parser.h index 26abdec8e..81c0e73b4 100644 --- a/src/wasm-s-parser.h +++ b/src/wasm-s-parser.h @@ -33,7 +33,8 @@ IString MODULE("module"), CALL_IMPORT("call_import"), CALL_INDIRECT("call_indirect"), INFINITY_("infinity"), - NEG_INFINITY("-infinity"); + NEG_INFINITY("-infinity"), + NAN_("nan"); // // An element in an S-Expression: a list or a string @@ -517,6 +518,14 @@ private: } return ret; } + if (s[1]->str() == NAN_) { + switch (type) { + case f32: ret->value.f32 = std::nan(""); break; + case f64: ret->value.f64 = std::nan(""); break; + default: abort(); + } + return ret; + } } const char *str = s[1]->c_str(); std::istringstream istr(str); |