Remove THeapObjectHolder, std::nullptr_t from variant

This commit is contained in:
2026-09-10 07:21:04 -05:00
parent 4aab28411a
commit 175afbafeb
20 changed files with 169 additions and 186 deletions
+8 -8
View File
@@ -5,7 +5,7 @@ using namespace Tesses::Framework::Serialization::Json;
namespace Tesses::CrossLang {
static bool IsValidForJson(TObject v) {
if (std::holds_alternative<std::nullptr_t>(v))
if (IsNull(v))
return true;
if (std::holds_alternative<int64_t>(v))
@@ -20,10 +20,10 @@ static bool IsValidForJson(TObject v) {
if (std::holds_alternative<std::string>(v))
return true;
if (std::holds_alternative<THeapObjectHolder>(v)) {
auto res = std::get<THeapObjectHolder>(v);
auto ls = dynamic_cast<TList *>(res.obj);
auto dict = dynamic_cast<TDictionary *>(res.obj);
if (std::holds_alternative<THeapObject *>(v)) {
auto res = std::get<THeapObject *>(v);
auto ls = dynamic_cast<TList *>(res);
auto dict = dynamic_cast<TDictionary *>(res);
if (ls != nullptr)
return true;
if (dict != nullptr)
@@ -32,7 +32,7 @@ static bool IsValidForJson(TObject v) {
return false;
}
static JToken JsonSerialize(TObject v) {
if (std::holds_alternative<std::nullptr_t>(v))
if (IsNull(v))
return nullptr;
if (std::holds_alternative<int64_t>(v))
return std::get<int64_t>(v);
@@ -42,8 +42,8 @@ static JToken JsonSerialize(TObject v) {
return std::get<bool>(v);
if (std::holds_alternative<std::string>(v))
return std::get<std::string>(v);
if (std::holds_alternative<THeapObjectHolder>(v)) {
auto obj = std::get<THeapObjectHolder>(v).obj;
if (std::holds_alternative<THeapObject *>(v)) {
auto obj = std::get<THeapObject *>(v);
auto ls = dynamic_cast<TList *>(obj);
auto dict = dynamic_cast<TDictionary *>(obj);
+10 -19
View File
@@ -143,8 +143,8 @@ ffi_tmp_type_t FFI_ConvertTObjectToFFIType(TObject &arg, std::string t) {
return (ffi_tmp_type_t){
.v_ptr = (void *)std::get<std::string>(arg).c_str()};
}
} else if (std::holds_alternative<THeapObjectHolder>(arg)) {
auto obj = std::get<THeapObjectHolder>(arg).obj;
} else if (std::holds_alternative<THeapObject *>(arg)) {
auto obj = std::get<THeapObject *>(arg);
auto bA = dynamic_cast<TByteArray *>(obj);
auto nat = dynamic_cast<TNative *>(obj);
if (bA != nullptr) {
@@ -435,13 +435,7 @@ static TObject TypeIsClass(GCList &ls, std::vector<TObject> args) {
static TObject TypeIsDefined(GCList &ls, std::vector<TObject> args) {
if (args.empty())
return nullptr;
return (!std::holds_alternative<std::nullptr_t>(args[0]) &&
!std::holds_alternative<Undefined>(args[0]));
}
static TObject TypeIsHeap(GCList &ls, std::vector<TObject> args) {
if (args.empty())
return nullptr;
return std::holds_alternative<THeapObjectHolder>(args[0]);
return (!IsNull(args[0]) && !std::holds_alternative<Undefined>(args[0]));
}
static TObject TypeIsNumber(GCList &ls, std::vector<TObject> args) {
if (args.empty())
@@ -668,7 +662,7 @@ std::string GetObjectTypeString(TObject _obj) {
return "Regex";
if (std::holds_alternative<Undefined>(_obj))
return "Undefined";
if (std::holds_alternative<std::nullptr_t>(_obj))
if (IsNull(_obj))
return "Null";
if (std::holds_alternative<bool>(_obj))
return "Boolean";
@@ -820,8 +814,8 @@ std::string GetObjectTypeString(TObject _obj) {
}
return "VFS";
}
if (std::holds_alternative<THeapObjectHolder>(_obj)) {
auto obj = std::get<THeapObjectHolder>(_obj).obj;
if (std::holds_alternative<THeapObject *>(_obj)) {
auto obj = std::get<THeapObject *>(_obj);
auto dict = dynamic_cast<TDictionary *>(obj);
auto dynDict = dynamic_cast<TDynamicDictionary *>(obj);
@@ -1380,10 +1374,7 @@ void TStd::RegisterRoot(std::shared_ptr<GC> gc, TRootEnvironment *env) {
env->DeclareFunction(gc, "TypeIsDefined",
"Get whether object is not null or undefined",
{"object"}, TypeIsDefined);
env->DeclareFunction(
gc, "TypeIsHeap",
"Get whether object is susceptible to garbage collection", {"object"},
TypeIsHeap);
env->DeclareFunction(gc, "TypeIsNumber", "Get whether object is a number",
{"object"}, TypeIsNumber);
env->DeclareFunction(gc, "TypeIsLong",
@@ -1455,9 +1446,9 @@ void TStd::RegisterRoot(std::shared_ptr<GC> gc, TRootEnvironment *env) {
gc, "Thread", "Create thread", {"callback"},
[](GCList &ls, std::vector<TObject> args) -> TObject {
if (args.size() == 1 &&
std::holds_alternative<THeapObjectHolder>(args[0])) {
auto cb = dynamic_cast<TCallable *>(
std::get<THeapObjectHolder>(args[0]).obj);
std::holds_alternative<THeapObject *>(args[0])) {
auto cb =
dynamic_cast<TCallable *>(std::get<THeapObject *>(args[0]));
if (cb != nullptr) {
return CreateThread(ls, cb, false);
}