summaryrefslogtreecommitdiffstats
path: root/lib/frrscript.h
diff options
context:
space:
mode:
authorDonald Lee <dlqs@gmx.com>2021-08-10 01:07:06 +0200
committerDonald Lee <dlqs@gmx.com>2021-08-10 01:35:32 +0200
commit2ed598ba6bdbd8b6b6c6e9a091faad15306d19de (patch)
tree270667e3a4625d96541e63e4bfed232dee963b4f /lib/frrscript.h
parenttests: Add test consecutive frrscript_call (diff)
downloadfrr-2ed598ba6bdbd8b6b6c6e9a091faad15306d19de.tar.xz
frr-2ed598ba6bdbd8b6b6c6e9a091faad15306d19de.zip
lib: Enable consecutive frrscript_call
Previous: - frrscript_load: push Lua function onto stack - frrscript_call: calls Lua function Now: - frrscript_load: checks Lua function - frrscript_call: pushes and calls Lua function (first clear the stack) So now we just need one frrscript_load for consecutive frrscript_call. frrscript_call does not recompile or reload the script file, it just keys it from the global Lua table (where it should already be). Signed-off-by: Donald Lee <dlqs@gmx.com>
Diffstat (limited to 'lib/frrscript.h')
-rw-r--r--lib/frrscript.h16
1 files changed, 14 insertions, 2 deletions
diff --git a/lib/frrscript.h b/lib/frrscript.h
index 540676c09..c089df61f 100644
--- a/lib/frrscript.h
+++ b/lib/frrscript.h
@@ -203,8 +203,18 @@ const struct prefix * : lua_decode_noop \
int _frrscript_call_lua(struct lua_function_state *lfs, int nargs);
/*
- * Wrapper for calling Lua function state. Maps values passed in to their
- * encoder and decoder types.
+ * Wrapper for calling Lua function state.
+ *
+ * The Lua function name (f) to run should have already been checked by
+ * frrscript_load. So this wrapper will:
+ * 1) Find the Lua function state, which contains the Lua state
+ * 2) Clear the Lua state (there may be leftovers items from previous call)
+ * 3) Push the Lua function (f)
+ * 4) Map frrscript_call arguments onto their encoder and decoders, push those
+ * 5) Call _frrscript_call_lua (Lua execution takes place)
+ * 6) Write back to frrscript_call arguments using their decoders
+ *
+ * This wrapper can be called multiple times (after one frrscript_load).
*
* fs
* The struct frrscript in which the Lua fuction was loaded into
@@ -226,6 +236,8 @@ int _frrscript_call_lua(struct lua_function_state *lfs, int nargs);
1; \
}) \
: ({ \
+ lua_settop(lfs->L, 0); \
+ lua_getglobal(lfs->L, f); \
MAP_LISTS(ENCODE_ARGS, ##__VA_ARGS__); \
_frrscript_call_lua( \
lfs, PP_NARG(__VA_ARGS__)); \