fix on macos
This commit is contained in:
@ -16,7 +16,6 @@
|
||||
#include <TessesFramework/TessesFramework.hpp>
|
||||
#include <regex>
|
||||
#include <time.h>
|
||||
#include <cstdbool>
|
||||
#include <any>
|
||||
|
||||
/**
|
||||
|
||||
@ -59,6 +59,80 @@ namespace Tesses::CrossLang
|
||||
TDItem("Entries",EntriesToList(ls,f->classes.at(index).entry))
|
||||
});
|
||||
}
|
||||
static TObject Class_CreateInstance(TRootEnvironment* env,GCList& ls, std::vector<TObject> args)
|
||||
{
|
||||
TList* args_ls;
|
||||
if(!GetArgumentHeap(args,1,args_ls)) return nullptr;
|
||||
TList* list;
|
||||
TClassObject* obj;
|
||||
std::string str;
|
||||
if(GetArgumentHeap(args,0,list))
|
||||
{
|
||||
std::vector<std::string> clsName;
|
||||
for(int64_t i = 0; i < list->Count(); i++)
|
||||
{
|
||||
auto o = list->Get(i);
|
||||
if(GetObject(o,str)) clsName.push_back(str);
|
||||
}
|
||||
for(auto& item : env->classes)
|
||||
{
|
||||
auto& f=item.first->classes.at(item.second);
|
||||
|
||||
if(f.name.size() != clsName.size()) continue;
|
||||
|
||||
bool found=true;
|
||||
for(size_t i = 0; i < f.name.size(); i++)
|
||||
if(f.name[i] != clsName[i])
|
||||
{
|
||||
found=false;
|
||||
break;
|
||||
}
|
||||
if(found)
|
||||
{
|
||||
return TClassObject::Create(ls,item.first,item.second,env,args_ls->items);
|
||||
}
|
||||
else
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else if(GetArgument(args,0,str))
|
||||
{
|
||||
std::vector<std::string> clsName=Tesses::Framework::Http::HttpUtils::SplitString(str,".");
|
||||
for(auto& item : env->classes)
|
||||
{
|
||||
auto& f=item.first->classes.at(item.second);
|
||||
|
||||
if(f.name.size() != clsName.size()) continue;
|
||||
|
||||
bool found=true;
|
||||
for(size_t i = 0; i < f.name.size(); i++)
|
||||
if(f.name[i] != clsName[i])
|
||||
{
|
||||
found=false;
|
||||
break;
|
||||
}
|
||||
if(found)
|
||||
{
|
||||
return TClassObject::Create(ls,item.first,item.second,env,args_ls->items);
|
||||
|
||||
}
|
||||
else
|
||||
continue;
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
static TObject Class_GetClassNames(TRootEnvironment* env,GCList& ls, std::vector<TObject> args)
|
||||
{
|
||||
TList* list = TList::Create(ls);
|
||||
ls.GetGC()->BarrierBegin();
|
||||
for(auto& item : env->classes)
|
||||
{
|
||||
list->Add(JoinPeriod(item.first->classes.at(item.second).name));
|
||||
}
|
||||
ls.GetGC()->BarrierEnd();
|
||||
return list;
|
||||
}
|
||||
static TObject Class_GetInfo(TRootEnvironment* env,GCList& ls, std::vector<TObject> args)
|
||||
{
|
||||
|
||||
@ -138,6 +212,28 @@ namespace Tesses::CrossLang
|
||||
ext->watch.push_back(env);
|
||||
|
||||
cls->SetValue("GetInfo",ext);
|
||||
|
||||
ext = TExternalMethod::Create(ls ,"Get the class names",{},[env](GCList& ls, std::vector<TObject> args)->TObject {
|
||||
return Class_GetClassNames(env,ls,args);
|
||||
});
|
||||
ext->watch.push_back(env);
|
||||
|
||||
cls->SetValue("GetClassNames",ext);
|
||||
ext = TExternalMethod::Create(ls ,"Create an instance of class",{"name","args"},[env](GCList& ls, std::vector<TObject> args)->TObject {
|
||||
return Class_CreateInstance(env,ls,args);
|
||||
});
|
||||
ext->watch.push_back(env);
|
||||
|
||||
cls->SetValue("CreateInstance",ext);
|
||||
cls->DeclareFunction(gc,"Name","Get class name via instance",{"instance"},[](GCList& ls, std::vector<TObject> args)->TObject {
|
||||
TClassObject* cls;
|
||||
if(GetArgumentHeap(args,0,cls))
|
||||
{
|
||||
return cls->name;
|
||||
}
|
||||
return "";
|
||||
});
|
||||
|
||||
gc->BarrierEnd();
|
||||
}
|
||||
}
|
||||
@ -81,7 +81,7 @@ namespace Tesses::CrossLang
|
||||
});
|
||||
|
||||
dict->DeclareFunction(ls.GetGC(),"getFinished","Get whether thread has finished",{},[th](GCList& _ls, std::vector<TObject> _args)-> TObject{
|
||||
return th->hasReturned;
|
||||
return (bool)(th->hasReturned==true);
|
||||
});
|
||||
|
||||
ls.GetGC()->BarrierEnd();
|
||||
|
||||
@ -5669,7 +5669,9 @@ namespace Tesses::CrossLang {
|
||||
cse.back()->Push(gc,callable->Call(ls,{value}));
|
||||
return false;
|
||||
}
|
||||
gc->BarrierBegin();
|
||||
cls->SetValue(cse.back()->callable->className,key,value);
|
||||
gc->BarrierEnd();
|
||||
cse.back()->Push(gc,value);
|
||||
return false;
|
||||
|
||||
@ -6277,12 +6279,26 @@ namespace Tesses::CrossLang {
|
||||
if(std::holds_alternative<THeapObjectHolder>(objhold) && std::holds_alternative<std::string>(k))
|
||||
{
|
||||
auto dict= dynamic_cast<TDictionary*>(std::get<THeapObjectHolder>(objhold).obj);
|
||||
|
||||
auto cls = dynamic_cast<TClassObject*>(std::get<THeapObjectHolder>(objhold).obj);
|
||||
|
||||
if(dict != nullptr)
|
||||
{
|
||||
dict->SetValue(std::get<std::string>(k), value);
|
||||
}
|
||||
else if(cls != nullptr)
|
||||
{
|
||||
auto obj=cls->GetValue(cse.back()->callable->className,"set"+std::get<std::string>(k));
|
||||
TCallable* callable;
|
||||
if(GetObjectHeap(obj,callable))
|
||||
{
|
||||
gc->BarrierEnd();
|
||||
|
||||
callable->Call(ls,{value});
|
||||
gc->BarrierBegin();
|
||||
}else {
|
||||
cls->SetValue(cse.back()->callable->className,std::get<std::string>(k),value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stk->Push(gc, objhold);
|
||||
|
||||
Reference in New Issue
Block a user