diff options
author | Donald Lee <dlqs@gmx.com> | 2021-08-10 01:07:06 +0200 |
---|---|---|
committer | Donald Lee <dlqs@gmx.com> | 2021-08-10 01:35:32 +0200 |
commit | 2ed598ba6bdbd8b6b6c6e9a091faad15306d19de (patch) | |
tree | 270667e3a4625d96541e63e4bfed232dee963b4f /lib/frrscript.h | |
parent | tests: Add test consecutive frrscript_call (diff) | |
download | frr-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.h | 16 |
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__)); \ |