diff --git a/.onedev-buildspec.yml b/.onedev-buildspec.yml index cb9cae1..c0d3dfe 100644 --- a/.onedev-buildspec.yml +++ b/.onedev-buildspec.yml @@ -48,7 +48,7 @@ jobs: image: git.tesseslanguage.com/tesses50/arch-builds:2025-11-11 interpreter: !DefaultInterpreter commands: | - wget -O /root/repository.key wget https://git.tesseslanguage.com/api/packages/tesses50/arch/repository.key + wget -O /root/repository.key https://git.tesseslanguage.com/api/packages/tesses50/arch/repository.key pacman-key --add /root/repository.key pacman-key --config /opt/cross/ppc/pacman.conf --add /root/repository.key printf "[tesses50.git.tesseslanguage.com]\nSigLevel = Optional TrustAll\nServer = https://git.tesseslanguage.com/api/packages/tesses50/arch/core/\$arch\n" >> /etc/pacman.conf diff --git a/include/CrossLang.hpp b/include/CrossLang.hpp index aa2b0a1..b060042 100644 --- a/include/CrossLang.hpp +++ b/include/CrossLang.hpp @@ -1895,7 +1895,7 @@ class GC { this->marked=true; for(auto item : watch) GC::Mark(item); - GC::Mark(this->tag); + GC::Mark(this->tag); } }; diff --git a/src/runtime_methods/std.cpp b/src/runtime_methods/std.cpp index f4689ca..3b8afab 100644 --- a/src/runtime_methods/std.cpp +++ b/src/runtime_methods/std.cpp @@ -1230,6 +1230,10 @@ namespace Tesses::CrossLang } return nullptr; } + static TObject New_Task(GCList& ls, std::vector 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 args)->TObject{ diff --git a/src/types/rootenvironment.cpp b/src/types/rootenvironment.cpp index d485921..19eccd8 100644 --- a/src/types/rootenvironment.cpp +++ b/src/types/rootenvironment.cpp @@ -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) { diff --git a/src/vm/vm.cpp b/src/vm/vm.cpp index 4ff1d54..d696f7c 100644 --- a/src/vm/vm.cpp +++ b/src/vm/vm.cpp @@ -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) {