Justin M. Keyes
0d4d285bd2
perf(vim.fn): call Lua-implemented vim.fn.xx() directly #39166
...
Problem:
- Builtin "Vimscript" functions (f_xx) are mostly implemented in C.
Partly that's because there is some boilerplate required to call out
to Lua.
- Calls to `vim.fn.foo()` always marshall over the Lua <=> Vimscript
("typval") bridge, even if `fn.foo()` is implemented entirely in Lua:
```
Lua => typval => Object => Lua => Object => typval => Lua.
```
Solution:
Functions declared in eval.lua with `func_lua` are implemented in
entirely in Lua (`_core/vimfn.lua`).
- `gen_eval.lua` wires `func_lua` entries to `lua_wrapper`, which handles
the typval conversion for Vimscript callers (slow path).
- `nlua_call()` detects `func_lua` functions and calls the Lua
implementation directly. This eliminates all conversion overhead for
Lua callers (fast path).
- Validate at build-time that `func`, `func_float`, and `func_lua` are
mutually exclusive.
- Migrate `hostname()` as a toy example, to show the idea.
2026-04-17 19:10:20 -04:00
..
2026-03-29 06:59:34 -04:00
2026-04-16 10:48:11 -04:00
2026-04-17 21:20:36 +08:00
2026-04-01 07:59:51 +08:00
2026-04-16 10:48:11 -04:00
2026-04-17 09:50:03 +08:00
2025-11-28 10:10:31 +08:00
2026-04-13 12:42:26 -04:00
2026-04-17 19:10:20 -04:00
2026-02-12 13:46:45 +01:00
2026-04-15 12:09:25 +01:00
2024-05-15 23:19:26 +02:00
2026-04-15 12:09:25 +01:00
2026-01-04 14:15:23 +08:00
2026-04-16 10:48:11 -04:00
2026-04-16 10:32:35 -04:00
2026-04-16 10:48:11 -04:00
2025-11-10 11:13:56 +08:00
2026-04-10 11:08:26 -05:00
2026-03-16 07:46:34 -04:00
2026-04-13 22:26:56 +08:00
2025-11-10 11:13:56 +08:00
2025-12-06 20:33:02 -05:00
2025-05-03 10:08:53 -07:00
2025-05-03 10:08:53 -07:00
2023-06-25 17:14:28 +02:00
2026-04-03 21:38:44 +08:00
2025-09-07 20:45:22 -07:00
2026-04-16 10:48:11 -04:00
2025-04-27 10:32:25 -07:00
2026-02-14 05:30:18 -05:00
2026-03-15 19:02:49 -04:00
2025-11-10 11:13:56 +08:00
2026-03-19 11:10:54 +08:00
2026-01-27 17:14:57 -05:00
2025-11-10 11:13:56 +08:00
2026-04-10 11:08:26 -05:00
2026-04-14 06:09:54 -04:00
2026-01-09 16:38:26 +08:00
2026-04-16 10:48:11 -04:00
2025-11-10 11:13:56 +08:00
2025-11-10 11:13:56 +08:00
2026-01-26 07:05:42 +08:00
2026-01-26 07:05:42 +08:00
2026-04-16 15:15:04 -04:00
2026-03-23 17:41:48 -04:00
2026-03-23 08:00:53 -04:00
2026-03-29 20:53:24 -04:00
2026-04-16 10:48:11 -04:00
2025-12-15 13:55:15 -05:00
2026-03-16 10:29:58 +01:00
2026-02-12 13:46:45 +01:00
2026-04-17 09:50:03 +08:00
2026-04-16 10:48:11 -04:00
2025-11-10 11:13:56 +08:00
2026-02-10 06:44:30 +08:00
2025-09-28 20:57:59 -07:00
2025-10-04 21:09:13 -07:00
2026-02-09 12:13:24 -05:00
2026-04-02 20:57:02 +08:00
2026-04-17 19:10:20 -04:00
2026-03-24 00:14:55 +01:00
2026-04-17 09:50:03 +08:00
2026-04-16 10:33:20 -04:00
2026-04-17 09:50:03 +08:00
2025-11-10 11:13:56 +08:00
2025-12-15 13:55:15 -05:00
2025-11-10 11:13:56 +08:00
2023-01-01 15:05:13 +01:00
2026-04-16 22:19:48 +08:00
2025-05-20 00:21:30 +00:00
2026-04-06 10:15:19 +08:00
2026-04-12 14:17:50 +02:00
2026-02-04 13:53:08 -05:00
2026-02-09 12:13:24 -05:00
2026-03-11 18:24:57 +01:00
2025-11-10 11:13:56 +08:00
2025-11-10 11:13:56 +08:00
2025-11-10 11:13:56 +08:00
2026-03-22 01:57:28 +01:00
2025-11-10 11:13:56 +08:00
2025-11-10 11:13:56 +08:00
2025-11-10 11:13:56 +08:00
2026-04-16 10:48:11 -04:00
2026-04-16 10:48:11 -04:00
2026-04-05 18:22:59 +02:00
2026-03-24 00:01:43 +00:00
2025-11-10 11:13:56 +08:00
2026-02-09 12:13:24 -05:00
2026-03-18 20:40:20 +01:00
2025-11-10 11:13:56 +08:00
2026-04-01 17:04:41 -04:00
2025-12-15 02:07:51 -05:00
2026-01-07 08:11:42 +08:00
2026-03-24 00:14:55 +01:00
2026-04-17 09:50:03 +08:00
2025-11-10 11:13:56 +08:00
2026-02-13 16:39:18 +08:00
2025-12-06 20:33:02 -05:00
2025-11-10 11:13:56 +08:00
2026-04-12 14:17:50 +02:00
2025-11-10 11:13:56 +08:00
2025-11-10 11:13:56 +08:00
2025-11-27 07:49:44 +08:00
2025-11-10 11:13:56 +08:00
2025-11-10 11:13:56 +08:00
2025-11-10 11:13:56 +08:00
2026-04-12 14:17:50 +02:00
2025-11-10 11:13:56 +08:00
2025-11-10 11:13:56 +08:00
2026-02-13 16:39:18 +08:00
2025-11-10 11:13:56 +08:00
2025-11-10 11:13:56 +08:00
2026-03-11 12:39:49 +01:00
2025-11-10 11:13:56 +08:00
2025-12-15 13:55:15 -05:00
2025-11-10 11:13:56 +08:00
2025-11-10 11:13:56 +08:00
2025-11-29 00:22:24 +00:00
2025-11-10 11:13:56 +08:00
2025-11-10 11:13:56 +08:00
2025-11-10 11:13:56 +08:00
2026-04-11 02:47:31 -04:00
2025-11-10 11:13:56 +08:00
2026-02-13 16:39:18 +08:00
2025-11-10 11:13:56 +08:00
2025-11-10 11:13:56 +08:00
2025-11-10 11:13:56 +08:00
2026-04-16 10:48:11 -04:00
2025-11-10 11:13:56 +08:00
2026-04-13 05:59:07 -04:00
2026-04-17 09:50:03 +08:00
2026-04-17 19:10:20 -04:00
2025-11-10 11:13:56 +08:00
2026-03-28 09:59:54 -04:00
2026-02-14 07:59:51 +08:00