summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2024-03-11Polish up leap.lua to make it pass tests.Nat Goodspeed
Add usage comments at the top. Add leap.done() function. Make leap.process() honor leap.done(), also recognize an incoming nil from the viewer to mean it's all done. Support leap.WaitFor with nil priority to mean "don't self-enable." This obviates leap.WaitForReqid:enable() and disable() overrides that do nothing. Add diagnostic logging.
2024-03-11Make WaitQueue:_wait_waiters() skip dead coroutines.Nat Goodspeed
That is, skip coroutines that have gone dead since they decided to wait on Dequeue().
2024-03-08Merge 'release/luau-scripting' into lua-leap for Emoji release.Nat Goodspeed
2024-03-08Merge branch 'main' into release/luau-scripting for Emoji release.Nat Goodspeed
2024-03-08Enhance llluamanager_test.cpp.Nat Goodspeed
Sketch in an initial test that requires one of our bundled Lua modules. Each time we run Lua, report any error returned by the Lua engine. Use llcoro::suspendUntilEventOn(LLEventMailDrop) as shorthand for initializing an explicit LLTempBoundListener with a listen() call with a lambda.
2024-03-08Allow build-time Lua tests to require() bundled Lua modules.Nat Goodspeed
2024-03-08Emit a CMake message when running autobuild install.Nat Goodspeed
This helps to explain the lengthy delay when running autobuild configure in a new developer work area.
2024-03-07Merge pull request #935 from secondlife/gh-osbuildSignal Linden
Make signing and symbol posting jobs conditional on secrets.
2024-03-07Finish adding leap.WaitFor and WaitForReqid. Untested.Nat Goodspeed
2024-03-07Finish WaitQueue, ErrorQueue; add util.count(), join(); extend qtest.Nat Goodspeed
For WaitQueue, nail down the mechanism for declaring a subclass and for calling a base-class method from a subclass override. Break out new _wake_waiters() method from Enqueue(): we need to do the same from close(), in case there are waiting consumers. Also, in Lua, 0 is not false. Instead of bundling a normal/error flag with every queued value, make ErrorQueue overload its _closed attribute. Once you call ErrorQueue:Error(), every subsequent Dequeue() call by any consumer will re-raise the same error. util.count() literally counts entries in a table, since #t is documented to be unreliable. (If you create a list with 5 entries and delete the middle one, #t might return 2 or it might return 5, but it won't return 4.) util.join() fixes a curious omission from Luau's string library: like Python's str.join(), it concatenates all the strings from a list with an optional separator. We assume that incrementally building a list of strings and then doing a single allocation for the desired result string is cheaper than reallocating each of a sequence of partial concatenated results. Add qtest test that posts individual items to a WaitQueue, waking waiting consumers to retrieve the next available result. Add test proving that calling ErrorQueue:Error() propagates the error to all consumers.
2024-03-06WIP: Unfinished Queue.lua, WaitQueue.lua, ErrorQueue.lua, leap.lua.Nat Goodspeed
Also qtest.lua to exercise the queue classes and inspect.lua (from https://github.com/kikito/inspect.lua) for debugging.
2024-03-06Defend LuaState::expr() against lua_tollsd() errors.Nat Goodspeed
This is an unusual use case in which lua_tollsd() is called by C++ code without the Lua runtime farther up the call stack.
2024-03-05Stop requiring BUGSPLAT_USER and BUGSPLAT_PASS in build.sh.Nat Goodspeed
The build step no longer needs these variables at all: they're used in a subsequent workflow job.
2024-03-05To test for presence of secrets, set environment variables.Nat Goodspeed
From https://docs.github.com/en/actions/security-guides/using-secrets-in-github-actions#using-secrets-in-a-workflow : "Secrets cannot be directly referenced in if: conditionals. Instead, consider setting secrets as job-level environment variables, then referencing the environment variables to conditionally run steps in the job."
2024-03-05Enclose 'if:' expressions in ${{ ... }}.Nat Goodspeed
The previous construct produced: Unrecognized named-value: 'secrets'. Located at position 1 within expression: secrets.AZURE_KEY_VAULT_URI && ...
2024-03-05Make signing and symbol posting jobs conditional on secrets.Nat Goodspeed
Specifically, when secrets aren't available (e.g. for external PRs), skip the affected steps.
2024-03-04Do not automatically close issues (#929)Signal Linden
Mark issues as stale but do not close them.
2024-03-01Increment viewer version to 7.1.4Nat Goodspeed
following promotion of secondlife/viewer #673
2024-03-01Merge DRTVWR-489 to main on promotion of Emoji viewer (#673).Nat Goodspeed
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-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-26Clear the stack after requiring a moduleMnikolenko Productengine
2024-02-26Clean-up and restoring correct pathMnikolenko Productengine
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-21Add the option to use clean lua_State in "Lua debug" floaterMnikolenko Productengine