Remove OnItteration due to bugs in multithreaded registering in tytd

This commit is contained in:
2025-10-14 23:20:15 -05:00
parent 7c9ef2895c
commit 34ae7c8db3
4 changed files with 22 additions and 103 deletions

View File

@@ -6,100 +6,6 @@
namespace Tesses::CrossLang
{
class OnItterationObj : public TNativeObject
{
private:
GC* gc;
std::vector<TCallable*> callables;
std::shared_ptr<Tesses::Framework::FunctionalEvent<uint64_t>> fevent;
public:
OnItterationObj(GC* gc)
{
this->gc=gc;
this->fevent = std::make_shared<Tesses::Framework::FunctionalEvent<uint64_t>>(
[this](uint64_t n)->void{
this->Exec(n);
}
);
Tesses::Framework::OnItteraton += this->fevent;
}
~OnItterationObj()
{
Tesses::Framework::OnItteraton -= this->fevent;
}
std::string TypeName()
{
return "OnItteration";
}
TObject CallMethod(GCList& ls, std::string key, std::vector<TObject> args)
{
if(key == "operator+")
{
TCallable* callable;
if(GetArgumentHeap(args,0,callable))
{
gc->BarrierBegin();
bool found=false;
for(auto item : this->callables)
{
if(item == callable) {found=true; break;}
}
if(!found)
{
this->callables.push_back(callable);
}
gc->BarrierEnd();
}
return this;
}
if(key == "operator-")
{
TCallable* callable;
if(GetArgumentHeap(args,0,callable))
{
gc->BarrierBegin();
for(auto index = this->callables.begin(); index < this->callables.end(); index++)
{
if(*index == callable) {
this->callables.erase(index);
break;
}
}
gc->BarrierEnd();
}
return this;
}
if(key == "ToString")
{
gc->BarrierBegin();
std::string str = "Registered: " + std::to_string(this->callables.size());
gc->BarrierEnd();
return str;
}
return Undefined();
}
void Mark()
{
if(this->marked) return;
this->marked=true;
for(auto item : callables) item->Mark();
}
void Exec(uint64_t n)
{
gc->BarrierBegin();
for(auto item : callables)
{
gc->BarrierEnd();
GCList ls(gc);
item->Call(ls,{(int64_t)n});
gc->BarrierBegin();
}
gc->BarrierEnd();
}
};
static TObject AstToTObject(GCList& ls,SyntaxNode node)
{
if(std::holds_alternative<std::nullptr_t>(node))
@@ -378,7 +284,6 @@ namespace Tesses::CrossLang
}
void TStd::RegisterVM(GC* gc,TRootEnvironment* env)
{
env->permissions.canRegisterVM=true;
GCList ls(gc);
TDictionary* dict = TDictionary::Create(ls);
@@ -458,13 +363,12 @@ namespace Tesses::CrossLang
return Undefined();
});
gc->BarrierBegin();
auto ittrobj = TNativeObject::Create<OnItterationObj>(ls,gc);
dict->SetValue("OnItteration", ittrobj);
env->DeclareVariable("VM", dict);
gc->BarrierEnd();
}