summaryrefslogtreecommitdiff
path: root/indra/llcommon/lua_function.h
diff options
context:
space:
mode:
authorNat Goodspeed <nat@lindenlab.com>2024-09-20 15:13:43 -0400
committerNat Goodspeed <nat@lindenlab.com>2024-09-20 15:13:43 -0400
commit6d29beb91b019e1995cdb7c4aaf7a043de4bf053 (patch)
treec4772496fd833a934d1b7e93028b107b0e36ed8f /indra/llcommon/lua_function.h
parent50513bab2d6b1823f983c145553b8a6af44c2f28 (diff)
Add ability to pass command-line arguments to a Lua script.
Introduce `ScriptCommand` class that parses a command line into a script name and optional args, using bash-like quoting and escaping. `ScriptCommand` searches for a file with that script name on a passed list of directories; the directories may be specified relative to a particular base directory. `ScriptCommand` supports the special case of a script name containing unescaped spaces. It guarantees that either the returned script file exists, or its `error()` string is non-empty. Replace `LLLeap::create()` logic, from which `ScriptCommand` was partly derived, with a `ScriptCommand` instance. Make `LLLUAmanager::runScriptFile()` use a `ScriptCommand` instance to parse the passed command line. Subsume `LLAppViewer::init()` script-path-searching logic for `--luafile` into `ScriptCommand`. In fact that lambda now simply calls `LLLUAmanager::runScriptFile()`. Make `lluau::dostring()` accept an optional vector of script argument strings. Following PUC-Rio Lua convention, pass these arguments into a Lua script as the predefined global `arg`, and also as the script's `...` argument. `LuaState::expr()` also accepts and passes through script argument strings. Change the log tag for the Lua script interruption message: if we want it, we can still enable it, but we don't necessarily want it along with all other "Lua" DEBUG messages. Remove `LuaState::script_finished_fn`, which isn't used any more. Also remove the corresponding `LLLUAmanager::script_finished_fn`. This allows us to simplify `~LuaState()` slightly, as well as the parameter signatures for `LLLUAmanager::runScriptFile()` and `runScriptLine()`.
Diffstat (limited to 'indra/llcommon/lua_function.h')
-rw-r--r--indra/llcommon/lua_function.h6
1 files changed, 1 insertions, 5 deletions
diff --git a/indra/llcommon/lua_function.h b/indra/llcommon/lua_function.h
index a5022db225..ae6e0bf7ba 100644
--- a/indra/llcommon/lua_function.h
+++ b/indra/llcommon/lua_function.h
@@ -83,9 +83,7 @@ void lua_pushllsd(lua_State* L, const LLSD& data);
class LuaState
{
public:
- typedef std::function<void(std::string msg)> script_finished_fn;
-
- LuaState(script_finished_fn cb={});
+ LuaState();
LuaState(const LuaState&) = delete;
LuaState& operator=(const LuaState&) = delete;
@@ -109,7 +107,6 @@ public:
// multiple results, represented as the entries of the array.
std::pair<int, LLSD> expr(const std::string& desc, const std::string& text,
const std::vector<std::string>& args={});
- std::pair<int, LLSD> expr(const std::string& desc, const ScriptCommand& command);
operator lua_State*() const { return mState; }
@@ -129,7 +126,6 @@ private:
/*---------------------------- feature flag ----------------------------*/
bool mFeature{ false };
/*---------------------------- feature flag ----------------------------*/
- script_finished_fn mCallback;
lua_State* mState{ nullptr };
std::string mError;
S32 mInterrupts{ 0 };