Add markedtobject

This commit is contained in:
2025-04-14 14:03:05 -05:00
parent e73c35964c
commit c831174e18
12 changed files with 88 additions and 21 deletions

View File

@ -118,6 +118,7 @@ src/vm/gclist.cpp
src/vm/vm.cpp
src/bitconverter.cpp
src/archive.cpp
src/markedtobject.cpp
)
if(CROSSLANG_ENABLE_PLATFORM_FOLDERS)

View File

@ -1571,4 +1571,20 @@ class GC {
void LoadPlugin(GC* gc, TRootEnvironment* env, Tesses::Framework::Filesystem::VFSPath sharedObjectPath);
std::string Json_Encode(TObject o,bool indent=false);
TObject Json_Decode(GCList ls,std::string str);
//DO NOT USE DIRECTLY
class SharedPtrTObject {
GCList* ls;
TObject o;
public:
SharedPtrTObject(GC* gc, TObject o);
TObject& GetObject();
GC* GetGC();
~SharedPtrTObject();
};
using MarkedTObject = std::shared_ptr<SharedPtrTObject>;
MarkedTObject CreateMarkedTObject(GC* gc, TObject o);
MarkedTObject CreateMarkedTObject(GC& gc, TObject o);
MarkedTObject CreateMarkedTObject(GCList* gc, TObject o);
MarkedTObject CreateMarkedTObject(GCList& gc, TObject o);
};

View File

@ -53,8 +53,7 @@ int main(int argc, char** argv)
Tesses::Framework::Filesystem::VFSPath dir = sago::getConfigHome();
dir = dir / "Tesses" / "CrossLang";
Tesses::Framework::Filesystem::VFSPath dir = GetCrossLangConfigDir();
Tesses::Framework::Filesystem::VFSPath filename = dir / "Shell" / "Shell.crvm";

40
src/markedtobject.cpp Normal file
View File

@ -0,0 +1,40 @@
#include <CrossLang.hpp>
namespace Tesses::CrossLang
{
SharedPtrTObject::SharedPtrTObject(GC* gc, TObject o)
{
this->ls = new GCList(gc);
this->ls->Add(o);
this->o = o;
}
TObject& SharedPtrTObject::GetObject()
{
return this->o;
}
SharedPtrTObject::~SharedPtrTObject()
{
if(this->ls)
delete this->ls;
}
GC* SharedPtrTObject::GetGC()
{
return this->ls->GetGC();
}
MarkedTObject CreateMarkedTObject(GC* gc, TObject o)
{
return std::make_shared<SharedPtrTObject>(gc,o);
}
MarkedTObject CreateMarkedTObject(GC& gc, TObject o)
{
return CreateMarkedTObject(&gc,o);
}
MarkedTObject CreateMarkedTObject(GCList* gc, TObject o)
{
return CreateMarkedTObject(gc->GetGC(),o);
}
MarkedTObject CreateMarkedTObject(GCList& gc, TObject o)
{
return CreateMarkedTObject(gc.GetGC(),o);
}
}

View File

@ -2,7 +2,7 @@
#include "CrossLang.hpp"
#include <iostream>
#if defined(GEKKO)
#if defined(GEKKO) || defined(__SWITCH__)
#undef CROSSLANG_ENABLE_TERMIOS
#endif

View File

@ -1,4 +1,5 @@
#include "CrossLang.hpp"
#include <TessesFramework/TessesFrameworkFeatures.h>
#if defined(TESSESFRAMEWORK_ENABLE_MBED)
#include <iostream>

View File

@ -13,7 +13,16 @@ namespace Tesses::CrossLang
#else
static char EnvPathSeperator=':';
#endif
static std::string GetHomeFolder()
{
#if defined(CROSSLANG_ENABLE_PLATFORM_FOLDERS)
return sago::getHomeDir();
#elif defined(__EMSCRIPTEN__)
return "/home/web_user";
#else
return "/CrossLangProfile";
#endif
}
Tesses::Framework::Filesystem::VFSPath GetCrossLangConfigDir()
{
Tesses::Framework::Filesystem::VFSPath p;
@ -58,16 +67,7 @@ namespace Tesses::CrossLang
#endif
}
static std::string GetHomeFolder()
{
#if defined(CROSSLANG_ENABLE_PLATFORM_FOLDERS)
return sago::getHomeDir();
#elif defined(__EMSCRIPTEN__)
return "/home/web_user";
#else
return "/CrossLangProfile";
#endif
}
static TObject Env_getCrossLangConfig(GCList& ls, std::vector<TObject> args)
{
return GetCrossLangConfigDir();

View File

@ -1,6 +1,6 @@
#include "CrossLang.hpp"
#if defined(GEKKO)
#if defined(GEKKO) || defined(__SWITCH__)
#undef CROSSLANG_ENABLE_PROCESS
#endif

View File

@ -8,8 +8,13 @@ namespace Tesses::CrossLang
{
static int64_t ToLocalTime(int64_t local)
{
#if defined(__SWITCH__)
local -= _timezone;
if(_daylight)
#else
local -= timezone;
if(daylight)
#endif
{
auto epoch = date::sys_days{date::January/1/1970};
epoch += date::days(local/86400);
@ -163,8 +168,13 @@ namespace Tesses::CrossLang
dict->DeclareFunction(gc, "Sleep","Sleep for a specified amount of milliseconds (multiply seconds by 1000 to get milliseconds)", {"ms"},Time_Sleep);
gc->BarrierBegin();
#if defined(__SWITCH__)
dict->SetValue("Zone", (int64_t)-(_timezone));
dict->SetValue("SupportsDaylightSavings",(int64_t)_daylight);
#else
dict->SetValue("Zone", (int64_t)-(timezone));
dict->SetValue("SupportsDaylightSavings",(int64_t)daylight);
#endif
env->DeclareVariable("Time", dict);
gc->BarrierEnd();

View File

@ -21,7 +21,7 @@
** c9c2ab54ba1f5f46360f1b4f35d849cd3f08.
*/
#if defined(GEKKO)
#if defined(GEKKO) || defined(__SWITCH__)
//-DSQLITE_OMIT_LOAD_EXTENSION -DSQLITE_OMIT_WAL -DSQLITE_THREADSAFE=0
#define SQLITE_OMIT_LOAD_EXTENSION
#define SQLITE_OMIT_WAL

View File

@ -115,7 +115,7 @@
/*removed tests from https://www.sqlite.org/src/doc/trunk/src/test_demovfs.c*/
#if defined(GEKKO)
#if defined(GEKKO) || defined(__SWITCH__)
#include "sqlite3.h"

View File

@ -8,7 +8,7 @@
extern "C" {
#include "../sqlite/sqlite3.h"
}
#if defined(GEKKO)
#if defined(GEKKO) || defined(__SWITCH__)
extern "C" {
sqlite3_vfs *sqlite3_demovfs();
}
@ -31,7 +31,7 @@ namespace Tesses::CrossLang
tzset();
#if defined(CROSSLANG_ENABLE_SQLITE)
sqlite3_initialize();
#if defined(GEKKO)
#if defined(GEKKO) || defined(__SWITCH__)
sqlite3_vfs_register(sqlite3_demovfs(),1);
#endif
#endif