summaryrefslogtreecommitdiff
path: root/indra/newview
AgeCommit message (Collapse)Author
2024-03-10viewer#944 Make 'Debug Unicode' feature available for all LLViewsAlexander Gavriliuk
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-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-07triage#103 The focused state of the 'Recently used emojis' is not visibleAlexander Gavriliuk
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-06SL-20429 Fix emoji categories having mixed translationsAndrey Kleshchev
Was caused by package substituting '&' with 'and' instead of '&'
2024-03-05triage#86 Use Emoji font in LineEditor by defaultAlexander Gavriliuk
2024-03-05Issue #54 LLRender::init crashAndrey Kleshchev
2024-03-05SL-17896 Don't crash silently if files are missing or out of memoryAndrey Kleshchev
Under debug LL_ERRS will show a message as well, but release won't show anything and will quit silently so show a notification when applicable.
2024-03-04Merge branch 'main' into marchcat/x-mergeAndrey Lihatskiy
# Conflicts: # indra/llcommon/llstring.cpp # indra/llcommon/llstring.h
2024-03-02Revert "Update emoji_categories in Polish translation to slightly more ↵Andrey Kleshchev
correct erms..." This reverts commit 60debe828b87c33fdbd33e3a5fcef423e544fe55.
2024-03-01Update emoji_categories in Polish translation to slightly more correct erms...Pantera Północy
2024-03-01Merge remote-tracking branch 'origin/main' into release/gltf-maint2Brad Linden
2024-03-01Merge branch 'main' into marchcat/yz-mergeAndrey Lihatskiy
# Conflicts: # indra/newview/llinventorygallery.cpp
2024-03-01triage#105 clearPopups() crashAndrey Kleshchev
onTopLost can result in popup being removed or potentially removing more than one popup.
2024-03-01Merge branch 'main' into DRTVWR-588-maint-WAndrey Lihatskiy
2024-03-01Increment viewer version to 7.1.4Nat Goodspeed
following promotion of secondlife/viewer #673
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-27Issue#900 Crash at LLInventoryAddItemByAssetObserverAndrey Kleshchev
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-23require() code clean-upMnikolenko Productengine
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-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-13Add leaphelp() Lua builtin function for help on LEAP operations.Nat Goodspeed
leaphelp() (no argument) shows a list of all LEAP APIs. leaphelp(API) shows further help for a specific API. Both forms query LuaListener's LeapListener and report its responses. In future we might reimplement leaphelp() as a Lua function. Add LuaState::getListener() method, which checks whether there's a LuaListener associated with this LuaState and returns a pointer if so. Add LuaState::obtainListener() method, which finds or creates a LuaListener for this LuaState and returns its pointer. Both the above use logic migrated from the Lua listen_events() entry point, which now calls obtainListener() instead.
2024-02-13Merge branch 'release/luau-scripting' into helpcmd.Nat Goodspeed
2024-02-12WIP: Changes towards supporting Lua console help text.Nat Goodspeed
2024-02-12#779 Emoji picker is an unintuitive UX disasterAlexander Gavriliuk
2024-02-12Make LLFloaterLUADebug assume 'Execute' button on LUA String EnterMaxim Nikolenko
2024-02-09Add command-line switches --lua "chunk" and --luafile pathname.Nat Goodspeed
--lua "chunk" runs the specified Lua chunk at startup time. --luafile pathname runs the specified Lua script file at startup time. You may specify more than one --lua or --luafile switch on the command line.
2024-02-09Make LLLUAmanager::runScriptFile() use filename as description.Nat Goodspeed
Since the description shows up in the log output, it's better to see just the script filename than to see "runScriptFile('filename')".
2024-02-09Make LLFloaterLUADebug store a persistent LuaState.Nat Goodspeed
That means that as you use the floater, variables that you assign and functions that you define are available to subsequent Lua chunks.
2024-02-09Merge branch 'implicit-print' of viewer-private into implicit-printNat Goodspeed
2024-02-09When LLFloaterLUADebug script returns a value, display the value.Nat Goodspeed
The chunk: return 1, 2, {} differs in two ways from: print(1, 2, {}) First, print() engages the Lua tostring() builtin, so it displays values as Lua sees them. (For a table, tostring() displays "table: hex", which isn't so wonderful.) But LLFloaterLUADebug serializes the LLSD converted from the Lua return values. Second, we've overridden print() to engage a function that writes to the viewer log as well as displaying to LLFloaterLUADebug. (As we go forward, most Lua scripts won't be run manually by LLFloaterLUADebug.) The values returned by a Lua chunk aren't implicitly logged. Each C++ caller wanting to evaluate a Lua expression can choose whether to log the results.
2024-02-09#68 The 'Recently used emoji' can not be selected by the 'Tab' keyAlexander Gavriliuk
2024-02-09#746 BugSplat Crash: LLAccordionCtrlTab::showAndFocusHeader(873)Alexander Gavriliuk
2024-02-08Build fix for Visual Studio patchAlexander Gavriliuk