Fix crosslang Stat, StatVFS for custom crosslang filesystems and add queryable

This commit is contained in:
2026-05-08 23:10:20 -05:00
parent 28eff630c6
commit 7008a6ae61
13 changed files with 940 additions and 36 deletions

View File

@@ -668,7 +668,8 @@ namespace Tesses::CrossLang {
{
if(str[i] != c) break;
}
cse.back()->Push(gc,str.substr(i));
cse.back()->Push(gc,(!str.empty() && i < str.size()) ? str.substr(i) : "");
return false;
}
}
@@ -682,7 +683,8 @@ namespace Tesses::CrossLang {
{
if(str[i] != c) break;
}
cse.back()->Push(gc,str.substr(0,i+1));
cse.back()->Push(gc, (!str.empty() && i < str.size()) ? str.substr(0,i+1) : "");
return false;
}
}
@@ -2168,6 +2170,136 @@ namespace Tesses::CrossLang {
auto ttask = dynamic_cast<TTask*>(obj);
auto file = dynamic_cast<TFile*>(obj);
auto queryable = dynamic_cast<TQueryable*>(obj);
if(queryable != nullptr)
{
if(key == "Skip")
{
int64_t count;
if(GetArgument(args,0,count))
{
cse.back()->Push(gc, queryable->Skip(ls,count));
return false;
}
}
if(key == "Take")
{
int64_t count;
if(GetArgument(args,0,count))
{
cse.back()->Push(gc, queryable->Take(ls,count));
return false;
}
}
if(key == "SkipWhile")
{
TCallable* callable;
if(GetArgumentHeap(args, 0, callable))
{
cse.back()->Push(gc, queryable->SkipWhile(ls,callable));
return false;
}
}
if(key == "TakeWhile")
{
TCallable* callable;
if(GetArgumentHeap(args, 0, callable))
{
cse.back()->Push(gc, queryable->TakeWhile(ls,callable));
return false;
}
}
if(key == "Select")
{
TCallable* callable;
if(GetArgumentHeap(args, 0, callable))
{
cse.back()->Push(gc, queryable->Select(ls,callable));
return false;
}
}
if(key == "Where")
{
TCallable* callable;
if(GetArgumentHeap(args, 0, callable))
{
cse.back()->Push(gc, queryable->Where(ls,callable));
return false;
}
}
if(key == "ToList")
{
cse.back()->Push(gc, queryable->ToList(ls));
return false;
}
if(key == "ForEach")
{
TCallable* call;
if(GetArgumentHeap(args,0,call))
{
queryable->ForEach(gc, call);
}
cse.back()->Push(gc, Undefined());
return false;
}
if(key == "Count")
{
TCallable* call;
if(GetArgumentHeap(args,0,call))
{
cse.back()->Push(gc, queryable->Count(gc, call));
return false;
}
else {
cse.back()->Push(gc, queryable->Count(gc));
return false;
}
}
if(key == "Contains")
{
if(!args.empty())
{
cse.back()->Push(gc, queryable->Contains(gc, args[0]));
return false;
}
}
if(key == "All")
{
TCallable* call;
if(GetArgumentHeap(args,0,call))
{
cse.back()->Push(gc, queryable->All(gc, call));
return false;
}
}
if(key == "Any")
{
TCallable* call;
if(GetArgumentHeap(args,0,call))
{
cse.back()->Push(gc, queryable->Any(gc, call));
return false;
}
}
if(key == "GetEnumerator")
{
cse.back()->Push(gc, queryable->GetEnumerator(ls));
return false;
}
cse.back()->Push(gc, Undefined());
return false;
}
if(file != nullptr)
{
if(key == "MetadataDecode")