diff --git a/src/vm/vm.cpp b/src/vm/vm.cpp index f851892..9207467 100644 --- a/src/vm/vm.cpp +++ b/src/vm/vm.cpp @@ -195,6 +195,18 @@ namespace Tesses::CrossLang { { cse.back()->Push(gc,std::get(left) - std::get(right)); } + else if(std::holds_alternative(left) && std::holds_alternative(right)) + { + cse.back()->Push(gc, (int64_t)(std::get(left) - std::get(right))); + } + else if(std::holds_alternative(left) && std::holds_alternative(right)) + { + cse.back()->Push(gc, (int64_t)(std::get(left) - std::get(right))); + } + else if(std::holds_alternative(left) && std::holds_alternative(right)) + { + cse.back()->Push(gc, (int64_t)(std::get(left) - std::get(right))); + } else if(std::holds_alternative(left)) { auto obj = std::get(left).obj; @@ -582,6 +594,10 @@ namespace Tesses::CrossLang { { cse.back()->Push(gc,std::get(left) < std::get(right)); } + else if(std::holds_alternative(left) && std::holds_alternative(right)) + { + cse.back()->Push(gc,std::get(left) < std::get(right)); + } else if(std::holds_alternative(left) && std::holds_alternative(right)) { cse.back()->Push(gc,std::get(left) < std::get(right)); @@ -653,6 +669,10 @@ namespace Tesses::CrossLang { { cse.back()->Push(gc,std::get(left) > std::get(right)); } + else if(std::holds_alternative(left) && std::holds_alternative(right)) + { + cse.back()->Push(gc,std::get(left) > std::get(right)); + } else if(std::holds_alternative(left) && std::holds_alternative(right)) { cse.back()->Push(gc,std::get(left) > std::get(right)); @@ -719,7 +739,10 @@ namespace Tesses::CrossLang { { cse.back()->Push(gc,std::get(left) <= std::get(right)); } - + else if(std::holds_alternative(left) && std::holds_alternative(right)) + { + cse.back()->Push(gc,std::get(left) <= std::get(right)); + } else if(std::holds_alternative(left) && std::holds_alternative(right)) { cse.back()->Push(gc,std::get(left) <= std::get(right)); @@ -795,6 +818,10 @@ namespace Tesses::CrossLang { { cse.back()->Push(gc,std::get(left) >= std::get(right)); } + else if(std::holds_alternative(left) && std::holds_alternative(right)) + { + cse.back()->Push(gc,std::get(left) >= std::get(right)); + } else if(std::holds_alternative(left) && std::holds_alternative(right)) { cse.back()->Push(gc,std::get(left) >= std::get(right)); @@ -1307,8 +1334,18 @@ namespace Tesses::CrossLang { cse.back()->Push(gc,std::get(left) + std::get(right)); } - - + else if(std::holds_alternative(left) && std::holds_alternative(right)) + { + cse.back()->Push(gc,std::get(left) + std::get(right)); + } + else if(std::holds_alternative(left) && std::holds_alternative(right)) + { + cse.back()->Push(gc, (char)(std::get(left) + std::get(right))); + } + else if(std::holds_alternative(left) && std::holds_alternative(right)) + { + cse.back()->Push(gc, (char)(std::get(left) + std::get(right))); + } else if(std::holds_alternative(left) && std::holds_alternative(right)) { cse.back()->Push(gc,std::get(left) + std::get(right));