fix: Add more support for None

This commit is contained in:
2023-11-10 09:38:47 +08:00
parent 3d37bd1350
commit 55f870bf04

View File

@ -156,6 +156,8 @@ int ConverToSameArithType(std::any &a, std::any &b,
}
std::any Add(std::any a, std::any b) {
if (std::any_cast<NoneType>(&a)) a = (bool)false;
if (std::any_cast<NoneType>(&b)) b = (bool)false;
int status = ConverToSameArithType(a, b, true);
bool *ptr_a_bool = std::any_cast<bool>(&a);
bool *ptr_b_bool = std::any_cast<bool>(&b);
@ -183,6 +185,8 @@ std::any Add(std::any a, std::any b) {
throw FatalError("Add: Type Error", 38);
}
std::any Sub(std::any a, std::any b) {
if (std::any_cast<NoneType>(&a)) a = (bool)false;
if (std::any_cast<NoneType>(&b)) b = (bool)false;
ConverToSameArithType(a, b);
bool *ptr_a_bool = std::any_cast<bool>(&a);
bool *ptr_b_bool = std::any_cast<bool>(&b);
@ -201,6 +205,8 @@ std::any Sub(std::any a, std::any b) {
return a;
}
std::any Mul(std::any a, std::any b) {
if (std::any_cast<NoneType>(&a)) a = (bool)false;
if (std::any_cast<NoneType>(&b)) b = (bool)false;
int status = ConverToSameArithType(a, b, true);
bool *ptr_a_bool = std::any_cast<bool>(&a);
bool *ptr_b_bool = std::any_cast<bool>(&b);
@ -248,6 +254,8 @@ std::any Mul(std::any a, std::any b) {
throw FatalError("Mul: Type Error", 42);
}
std::any Div(std::any a, std::any b) {
if (std::any_cast<NoneType>(&a)) a = (bool)false;
if (std::any_cast<NoneType>(&b)) b = (bool)false;
bool *ptr_a_bool = std::any_cast<bool>(&a);
bool *ptr_b_bool = std::any_cast<bool>(&b);
ZYM::int2048 *ptr_a_int2048 = std::any_cast<ZYM::int2048>(&a);
@ -266,6 +274,8 @@ std::any Div(std::any a, std::any b) {
return a;
}
std::any Divv(std::any a, std::any b) {
if (std::any_cast<NoneType>(&a)) a = (bool)false;
if (std::any_cast<NoneType>(&b)) b = (bool)false;
ConverToSameArithType(a, b);
bool *ptr_a_bool = std::any_cast<bool>(&a);
bool *ptr_b_bool = std::any_cast<bool>(&b);
@ -289,6 +299,8 @@ std::any Divv(std::any a, std::any b) {
throw FatalError("Divv: Type Error", 48);
}
std::any Mod(std::any a, std::any b) {
if (std::any_cast<NoneType>(&a)) a = (bool)false;
if (std::any_cast<NoneType>(&b)) b = (bool)false;
ConverToSameArithType(a, b);
bool *ptr_a_bool = std::any_cast<bool>(&a);
bool *ptr_b_bool = std::any_cast<bool>(&b);
@ -338,6 +350,7 @@ std::any &SelfMod(std::any &a, std::any b) {
return a;
}
std::any Neg(std::any a) {
if (std::any_cast<NoneType>(&a)) a = (bool)false;
bool *ptr_a_bool = std::any_cast<bool>(&a);
ZYM::int2048 *ptr_a_int2048 = std::any_cast<ZYM::int2048>(&a);
double *ptr_a_float = std::any_cast<double>(&a);