Commit Graph

358 Commits

Author SHA1 Message Date
Alex Orlenko a05a58b258
Update integer/number coercion logic 2022-05-30 19:26:12 +01:00
Alex Orlenko 3766cee4dd
Experimental optimization to skip oom check 2022-05-30 18:42:34 +01:00
Alex Orlenko afa343ff08
Add [track_caller] attribute when working with app data container 2022-05-26 20:16:09 +01:00
Alex Orlenko 8d71ea79aa
Cache bytecode for internal Lua chunks 2022-05-16 20:29:02 +01:00
Alex Orlenko 6b2ceb60c4
Fix Send impl 2022-05-12 19:24:12 +01:00
Alex Orlenko bea9b0f8b5
Assert stack for Luau in `callback_error_ext` when operating on a cached wrapped failure.
Should solve #153.
2022-04-27 00:20:25 +01:00
Alex Orlenko 86f506a170
Fix clippy warnings 2022-04-14 21:55:36 +01:00
Alex Orlenko d3975bdf30
Refactor `AsChunk` trait.
Remove blanket implementation for T: AsRef<[u8]>
Implement for `std::path::Path`
2022-04-14 20:48:00 +01:00
Alex Orlenko 21affdadfd
Remove Luau compiler options from Chunk in favour of setting Compiler instance.
Add ability to set global Luau compiler used for load all chunks including via require function.
2022-04-14 00:54:29 +01:00
Alex Orlenko 88e3e92009
Define CallbackUpvalue/AsyncCallbackUpvalue as type alises to Upvalue 2022-04-13 18:29:51 +01:00
Alex Orlenko a018d3b6dc
Revert "Remove Lua::into_static/from_static"
This reverts commit f75b7b7879.
2022-04-13 13:44:59 +01:00
Alex Orlenko 0215c31a3a
Refactor Lua instance structure.
The idea is to keep same Lua instance across all calls and only change context inside callbacks.
This should solve #104.
2022-04-13 13:44:12 +01:00
Alex Orlenko 5cd82d0f6b
Refactor `main_state` handling 2022-04-13 13:44:11 +01:00
Alex Orlenko 55fac90a74
Fix Luau documentation in docs.rs
Enable `Lua::gc_inc` for Luau
Mark `debug` module as safe for Luau
2022-04-08 20:02:12 +01:00
Alex Orlenko 70d287cf9f
Don't pass Lua handler to interrupt callback (Luau) as it's not safe.
Optimize callback_error_ext to check stack only before allocating a new WrappedFailure.
2022-04-08 10:45:28 +01:00
Alex Orlenko 595dc3e95f
Move some Luau functionality to a new module
Immplement native "vector" function to construct vectors
2022-03-31 19:31:37 +01:00
Alex Orlenko d5315da8d1
Fix tests 2022-03-31 12:23:21 +01:00
Alex Orlenko 516f01ed44
Increase internal caches size 2022-03-31 00:07:05 +01:00
Alex Orlenko 4492a20bbc
Make LuaHook as Fn instead of FnMut to remove Mutex and improve performance 2022-03-30 23:55:34 +01:00
Alex Orlenko 595bc3a2b3
Support Luau interrupts (closes #138) 2022-03-30 22:01:06 +01:00
Alex Orlenko 87c10ca93d
Sandboxing support 2022-03-28 23:42:35 +01:00
Alex Orlenko f75b7b7879
Remove Lua::into_static/from_static 2022-03-26 00:30:57 +00:00
Alex Orlenko ec1fa04085
Update docs 2022-03-25 00:43:54 +00:00
Alex Orlenko 714dd6249f
Enable Thread::reset for Luau 2022-03-23 21:13:48 +00:00
Alex Orlenko 9533f08d3a
Use `lua_xpush` for Luau 2022-03-23 01:24:54 +00:00
Alex Orlenko 3a9c8c2da2
Add Luau vector datatype support 2022-03-22 21:14:06 +00:00
Alex Orlenko 55b778c68b
Fix clippy warnings 2022-03-22 00:47:31 +00:00
Alex Orlenko 4e0ba6559e
Add `require` function to Luau 2022-03-21 01:08:48 +00:00
Alex Orlenko 405cff5d49
Move StaticUserData* implementation from `lua` module to the new `userdata_impl` 2022-03-21 01:08:48 +00:00
Alex Orlenko 1e61d1dadc
Return binary chunks support in safe mode.
Lua has many ways to load binary bytecode and this restriction was easy to bypass.
2022-03-21 01:08:47 +00:00
Alex Orlenko 32124b31a0
Move chunks structs to a new module.
Add Luau Compiler interface to compile sources.
2022-03-21 01:08:47 +00:00
Alex Orlenko 3e5f8e7bb8
Enable `Lua::inspect_stack` for Luau 2022-03-21 01:08:47 +00:00
Alex Orlenko eed7b1f3af
More ffi module refactoring 2022-03-20 20:30:20 +00:00
Alex Orlenko c322e028e2
Initial Luau support 2022-03-20 20:30:20 +00:00
Alex Orlenko 6dc127f4eb
Refactor ffi module
Initial Luau support work
2022-03-20 20:30:18 +00:00
Alex Orlenko 10826a7e67
Update `create_registry_value` doc 2022-02-15 19:45:37 +00:00
Alex Orlenko 18c3255c90
Optimize `Lua::create_registry_value` by reusing previously expired registry keys. 2022-02-14 21:20:57 +00:00
Alex Orlenko 6190427f37
Add Lua::replace_registry_value 2022-02-14 20:51:24 +00:00
Alex Orlenko 9a5a341e44
Recognize LuaJIT TCDATA type to generate correct panic message.
Relates to #127
Should be fixed in a next major release by adding support of TCDATA type.
2022-02-12 18:40:18 +00:00
Alex Orlenko dd91ebfbe5
Grow/check Lua stack in unpack 2022-02-12 17:10:43 +00:00
Alex Orlenko f9fe869b76
Optimize async calls:
Rewrite "unpack" function using C api rather than high level abstraction.
2022-01-29 12:39:30 +00:00
Alex Orlenko 5a06778fbc
Always restore original Lua state after creating Future in async call.
Fixes #121
2022-01-16 20:57:43 +00:00
Alex Orlenko e33bdddc7a
Pass Box wrapped pointer to allocator fn instead of reference 2022-01-08 23:06:01 +00:00
Alex Orlenko cfb5d3fd45
Fix clippy warnings 2021-12-28 12:23:06 +00:00
Alex Orlenko f1e357ce52
Hide (doc) into_static/from_static methods 2021-12-01 00:28:08 +00:00
Alex Orlenko be09a1fabf
Update lifetimes for few functions in Lua 2021-11-30 23:14:08 +00:00
Alex Orlenko 2fee3e7891
Update docs 2021-11-25 18:01:41 +00:00
Alex Orlenko 1b74c89509
More performance optimizations 2021-11-25 11:16:12 +00:00
Alex Orlenko 066d28f5e5
Update `Lua::unload` doc & fix clippy warnings 2021-11-23 19:01:23 +00:00
Alexander Polakov d49757c7db Add unload() to remove module 2021-11-23 18:36:57 +03:00
Alex Orlenko 0e1be19cbb
Move hook_proc under `Lua::set_hook` to use callback_error_ext 2021-11-16 12:27:56 +00:00
Alex Orlenko 0ef709672d
Add set_warning_function/remove_warning_function/warning functions to Lua for 5.4
This utilizes Lua 5.4 warnings system (https://www.lua.org/manual/5.4/manual.html#pdf-warn)
2021-11-16 12:05:34 +00:00
Alex Orlenko 41503b4fb8
Update callback_error_ext (+ fix callback multi states handling) 2021-11-16 11:53:51 +00:00
Alex Orlenko 50f20e0c2c
Add thread (coroutine) cache to reset and later reuse to execute async functions.
It works on Lua 5.4 and LuaJIT (vendored) with `lua_resetthread` function.
2021-11-14 23:19:47 +00:00
Alex Orlenko 63ea8c7662
Rename wrapped_failures pool to cache 2021-11-14 23:19:47 +00:00
Alex Orlenko 863d36d5a1
Performance optimization: cache and reuse `MultiValue` containers 2021-11-12 15:32:53 +00:00
Alex Orlenko a8017c10b9
Update callback_error(_ext) 2021-11-12 12:41:03 +00:00
Alex Orlenko 6d689c35aa
Update `hook::Debug` struct 2021-11-09 18:20:36 +00:00
Alex Orlenko 8af1304fd0
Add `Lua::inspect_stack` to get information about the interpreter runtime stack.
This functionality is provided by `lua_getstack`.
2021-11-09 14:18:14 +00:00
Alex Orlenko 153502ec73
Add `set_nth_user_value` and `get_nth_user_value` to `AnyUserData`
with `n` up to 65535 for all Lua versions.
2021-11-08 21:16:31 +00:00
Alex Orlenko ef8c1556e6
Add optional Send to Lua::app_data 2021-11-07 15:03:17 +00:00
Alex Orlenko d7d987fa14
Add async meta methods for all Lua except 51 2021-11-04 00:57:49 +00:00
Alex Orlenko 4d3ac6d8c5
Add new "application data" api 2021-10-19 11:45:39 +01:00
Alex Orlenko a9ca99349c
Switch to FxHash 2021-10-19 11:45:38 +01:00
Alex Orlenko cab2e5a48e
Fix clippy warnings 2021-10-12 12:02:42 +01:00
Alex Orlenko ed48b11e7f
Update documentation references
Using rustdoc links (see RFC https://github.com/rust-lang/rfcs/pull/1946)
2021-10-12 00:49:45 +01:00
Alex Orlenko a544e41b33
Add (hidden) method `UserData::take()` to take out value from userdata 2021-10-05 15:46:50 +01:00
Alex Orlenko eff0bbb052
Add `Location::caller()` information to `Lua::load()` if chunk's name is None 2021-10-03 23:20:07 +01:00
Alex Orlenko d098c9ccf6
Refactor Waker handling in async code.
Instead of storing `Option<Waker>` in the Lua registry, store it on the reference thread.
It gives approx +10% performance gain when calling async function.
2021-10-03 22:09:19 +01:00
Alex Orlenko 5b1483bd56
Change syntax of `protect_lua` macro 2021-09-28 18:47:08 +01:00
Alex Orlenko a74b637ed4
Update check_stack requirements 2021-09-28 18:41:25 +01:00
Alex Orlenko bdd3c923ba
Fix table traversal used in recursion detection.
This fixes serializing same table multiple times within a parent table.
2021-09-28 16:41:39 +01:00
Alex Orlenko d586eef0f5
Refactor UserData metatables handling 2021-09-28 16:33:36 +01:00
Alex Orlenko 01154c0616
Minor refacor of wrapped failures cache 2021-09-28 16:27:24 +01:00
Alex Orlenko e42d67c70d
Make `protect_lua` as a smart macro to choose from C/closure 2021-09-28 16:26:30 +01:00
Alex Orlenko 771a7775c5
Perf optimization: refactor metatable cache 2021-09-28 16:25:08 +01:00
Alex Orlenko fc1fe2c15e
Add `DeserializeOptions` struct to control deserializer behavior.
This solves #74 and provides a way to deserialize a Lua globals table.
2021-09-15 23:45:08 +01:00
Alex Orlenko 31d32f2dda
Wrap `ExtraData` to `Arc<UnsafeCell>>` instead of raw pointer and attach finalizer.
This would allow to properly deallocate memory in module mode when closing lua state.
2021-08-21 23:17:09 +01:00
Alex Orlenko 7d1b322e18
Change `ExtraData::mem_info` to `Box<MemoryInfo>` 2021-08-19 01:42:32 +01:00
Alex Orlenko d906405818
Simplify interface of `hook::HookTriggers` 2021-08-18 18:49:17 +01:00
Alex Orlenko 60fd060d47
Clarify about calling `Lua::init_from_ptr()` multiple times 2021-08-17 15:34:34 +01:00
Alex Orlenko 8a7e546c66
Shrink unsafe block in `Lua::load_from_function` and update doc 2021-07-13 16:43:00 +01:00
Alex Orlenko 17162b1e0b
UserData improvements:
1) Optimize `make_userdata` call
2) Refactor `UserDataWrapped` and make it enum
2021-07-11 01:30:17 +01:00
Alex Orlenko 934aa3b65f
Forgotten optimization for `box_method_mut` 2021-07-09 23:25:48 +01:00
Alex Orlenko 3bffe1d7c3
Combine WrappedError and WrappedPanic structs to WrappedFailure enum 2021-07-09 00:05:29 +01:00
Alex Orlenko 582b2c585f
Rename init_gc_metatable_for and get_gc_metatable_for 2021-07-08 22:57:54 +01:00
Alex Orlenko 56b6b128b5
Minor fixes/compilation after revert 2021-07-08 22:53:53 +01:00
Alex Orlenko 1731f5d61b
Revert "Make `protect_lua` as a smart macro to choose from C/closure"
This reverts commit 84fe5f7f76.
2021-07-08 18:41:10 +01:00
Alex Orlenko 60822d12d2
Revert "Move away from metatable hashmap cache to direct keys"
This reverts commit adbc9ccc9b.
2021-07-08 18:40:14 +01:00
Alex Orlenko 8ff610529b
Don't wrap ExtraData to Arc<Mutex> and use raw pointer instead.
This causes serious performance issues and given that Lua is
single threaded (not Sync) it's safe to use a raw pointer instead.
2021-07-08 17:32:20 +01:00
Alex Orlenko adbc9ccc9b
Move away from metatable hashmap cache to direct keys 2021-07-08 15:37:18 +01:00
Alex Orlenko 84fe5f7f76
Make `protect_lua` as a smart macro to choose from C/closure 2021-07-07 12:54:19 +01:00
Alex Orlenko 1fe583027b
Add new functions: `lua.load_from_function()` and `lua.create_c_function()`
This should be useful to register embedded C modules to Lua state.
Provides a solution for #61
2021-07-05 00:03:18 +01:00
Alex Orlenko 41aae83304
Optimize callback creation
Attach only one upvalue to callbacks rather than two.
This leads to less lookup to Lua registry.
2021-06-30 16:50:50 +01:00
Alex Orlenko f24fdfdb80
Update `AsChunk::env` function prototype 2021-06-21 23:19:33 +01:00
Alex Orlenko 9e3b0ecc1e
Even better optimization after 14d5c2c887 2021-06-20 19:48:33 +01:00
Alex Orlenko 42b396d0d1
Optimize non-wrapped userdata method calls 2021-06-20 12:38:47 +01:00
Alex Orlenko 14d5c2c887
Lua->Rust callback performance improvements 2021-06-20 00:24:53 +01:00
Alex Orlenko 4e92ea341b Fix userdata memleak in edge case.
This can happen if we unable to push metatable with `__gc` metamethod after pushing userdata.
In this case Lua will never execute drop.
Instead, we will push metatable first and then userdata.
2021-06-18 17:45:20 +01:00
Alex Orlenko bf286751fa Improve code coverage 2021-06-17 00:47:15 +01:00