summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2024-06-12Make popup() directly pass payload.Nat Goodspeed
The expression (payload or {}) is unnecessary, since that value will be converted to LLSD -- and both Lua nil and empty table convert to LLSD::isUndefined().
2024-06-12Extract TempSet from llcallbacklist.cpp into its own tempset.h.Nat Goodspeed
2024-06-12Merge 'release/luau-scripting' of secondlife/viewer into lua-loginNat Goodspeed
2024-06-11Add popup.lua, a preliminary API for viewer notifications.Nat Goodspeed
WIP: This is known not to work yet.
2024-06-11Add login.lua module with login() function.Nat Goodspeed
The nullary login() call (login with saved credentials) has been tested, but the binary login(username, password) call is known not to work yet.
2024-06-11Add to UI.lua a set of 'LLWindow' listener operations.Nat Goodspeed
Add listviews(), viewinfo(), click(), doubleclick(), drag(), keypress() and type(). WIP: These are ported from Python LEAP equivalents, but the Lua implementation has only been partially tested.
2024-06-11Fix a couple bugs in startup.lua.Nat Goodspeed
The 'startup' table, the module's namespace, must be defined near the top because its local waitfor:process() override references startup. The byname table's metatable's __index() function wants to raise an error if you try to access an undefined entry, but it referenced t[k] to check that, producing infinite recursion. Use rawget(t, k) instead. Also use new leap.WaitFor(args) syntax instead of leap.WaitFor:new(args).
2024-06-11Allow Python-like 'object = ClassName(ctor args)' constructor calls.Nat Goodspeed
The discussions we've read about Lua classes conventionally use ClassName:new() as the constructor, and so far we've followed that convention. But setting metaclass(ClassName).__call = ClassName.new permits Lua to respond to calls of the form ClassName(ctor args) by implicitly calling ClassName:new(ctor args). Introduce util.classctor(). Calling util.classctor(ClassName) sets ClassName's metaclass's __call to ClassName's constructor method. If the constructor method is named something other than new(), pass ClassName.method as the second arg. Use util.classctor() on each of our classes that defines a new() method. Replace ClassName:new(args) calls with ClassName(args) calls throughout.
2024-06-11mapargs() now accepts 'name1,name2,...' as argument namesNat Goodspeed
in addition to a list {'name1', 'name2', ...}.
2024-06-11Update "LLWindow" listener doc to cite github URL, not bitbucket.Nat Goodspeed
2024-06-11Merge pull request #1697 from secondlife/lua-bradfixnat-goodspeed
Merge promoted Featurettes + Brad's GitHub Windows build workaround.
2024-06-11Merge branch 'release/luau-scripting' into lua-bradfixNat Goodspeed
2024-06-11clean up LLUIListener::callMaxim Nikolenko
2024-06-11Merge branch 'main' of github.com:secondlife/viewer into lua-bradfixNat Goodspeed
to pick up Featurettes promotion + Brad's GitHub Windows build workaround.
2024-06-11Merge branch 'release/luau-scripting' into lua-loginNat Goodspeed
2024-06-11Merge pull request #1685 from ↵nat-goodspeed
secondlife/brad/materials_featurette_build_workaround Attempted workaround for actions/runner-images#10004 build failures.
2024-06-11Merge pull request #1481 from secondlife/lua-ui-callbacksMaxim Nikolenko
Add trusted flag to UI callbacks, so not everything is accessible from the script
2024-06-10Merge branch 'main' into brad/materials_featurette_build_workaroundNat Goodspeed
2024-06-10Try to get sign-and-package-windows job a runner to run onBrad Linden
2024-06-10Increment viewer version to 7.1.9Nat Goodspeed
following promotion of secondlife/viewer #648: Release/materials featurette
2024-06-10Merge release/materials_featurette to main on promotion of secondlife/viewer ↵Nat Goodspeed
#648: Release/materials featurette
2024-06-10Attempted workaround for actions/runner-images#10004 build failures.Brad Linden
2024-06-10Merge branch 'release/luau-scripting' into lua-loginNat Goodspeed
2024-06-10Merge branch 'release/luau-scripting' into lua-ui-callbacksMnikolenko Productengine
2024-06-10another batch of changes to use ScopedRegistrarHelperMnikolenko Productengine
2024-06-10Remove SharedCommitCallbackRegistry; add helpers CommitRegistrarHelper and ↵Mnikolenko Productengine
ScopedRegistrarHelper
2024-06-07Introduce mapargs.lua, which defines the mapargs() function.Nat Goodspeed
There are two conventions for Lua function calls. You can call a function with positional arguments as usual: f(1, 2, 3) Lua makes it easy to handle omitted positional arguments: their values are nil. But as in C++, positional arguments get harder to read when there are many, or when you want to omit arguments other than the last ones. Alternatively, using Lua syntactic sugar, you can pass a single argument which is a table containing the desired function arguments. For this you can use table constructor syntax to effect keyword arguments: f{a=1, b=2, c=3} A call passing keyword arguments is more readable because you explicitly associate the parameter name with each argument value. Moreover, it gracefully handles the case of multiple optional arguments. The reader need not be concerned about parameters *not* being passed. Now you're coding a Lua module with a number of functions. Some have numerous or complicated arguments; some do not. For simplicity, you code the simple functions to accept positional arguments, the more complicated functions to accept the single-table argument style. But how the bleep is a consumer of your module supposed to remember which calling style to use for a given function? mapargs() blurs the distinction, accepting either style. Coding a function like this (where '...' is literal code, not documentation ellipsis): function f(...) local args = mapargs({'a', 'b', 'c'}, ...) -- now use args.a, args.b, args.c end supports calls like: f(1, 2, 3) f{1, 2, 3} f{c=3, a=1, b=2} f{1, 2, c=3} f{c=3, 1, 2} -- unlike Python! In every call above, args.a == 1, args.b == 2, args.c == 3. Moreover, omitting arguments (or explicitly passing nil, positionally or by keyword) works correctly. test_mapargs.lua exercises these cases.
2024-06-07Fix another merge glitchNat Goodspeed
2024-06-07Tidy up merge from main.Nat Goodspeed
2024-06-07Merge branch 'main' of secondlife/viewer into release/luau-scriptingNat Goodspeed
2024-06-05Merge pull request #1639 from secondlife/nat/stack-overflownat-goodspeed
Make LLLeap iterate over child stdout while read data is pending
2024-06-05Make LLLeap iterate over child stdout while read data is pendingNat Goodspeed
instead of using mutual recursion to exhaust the read buffer.
2024-06-04#989 Fix for blurry terrain on Mac (#1633)Brad Linden
Co-authored-by: Dave Parks <davep@lindenlab.com>
2024-06-04 #1628 Disable spherical mirror probes for the time being. (#1631)Jonathan "Geenz" Goodman
2024-06-04Merge pull request #1630 from secondlife/nat/fix-ftr8-exrnat-goodspeed
Update tinyexr package to package based on secondlife/3p-tinyexr.
2024-06-04Update tinyexr package to package based on secondlife/3p-tinyexr.Nat Goodspeed
2024-06-04Merge pull request #1555 from secondlife/lua-timersnat-goodspeed
Add timer support to the Lua viewer
2024-06-04Merge pull request #1626 from ↵cosmic-linden
secondlife/1614-pbr-materials-exhibit-striationmoiré-patterns-in-specular-highlights 1614 pbr materials exhibit striationmoiré patterns in specular highlights
2024-06-04#1614 Fix for moire pattern in specular highlights. Incidental cleanup.RunitaiLinden
2024-06-04Comment the intent of test_timers.luaNat Goodspeed
so the user need not reverse-engineer the code to figure out the output.
2024-06-03Fix a small typoNat Goodspeed
2024-06-03Allow consumer code to query or adjust the per-tick timeslice.Nat Goodspeed
2024-06-03Distinguish TimersListener callers by reply LLEventPump name.Nat Goodspeed
The reqid is only distinct within a particular calling script.
2024-06-03Leverage new leap.eventstream() function in Floater.lua.Nat Goodspeed
2024-05-31Add timers.lua API module and test_timers.lua test program.Nat Goodspeed
Since timers presents a timers.Timer Lua class supporting queries and cancellation, make TimersListener::scheduleAfter() and scheduleEvery() respond immediately so the newly constructed Timer object has the reqid necessary to perform those subsequent operations. This requires that Lua invocations of these operations avoid calling the caller's callback with that initial response. Reinvent leap.generate() to return a Lua object supporting next() and done() methods. A plain Lua coroutine that (indirectly) calls fiber.wait() confuses the fiber scheduler, so avoid implementing generate() as a Lua coroutine. Add a bit more leap.lua diagnostic output.
2024-05-31Tweak for current Lua dbg() convention.Nat Goodspeed
2024-05-31Cherry-pick leap.lua changes; other clean upMnikolenko Productengine
2024-05-31Add leap.eventstream() and cancelreq() functions.Nat Goodspeed
leap.eventstream() is used when we expect the viewer's LLEventAPI to send an immediate first response with the reqid from the request, followed by some number of subsequent responses bearing the same reqid. The difference between eventstream() and generate() is that generate() expects the caller to request each such response, whereas eventstream calls the caller's callback with each response. cancelreq() is for canceling the background fiber launched by eventstream() before the callback tells it to quit. Make WaitFor:close() remove the object from the waitfors list; similarly, make WaitForReqid:close() remove the object from the pending list. For this reason, cleanup() must iterate over a copy of each of the pending and waitfors lists. Instead of unregisterWaitFor() manually searching the waitfors list, use table.find().
2024-05-31Add a bit more dbg() conditional diagnostic output.Nat Goodspeed
2024-05-31Don't check if printf(format) arg is a string.Nat Goodspeed