Add reflective variables and fields

This commit is contained in:
2025-05-17 18:28:19 -05:00
parent a684c9ba45
commit bb19d2444c
8 changed files with 451 additions and 27 deletions

View File

@@ -35,10 +35,10 @@ namespace Tesses::CrossLang {
dict->SetValue("Type", "GetField");
dict->SetValue("Key", key);
ls.GetGC()->BarrierEnd();
return cb->Call(ls,{dict});
return this->cb->Call(ls,{dict});
}
void TDynamicDictionary::SetField(GCList& ls, std::string key, TObject value)
TObject TDynamicDictionary::SetField(GCList& ls, std::string key, TObject value)
{
auto dict = TDictionary::Create(ls);
ls.GetGC()->BarrierBegin();
@@ -46,7 +46,7 @@ namespace Tesses::CrossLang {
dict->SetValue("Key", key);
dict->SetValue("Value", value);
ls.GetGC()->BarrierEnd();
cb->Call(ls,{dict});
return this->cb->Call(ls,{dict});
}
TObject TDynamicDictionary::CallMethod(GCList& ls, std::string name, std::vector<TObject> args)
@@ -59,7 +59,7 @@ namespace Tesses::CrossLang {
argVal->items = args;
dict->SetValue("Arguments", argVal);
ls.GetGC()->BarrierEnd();
return cb->Call(ls,{dict});
return this->cb->Call(ls,{dict});
}
TEnumerator* TDynamicDictionary::GetEnumerator(GCList& ls)
@@ -70,7 +70,7 @@ namespace Tesses::CrossLang {
ls.GetGC()->BarrierEnd();
return TEnumerator::CreateFromObject(ls,cb->Call(ls,{dict}));
return TEnumerator::CreateFromObject(ls,this->cb->Call(ls,{dict}));
}
bool TDictionary::MethodExists(GCList& ls,std::string method)
{
@@ -90,7 +90,7 @@ namespace Tesses::CrossLang {
ls.GetGC()->BarrierEnd();
auto res = cb->Call(ls,{dict});
auto res = this->cb->Call(ls,{dict});
bool r2;
if(GetObject(res,r2)) return r2;
return false;

View File

@@ -38,6 +38,76 @@ namespace Tesses::CrossLang {
if(GetObject(res,n)) return n;
return 0;
}
TObject TDynamicList::Add(GCList& ls, TObject v)
{
auto dict = TDictionary::Create(ls);
ls.GetGC()->BarrierBegin();
dict->SetValue("Type", "Add");
dict->SetValue("Value",v);
ls.GetGC()->BarrierEnd();
return cb->Call(ls,{dict});
}
TObject TDynamicList::Insert(GCList& ls, int64_t index, TObject v)
{
auto dict = TDictionary::Create(ls);
ls.GetGC()->BarrierBegin();
dict->SetValue("Type", "Insert");
dict->SetValue("Index",index);
dict->SetValue("Value",v);
ls.GetGC()->BarrierEnd();
return cb->Call(ls,{dict});
}
TObject TDynamicList::Clear(GCList& ls)
{
auto dict = TDictionary::Create(ls);
ls.GetGC()->BarrierBegin();
dict->SetValue("Type", "Clear");
ls.GetGC()->BarrierEnd();
return cb->Call(ls,{dict});
}
TObject TDynamicList::Remove(GCList& ls, TObject obj)
{
auto dict = TDictionary::Create(ls);
ls.GetGC()->BarrierBegin();
dict->SetValue("Type", "Remove");
dict->SetValue("Value", obj);
ls.GetGC()->BarrierEnd();
return cb->Call(ls,{dict});
}
TObject TDynamicList::RemoveAllEqual(GCList& ls, TObject obj)
{
auto dict = TDictionary::Create(ls);
ls.GetGC()->BarrierBegin();
dict->SetValue("Type", "RemoveAllEqual");
dict->SetValue("Value", obj);
ls.GetGC()->BarrierEnd();
return cb->Call(ls,{dict});
}
TObject TDynamicList::RemoveAt(GCList& ls, int64_t index)
{
auto dict = TDictionary::Create(ls);
ls.GetGC()->BarrierBegin();
dict->SetValue("Type", "RemoveAt");
dict->SetValue("Index", index);
ls.GetGC()->BarrierEnd();
return cb->Call(ls,{dict});
}
TObject TDynamicList::ToString(GCList& ls)
{
auto dict = TDictionary::Create(ls);
ls.GetGC()->BarrierBegin();
dict->SetValue("Type", "ToString");
ls.GetGC()->BarrierEnd();
return cb->Call(ls,{dict});
}
TObject TDynamicList::GetAt(GCList& ls, int64_t index)
{
@@ -50,7 +120,7 @@ namespace Tesses::CrossLang {
return cb->Call(ls,{dict});
}
void TDynamicList::SetAt(GCList& ls, int64_t index, TObject val)
TObject TDynamicList::SetAt(GCList& ls, int64_t index, TObject val)
{
auto dict = TDictionary::Create(ls);
ls.GetGC()->BarrierBegin();
@@ -58,7 +128,7 @@ namespace Tesses::CrossLang {
dict->SetValue("Index",index);
dict->SetValue("Value",val);
ls.GetGC()->BarrierEnd();
cb->Call(ls,{dict});
return cb->Call(ls,{dict});
}
TDynamicList::~TDynamicList()