Fixed cmake, unnecessary itteration on dictionary, and a crosslang binary bug when shell is not installed

This commit is contained in:
2026-04-16 19:08:18 -05:00
parent c2d9627405
commit 66f5b704ee
15 changed files with 376 additions and 377 deletions

View File

@@ -12,7 +12,7 @@ namespace Tesses::CrossLang::Programs
static bool Download(Tesses::Framework::Filesystem::VFSPath filename,std::shared_ptr<Tesses::Framework::Filesystem::VFS> vfs)
{
auto inContainer=Platform::Environment::GetVariable("CROSSLANG_CONTAINER");
if(inContainer && *inContainer=="1" || *inContainer=="y" || *inContainer=="Y")
if(inContainer && (*inContainer=="1" || *inContainer=="y" || *inContainer=="Y"))
{
HttpRequest req;
req.url = "https://downloads.tesses.net/ShellPackage.crvm";
@@ -22,7 +22,7 @@ static bool Download(Tesses::Framework::Filesystem::VFSPath filename,std::shared
{
auto strm = resp.ReadAsStream();
CrossLang::CrossArchiveExtract(strm, vfs);
return true;
}
else
@@ -47,7 +47,7 @@ static bool Download(Tesses::Framework::Filesystem::VFSPath filename,std::shared
{
auto strm = resp.ReadAsStream();
CrossLang::CrossArchiveExtract(strm, vfs);
return true;
}
else
@@ -61,10 +61,10 @@ static bool Download(Tesses::Framework::Filesystem::VFSPath filename,std::shared
std::cout << "Looks like you will need to install manually" << std::endl;
return false;
}
else
else
{
std::cout << "Please use Y or N (case insensitive)" << std::endl;
}
}
return false;
@@ -72,11 +72,11 @@ static bool Download(Tesses::Framework::Filesystem::VFSPath filename,std::shared
TObject CrossLangShell(GCList& ls, std::vector<std::string>& argv)
{
Tesses::Framework::Filesystem::VFSPath dir = GetCrossLangConfigDir();
Tesses::Framework::Filesystem::VFSPath filename = dir / "Shell" / "Shell.crvm";
auto p = Tesses::Framework::Platform::Environment::GetRealExecutablePath(Tesses::Framework::Filesystem::LocalFS->SystemToVFSPath(argv[0])).GetParent().GetParent() / "share" / "Tesses" / "CrossLang" / "Tesses.CrossLang.ShellPackage-1.0.0.0-prod.crvm";
if(argv.size() == 2 && argv[1] == "configdir")
@@ -96,7 +96,7 @@ TObject CrossLangShell(GCList& ls, std::vector<std::string>& argv)
{
auto strm = resp.ReadAsStream();
CrossLang::CrossArchiveExtract(strm, subdir);
return 0;
}
else
@@ -117,7 +117,7 @@ TObject CrossLangShell(GCList& ls, std::vector<std::string>& argv)
if(strm != nullptr)
{
CrossLang::CrossArchiveExtract(strm, subdir);
}
else
{
@@ -130,26 +130,26 @@ TObject CrossLangShell(GCList& ls, std::vector<std::string>& argv)
return 0;
}
}
TRootEnvironment* env = TRootEnvironment::Create(ls, TDictionary::Create(ls));
TStd::RegisterStd(ls.GetGC(),env);
env->LoadFileWithDependencies(ls.GetGC(), Tesses::Framework::Filesystem::LocalFS, filename);
TList* args = TList::Create(ls);
args->Add(filename.ToString());
for(size_t arg=1;arg<argv.size();arg++)
args->Add(std::string(argv[arg]));
return env->CallFunctionWithFatalError(ls,"main",{args});
}
}
}

View File

@@ -110,18 +110,18 @@ namespace Tesses::CrossLang {
if(GetObjectHeap(res,callable))
{
auto closure = dynamic_cast<TClosure*>(callable);
if(closure != nullptr && !closure->closure->args.empty() && closure->closure->args.front() == "this")
if(closure != nullptr && !closure->closure->args.empty() && closure->closure->args.front() == "this")
{
std::vector<TObject> args2;
args2.push_back(this);
args2.insert(args2.end(), args.begin(),args.end());
return closure->Call(ls,args2);
}
else
{
return callable->Call(ls,args);
}
}
return Undefined();
@@ -136,23 +136,23 @@ namespace Tesses::CrossLang {
if(GetObjectHeap(res,callable))
{
auto closure = dynamic_cast<TClosure*>(callable);
if(closure != nullptr && !closure->closure->args.empty() && closure->closure->args.front() == "this")
if(closure != nullptr && !closure->closure->args.empty() && closure->closure->args.front() == "this")
{
std::vector<TObject> args2;
args2.push_back(this);
args2.insert(args2.end(), args.begin(),args.end());
return closure->CallWithFatalError(ls,args2);
}
else
{
return callable->CallWithFatalError(ls,args);
}
}
return Undefined();
}
void TDictionary::DeclareFunction(GC* gc,std::string key,std::string documentation, std::vector<std::string> argNames, std::function<TObject(GCList& ls, std::vector<TObject> args)> cb)
{
gc->BarrierBegin();
@@ -184,10 +184,8 @@ namespace Tesses::CrossLang {
TObject TDictionary::GetValue(std::string key)
{
if(this->items.empty()) return Undefined();
for(auto item : this->items)
{
if(item.first == key) return item.second;
}
if(this->items.count(key) > 0)
return this->items[key];
return Undefined();
}
void TDictionary::SetValue(std::string key, TObject value)
@@ -231,5 +229,5 @@ namespace Tesses::CrossLang {
_gc->Watch(dict);
return dict;
}
};
};