summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2024-03-01Merge pull request #905 from secondlife/require-tweaksnat-goodspeed
Refactor `require()` to make it easier to reason about Lua stack usage.
2024-03-01Merge pull request #910 from secondlife/lua-queuenat-goodspeed
Add Queue.lua from roblox.com documentation.
2024-02-29Fix wonky Unicode chars from web pasteNat Goodspeed
2024-02-29Add Queue.lua from roblox.com documentation.Nat Goodspeed
2024-02-29Clarify that the print output from testmod.lua is load-time.Nat Goodspeed
2024-02-29Fix caching for loaded Lua require() modules.Nat Goodspeed
The code to save the loaded module was using the wrong key.
2024-02-29Add indra/newview/scripts/lua directory, copied into viewer image.Nat Goodspeed
2024-02-29Refactor require() to make it easier to reason about Lua stack usage.Nat Goodspeed
Push throwing Lua errors down into LLRequireResolver::findModule() and findModuleImpl() so their callers don't have to handle the error case. That eliminates finishrequire(). require() itself now only retrieves (and pops) the passed module name and calls LLRequireResolver::resolveRequire() to do the actual work. resolveRequire() is now void. It only instantiates LLRequireResolver and calls its findModule(). findModule() is now also void. It's guaranteed to either push the loaded Lua module or throw a Lua error. In particular, when findPathImpl() cannot find the specified module, findModule() throws an error. That replaces ModuleStatus::NotFound. Since std::filesystem::path::append() aka operator/() detects when its right operand is absolute and, in that case, discards the left operand, we no longer need resolveAndStoreDefaultPaths(): we can just invoke that operation inline. When findModule() pushes _MODULES on the Lua stack, it uses LuaRemover (below) to ensure that _MODULES is removed again no matter how findModules() exits. findModuleImpl() now accepts the candidate pathname as its argument. That eliminates mAbsolutePath. findModuleImpl() now returns only bool: true means the module was found and loaded and pushed on the Lua stack, false means not found and nothing was pushed; no return means an error was reported. Push running a newly found module's source file down into findModuleImpl(). That eliminates the distinction between Cached and FileRead, which obviates ModuleStatus: a bool return means either "previously cached" or "we read it, compiled it, loaded it and ran it." That also eliminates the need to store the module's textual content in mSourceCode. Similarly, once loading the module succeeds, findModuleImpl() caches it in _MODULES right away. That eliminates ResolvedRequire since we need not pass the full pathname of the found module (or its contents) back up through the call chain. Move require() code that runs the new module into private runModule() method, called by findModuleImpl() in the not-cached case. runModule() is the only remaining method that can push either a string error message or the desired module, because of its funny stack manipulations. That means the check for a string error message on the stack top can move down to findModuleImpl(). Add LuaRemover class to ensure that on exit from some particular C++ block, the specified Lua stack entry will definitely be removed. This is different from LuaPopper in that it engages lua_remove() rather than lua_pop(). Also ditch obsolete await_event() Lua entry point.
2024-02-29Improve Debug class (indra/test/debug.h).Nat Goodspeed
Disable copy assignment operator as well as copy constructor. Use std::uncaught_exceptions() in destructor to report whether there's an in-flight exception at block exit. Since that was the whole point of the DEBUGIN / DEBUGEND macros, those become obsolete. Ditch them and their existing invocations.
2024-02-28Reference updated action-gh-release@v1Nat Goodspeed
instead of the branch that got pulled.
2024-02-27SL-18721 Shutdown fixes #5Andrey Kleshchev
2024-02-27Issue#900 Crash at LLInventoryAddItemByAssetObserverAndrey Kleshchev
2024-02-27Merge pull request #843 from secondlife/luau-require-implMaxim Nikolenko
Initial require implementation
2024-02-27Merge branch 'release/luau-scripting' into luau-require-impl.Nat Goodspeed
2024-02-27Merge pull request #895 from secondlife/relnotes-wnat-goodspeed
Generate release notes from tag `release` to the built tag.
2024-02-27Issue#894 Crash at load3 in cacheOptimizeAndrey Kleshchev
2024-02-26Base generated release notes on new floating tag 'release'Nat Goodspeed
instead of on the current tag 7.1.2-release.
2024-02-26Clear the stack after requiring a moduleMnikolenko Productengine
2024-02-26Leverage action-gh-release's new previous_tag input.Nat Goodspeed
This should (!) allow us to generate full release notes relative to the previous viewer release, instead of letting action-gh-release guess incorrectly. Also try again to add to the release page a back-link to the specific build.
2024-02-26Try basing release notes on github.sha rather than github.ref_name.Nat Goodspeed
2024-02-26Clean-up and restoring correct pathMnikolenko Productengine
2024-02-26Try basing the GH release on github.ref_name instead of github.ref.Nat Goodspeed
Using github.ref as action-gh-release's target_commitish produces: ⚠️ GitHub release failed with status: 422 [{"resource":"Release","code":"invalid","field":"target_commitish"}]
2024-02-26Try to generate release notes for this specific branch.Nat Goodspeed
Also try to cross-reference release page and build page.
2024-02-23viewer#875 Crash at uri normalizationAndrey Kleshchev
Note that crash happened when setting LLProgressView::setMessage
2024-02-23Merge branch 'main' into DRTVWR-588-maint-WAndrey Lihatskiy
2024-02-23Merge branch 'main' into DRTVWR-591-maint-XAndrey Lihatskiy
2024-02-23Merge pull request #879 from secondlife/lua-eventsnat-goodspeed
Lua listen_events(), await_event() => get_event_pumps(), get_event_next().
2024-02-23Allow debug.h to be #included even in normal viewer code.Nat Goodspeed
debug.h #defines a couple of macros intended to enclose the entire body of a function to track its entry and (possibly exceptional) exit. The trouble is that these macros used to be called BEGIN and END, which is far too generic -- especially considering that END is used as an enum value in some parts of the viewer. Rename them DEBUGIN and DEBUGEND, which is ugly but unlikely to collide with anything else.
2024-02-23Allow print() (also Debug) to be used even in normal viewer code.Nat Goodspeed
Since print() writes to cerr, we used to be able to use it only in test programs. Making the cerr writes conditional on LL_TEST allows us to use it for debugging the code under test as well, since in the normal viewer the cerr statements vanish.
2024-02-23Allow variadic instances of Debug, e.g. to display arguments.Nat Goodspeed
All Debug constructor args are concatenated using stringize().
2024-02-23require() code clean-upMnikolenko Productengine
2024-02-23Ditch DebugExit: we already have Debug (in debug.h)Nat Goodspeed
2024-02-23Clean up #includes in lualistener.hNat Goodspeed
2024-02-22 #include <iomanip> where std::quoted() is referenced.Nat Goodspeed
Remove where it isn't.
2024-02-22Lua listen_events(), await_event() => get_event_{pumps,next}().Nat Goodspeed
Don't set up a Lua callback to receive incoming events, a la listen_events(). Don't listen on an arbitrary event pump, a la await_event(). Instead, the new get_event_pumps() entry point simply delivers the reply pump and command pump names (as listen_events() did) without storing a Lua callback. Make LuaListener capture incoming events on the reply pump in a queue. This avoids the problem of multiple events arriving too quickly for the Lua script to retrieve. If the queue gets too big, discard the excess instead of blocking the caller of post(). Then the new get_event_next() entry point retrieves the next (pump, data) pair from the queue, blocking the Lua script until a suitable event arrives. This is closer to the use of stdin for a LEAP plugin. It also addresses the question: what should the Lua script's C++ coroutine do while waiting for an incoming reply pump event? Recast llluamanager_test.cpp for this new, more straightforward API. Move LLLeap's and LuaListener's reply LLEventPump into LLLeapListener, which they both use. This simplifies LLLeapListener's API, which was a little convoluted: the caller supplied a connect callback to allow LLLeapListener to connect some listener to the caller's reply pump. Now, instead, the caller simply passes a bool(pumpname, data) callback to receive events incoming on LLLeapListener's own reply pump. Fix a latent bug in LLLeapListener: if a plugin called listen() more than once with the same listener name, the new connection would not have been saved. While at it, replace some older Boost features in LLLeapListener and LLLeap.
2024-02-22Add diagnostic logging to LLEventPumps::post().Nat Goodspeed
If post() can't find the requested pump, say so.
2024-02-22Slightly modernize run_build_test.py.Nat Goodspeed
2024-02-22Improving issue templates. (#877)Brad Linden
making ordering explicit, and disabling blank issue submission to force triage label to be set.
2024-02-22Delete .github/ISSUE_TEMPLATE/issue_template.mdVir Linden
2024-02-22Update issue_template.mdVir Linden
2024-02-22Update issue_template.mdVir Linden
2024-02-22Merge pull request #873 from secondlife/vir-linden-issue-templateVir Linden
Create issue_template.md
2024-02-22Create issue_template.mdVir Linden
Issue template for the "blank issue" option
2024-02-22Viewer#863 Crash reading xmlAndrey Kleshchev
2024-02-21Merge branch 'main' into DRTVWR-588-maint-WAndrey Lihatskiy
2024-02-21Add the option to use clean lua_State in "Lua debug" floaterMnikolenko Productengine
2024-02-21SL-20469 Crash at dead mRootVolp in getAttachedAvatar()Andrey Kleshchev
2024-02-20Don't accept a full path as arg for require()Mnikolenko Productengine
2024-02-20Initial require implementationMnikolenko Productengine
2024-02-16Merge pull request #812 from secondlife/DRTVWR-588-relnotesnat-goodspeed
Engage new viewer-build-util/which-branch with relnotes output.