mirror of
https://onedev.site.tesses.net/crosslang
synced 2026-02-08 17:15:45 +00:00
Fix a bug where a crvm dependency is freed if it only has classes
This commit is contained in:
@@ -1230,6 +1230,10 @@ namespace Tesses::CrossLang
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
static TObject New_Task(GCList& ls, std::vector<TObject> args)
|
||||
{
|
||||
return TTask::Create(ls);
|
||||
}
|
||||
void TStd::RegisterRoot(GC* gc, TRootEnvironment* env)
|
||||
{
|
||||
GCList ls(gc);
|
||||
@@ -1370,6 +1374,7 @@ namespace Tesses::CrossLang
|
||||
});
|
||||
newTypes->DeclareFunction(gc,"DocumentationParser","Parse documentation blocks",{"documentationString"},New_DocumentationParser);
|
||||
newTypes->DeclareFunction(gc,"ByteArray","Create bytearray, with optional either size (to size it) or string argument (to fill byte array)",{"$data"},ByteArray);
|
||||
newTypes->DeclareFunction(gc,"Task","Create a task for async, to manually create an async object",{},New_Task);
|
||||
|
||||
env->DeclareVariable("Version", TDictionary::Create(ls,{
|
||||
TDItem("Parse",TExternalMethod::Create(ls,"Parse version from string",{"versionStr"},[](GCList& ls, std::vector<TObject> args)->TObject{
|
||||
|
||||
@@ -314,6 +314,7 @@ namespace Tesses::CrossLang {
|
||||
if(this->permissions.customConsole != nullptr) this->permissions.customConsole->Mark();
|
||||
for(auto defer : this->defers) defer->Mark();
|
||||
if(this->error != nullptr) this->error->Mark();
|
||||
for(auto cls : this->classes) cls.first->Mark();
|
||||
}
|
||||
TRootEnvironment* TRootEnvironment::Create(GCList* gc,TDictionary* dict)
|
||||
{
|
||||
|
||||
@@ -3996,6 +3996,28 @@ namespace Tesses::CrossLang {
|
||||
|
||||
if(ttask != nullptr)
|
||||
{
|
||||
if(key == "SetSucceeded")
|
||||
{
|
||||
if(args.size() > 0)
|
||||
{
|
||||
ttask->SetSucceeded(args[0]);
|
||||
}
|
||||
cse.back()->Push(gc, Undefined());
|
||||
return false;
|
||||
}
|
||||
if(key == "SetFailed")
|
||||
{
|
||||
if(args.size() > 0)
|
||||
{
|
||||
try {
|
||||
throw VMByteCodeException(gc,args[0]);
|
||||
} catch(...) {
|
||||
ttask->SetFailed(std::current_exception());
|
||||
}
|
||||
}
|
||||
cse.back()->Push(gc, Undefined());
|
||||
return false;
|
||||
}
|
||||
if(key == "ContinueWith")
|
||||
{
|
||||
TCallable* callable2;
|
||||
@@ -7002,7 +7024,7 @@ namespace Tesses::CrossLang {
|
||||
}
|
||||
cse.erase(cse.end()-1);
|
||||
}
|
||||
gc->BarrierEnd();
|
||||
gc->BarrierEnd();
|
||||
|
||||
for(auto item : callable)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user