From fd284edbe112397b88e085db98bb552d2be7d4a9 Mon Sep 17 00:00:00 2001 From: ZhuangYumin Date: Fri, 10 Nov 2023 10:41:23 +0800 Subject: [PATCH] fix: unexpected int happend --- src/utils.cpp | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/utils.cpp b/src/utils.cpp index 5cfc9d5..4663217 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -3,8 +3,6 @@ inline ZYM::int2048 Any2Int(const std::any &value) { if (auto ptr = std::any_cast(&value)) return *ptr; - else if (auto ptr = std::any_cast(&value)) - return std::move(ZYM::int2048(*ptr)); else if (auto ptr = std::any_cast(&value)) { std::stringstream buf; buf << std::fixed << std::setprecision(0) << *ptr; @@ -176,7 +174,7 @@ std::any Add(std::any a, std::any b) { 2) return (*ptr_a_string) + (*ptr_b_string); if ((ptr_a_bool != nullptr) && (ptr_b_bool != nullptr)) - return (*ptr_a_bool) + (*ptr_b_bool); + return ZYM::int2048(int(*ptr_a_bool) + int(*ptr_b_bool)); else if ((ptr_a_int2048 != nullptr) && (ptr_b_int2048 != nullptr)) return (*ptr_a_int2048) + (*ptr_b_int2048); else if ((ptr_a_float != nullptr) && (ptr_b_float != nullptr)) @@ -195,7 +193,7 @@ std::any Sub(std::any a, std::any b) { double *ptr_a_float = std::any_cast(&a); double *ptr_b_float = std::any_cast(&b); if ((ptr_a_bool != nullptr) && (ptr_b_bool != nullptr)) - return (*ptr_a_bool) - (*ptr_b_bool); + return ZYM::int2048(int(*ptr_a_bool) - int(*ptr_b_bool)); else if ((ptr_a_int2048 != nullptr) && (ptr_b_int2048 != nullptr)) return (*ptr_a_int2048) - (*ptr_b_int2048); else if ((ptr_a_float != nullptr) && (ptr_b_float != nullptr)) @@ -245,7 +243,7 @@ std::any Mul(std::any a, std::any b) { } } if ((ptr_a_bool != nullptr) && (ptr_b_bool != nullptr)) - return (*ptr_a_bool) * (*ptr_b_bool); + return ZYM::int2048(int(*ptr_a_bool) * int(*ptr_b_bool)); else if ((ptr_a_int2048 != nullptr) && (ptr_b_int2048 != nullptr)) return (*ptr_a_int2048) * (*ptr_b_int2048); else if ((ptr_a_float != nullptr) && (ptr_b_float != nullptr)) @@ -294,7 +292,7 @@ std::any Divv(std::any a, std::any b) { } else if ((ptr_a_bool != nullptr) && (ptr_b_bool != nullptr)) { if ((*ptr_b_bool) == 0) throw InterpretException("Divv: divided by zero", 47); - return ZYM::int2048((*ptr_a_bool) / (*ptr_b_bool)); + return ZYM::int2048(int(*ptr_a_bool) / int(*ptr_b_bool)); } else throw FatalError("Divv: Type Error", 48); } @@ -321,7 +319,7 @@ std::any Mod(std::any a, std::any b) { } else if ((ptr_a_bool != nullptr) && (ptr_b_bool != nullptr)) { if ((*ptr_b_bool) == 0) throw InterpretException("Mod: divided by zero", 51); - return ZYM::int2048((*ptr_a_bool) % (*ptr_b_bool)); + return ZYM::int2048(int(*ptr_a_bool) % int(*ptr_b_bool)); } else throw FatalError("Mod: Type Error", 52); }