Alex Orlenko
8a7e546c66
Shrink unsafe block in `Lua::load_from_function` and update doc
2021-07-13 16:43:00 +01:00
Alex Orlenko
59253410bb
Update trybuild messages
2021-07-13 11:59:33 +01:00
Alex Orlenko
5fb7b96704
Replace custom `UserDataRef(Mut)` with standard `Ref`(Mut)
2021-07-13 10:53:10 +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
fc84e8623e
v0.6.1
2021-06-28 00:10:07 +01:00
Alex Orlenko
8aae9a7c3e
Update chunk! documentation
2021-06-28 00:10:04 +01:00
Alex Orlenko
24bbd62564
Fix converting Lua sequence table to HashSet/BTreeSet
2021-06-25 01:49:09 +01:00
Alex Orlenko
7feabffc37
v0.6.0
2021-06-21 23:19:56 +01:00
Alex Orlenko
f24fdfdb80
Update `AsChunk::env` function prototype
2021-06-21 23:19:33 +01:00
Alex Orlenko
8d474bbf8d
Fix clippy warning
2021-06-21 03:25:21 +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
Alex Orlenko
3b94b4e86f
Implement Hash for RegistryKey. Closes #57
2021-06-16 12:12:42 +01:00
Alex Orlenko
9f0378b77e
Complitely remove the C shim
2021-06-16 22:21:45 +01:00
Alex Orlenko
d3f44354e0
Revert commit ced808d5ab
...
I think this experiment is unsuccessful and does not work well in a module mode
with dynamic symbols resolution and mixing between different mlua instances.
Overall the Rust bug has been fixed and we can wait for the "C-unwind" feature become stable.
2021-06-16 22:13:01 +01:00
Alex Orlenko
fca21d56d3
Check stack in entrypoint1 before pushing value to a stack
2021-06-13 23:30:56 +01:00
Alex Orlenko
6e52bb7e65
Fix clippy warnings && tests
2021-06-13 23:30:54 +01:00
Alex Orlenko
08ffeb0ca9
Improve module mode:
...
- Don't hide module function inside `luaopen_%` function.
- Raise Lua exception instead of panic if module function returns error.
2021-06-13 22:38:51 +01:00
Alex Orlenko
3b9d8a7b5f
Keep all Lua symbols in unsafe mode to load C modules
2021-06-12 18:00:55 +01:00
Alex Orlenko
0fe898c0dd
v0.6.0-beta.3
2021-06-04 12:38:09 +01:00
Alex Orlenko
821f1125b6
Add `String::to_string_lossy`
2021-06-04 00:16:40 +01:00
Alex Orlenko
abb95c3c56
Remove `T: Clone` requirement from `add_async_function`
2021-06-03 23:21:00 +01:00
Alex Orlenko
64faebf407
Add `__ipairs` metamethod (again) for Lua 5.2 only
2021-06-03 18:43:29 +01:00
Alex Orlenko
a944f4ad6f
Implement `UserData` for Rc<RefCell>/Arc<Mutex>/Arc<RwLock> wrappers
2021-06-03 16:42:55 +01:00
Alex Orlenko
bae424672a
Treat errors as `Send + Sync` to be compatible with `anyhow` crate
2021-05-31 11:05:51 +01:00
Alex Orlenko
e8de2a458a
Allow multiple entrypoints in a single module share the same Lua state.
...
Previously it would initialize different Lua instances.
Fixes #49 .
2021-05-18 20:07:34 +01:00
Alex Orlenko
973b5c3bf5
v0.6.0-beta.2
2021-05-13 23:10:19 +01:00
Alex Orlenko
b610a79d66
Update docs & minor error handling code changes
2021-05-11 14:18:22 +01:00
Alex Orlenko
fe39ae09bf
Try different approach for errors handling.
...
Instead of convering error to CallbackError in error message handler,
do it earlier at callback_error stage.
Better fix for #44 .
2021-05-11 00:53:07 +01:00
Alex Orlenko
0bad4a0ff9
Fix spelling
2021-05-10 19:53:38 +01:00
Alex Orlenko
35b7504076
Improve error reporting in module mode.
...
Attach traceback to a WrappedError.
Fixes #44 .
2021-05-10 17:45:00 +01:00
Alex Orlenko
c9b8eb5418
Re-export UserDataFields/UserDataMetatable
2021-05-09 09:30:33 +01:00
Alex Orlenko
3e03f4201c
Add chunk! macro support
2021-05-05 22:13:51 +01:00
Alex Orlenko
5199b02346
Update lua state when polling futures
2021-05-05 12:37:27 +01:00
Alex Orlenko
5293b8d6d2
Add `Thread::reset()` for luajit/lua54
2021-05-05 11:11:32 +01:00
Alex Orlenko
7541b6f3f3
Remove deprecated `AnyUserData::has_metamethod()`
2021-05-04 23:57:47 +01:00
Alex Orlenko
205510a540
Update sys align code
2021-05-04 23:55:24 +01:00
Alex Orlenko
2250421438
Fix clippy warnings
2021-05-04 23:42:33 +01:00
Alex Orlenko
8e57e6fa5a
v0.6.0-beta.1
2021-05-04 00:43:26 +01:00
Alex Orlenko
3829b72212
Update code docs
2021-05-03 22:33:18 +01:00
Alex Orlenko
af67971e0d
Make `SerializeOptions` non_exhaustive.
...
Add builder implementation similar to `LuaOptions` to set individual options.
2021-05-03 22:33:12 +01:00
Alex Orlenko
0f4bcca7ce
Add `LuaOptions` to customize Lua/Rust behaviour.
...
The only option is `catch_rust_panics` to optionally disable catching Rust panics via pcall/xpcall.
2021-05-03 21:33:49 +01:00
Alex Orlenko
585c0a25d8
Replace 'Thread already finished' error with common `Error::CoroutineInactive`
2021-05-03 13:11:59 +01:00
Alex Orlenko
64346ce56c
Implement/Derive `Debug` for Lua and few other structs
2021-05-03 13:05:43 +01:00
Alex Orlenko
108682cc71
Store `safe` property in Extra state to inherit into Lua structs made from pointers
2021-05-03 12:40:14 +01:00
Alex Orlenko
4af7bcf0d9
Implement ToLua/FromLua for Box<str> and Box<[T]>
2021-05-03 12:22:11 +01:00
Alex Orlenko
a4567cb5f7
Improve growing the auxiliary stack of the ref thread:
...
Try to double size first, if not fulfilled try halving in a loop till 0.
Fix unwinding after panic in ref_stack_pop.
Add test to check the stack exhaustion.
2021-05-02 23:26:02 +01:00
Alex Orlenko
26d8d899f2
Allocate Waker slot in Registry in re-use it (instead of creating new userdata for it)
2021-05-02 13:04:02 +01:00
Alex Orlenko
67bc0b1196
Make AsyncPollPending internal value as LightUserData
2021-05-02 12:06:32 +01:00
Alex Orlenko
e8505b5239
Change signature of Function::dump() to remove Result
2021-05-02 11:48:42 +01:00
Alex Orlenko
3f55958bdd
Stack assertions review
...
Other minor code and documentation updates
2021-05-02 11:42:03 +01:00
Alex Orlenko
463fc646bc
Refactor UserDataCell
2021-04-27 21:55:31 +01:00
Alex Orlenko
b5f1325f2f
Store nonstatic UserData pointer in self userdata (instead of metatable)
2021-04-27 17:06:37 +01:00
Alex Orlenko
269ef9c55d
Fix lua51 scope compilation
2021-04-27 10:11:37 +01:00
Alex Orlenko
f5b88624ce
Hide Deserializer inner fields
...
Improve documentation
2021-04-27 10:04:18 +01:00
Alex Orlenko
2fae94586d
Remove Result from lua.null() and lua.array_metatable(). They never fail.
2021-04-27 00:38:13 +01:00
Alex Orlenko
bc81d1016f
Add SerializeOptions to to change default Lua serializer behaviour
2021-04-27 00:35:53 +01:00
Alex Orlenko
c19f12898d
Replace lazy_static with once_cell
2021-04-27 00:29:38 +01:00
Alex Orlenko
c7541ef7d3
More tests
2021-04-27 00:29:38 +01:00
Alex Orlenko
41a1a0d15a
Add more checks for destructed userdata in AnyUserData
2021-04-27 00:29:38 +01:00
Alex Orlenko
c10169a380
cargo fmt and other minor fixes
2021-04-27 00:29:38 +01:00
Alex Orlenko
ced808d5ab
Don't trigger longjmp in rust.
...
Motivation behind this change is upcoming breaking change in Rust
compiler v1.52.0 to prevent unwinding across FFI boundaries.
https://github.com/rust-lang/rust/pull/76570
The new functionality requires nightly compiler to declare FFI
functions as "C-unwind".
The fundamental solution is to use C shim to wrap "e" and "m"
Lua functions in pcall.
Additionally define Rust calling convention to trigger lua_error
on Rust behalf.
2021-04-27 00:29:38 +01:00
Alex Orlenko
c95ac32741
Add inline(always) to some compat53 functions
2021-04-27 00:29:37 +01:00
Alex Orlenko
5a7ad9f7cd
Fix some clippy warnings & minor changes
2021-04-27 00:29:37 +01:00
Alex Orlenko
decb5b9e37
Make MetaMethod::name() public
...
Tests for UserDataMetatable::pairs()
2021-04-27 00:29:37 +01:00
Alex Orlenko
1635903d3f
Improve/fix scoped UserData drop
2021-04-27 00:29:37 +01:00
Alex Orlenko
2b2df708f9
Add `UserDataFields` API.
...
Provide safe access to UserData metatable and allow to define custom metamethods..
2021-04-27 00:29:37 +01:00
Alex Orlenko
cb1ac28f2a
v0.5.4
2021-04-20 02:05:05 +01:00
Alex Orlenko
0bd36b42e7
Make error::Error non_exhaustive
2021-04-16 22:10:10 +01:00
Alex Orlenko
e0da6ac929
Hide raw_sequence_values_by_len under async/serialize feature flags
2021-04-16 22:09:49 +01:00
Alex Orlenko
0c7db4916c
Serialize only known (registered) userdata.
...
This reverts commit 7332c6a
.
Non-static userdata is a special case and can cause segfault if try to serialize it.
Now it should be safe, plus I added non-static userdata destructor to generate better error messages
in case of accessing destructed userdata.
2021-04-16 22:01:55 +01:00
Alex Orlenko
b9589491e4
Improve panic handling (check for twice resumed panics)
2021-04-15 23:04:36 +01:00
Alex Orlenko
c363fb9288
v0.5.3
2021-03-04 00:01:06 +00:00
Alex Orlenko
726fde7e1f
Optimise async callbacks (polling)
...
call async Rust callback [sum] 3 10
time: [59.338 us 59.729 us 60.097 us]
change: [-10.336% -8.6212% -6.8003%] (p = 0.00 < 0.05)
Performance has improved.
2021-03-03 23:21:56 +00:00
Alex Orlenko
7cb9c4f39c
Fix bug in returning nil-prefixed multi values from async function
2021-03-03 22:32:22 +00:00
Alex Orlenko
b93ace0224
v0.5.2
2021-02-27 19:32:25 +00:00
Alex Orlenko
5f37bf812d
Fix/whitelist some clippy warnings
2021-02-27 19:23:08 +00:00
Alex Orlenko
7775b4a99c
Bump copyright year
2021-02-26 10:35:00 +00:00
Alex Orlenko
1d9cda10eb
Add ToLua implementation for Cow<str> and Cow<CStr>
2021-02-26 10:23:36 +00:00
Alex Orlenko
7332c6a28c
Remove `registered_userdata_mt` check
2021-02-22 20:38:36 +00:00
Alex Orlenko
335f433df4
Optimize callbacks
2021-02-21 23:52:20 +00:00
Alex Orlenko
2aed548747
Fix scoped async destruction of partially polled futures
2021-02-21 23:52:07 +00:00
Alex Orlenko
aeb66115f7
v0.5.1
2021-01-20 11:04:03 +00:00
Alex Orlenko
b6ff501b8c
Fix numeric types conversion for 32bit lua. Fix #27
2021-01-20 10:46:23 +00:00
Alex Orlenko
e62fd400d7
Remove unused exports from glue.{c,rs} && Fix some clippy warnings
2021-01-16 13:31:45 +00:00
Alex Orlenko
618874ef3c
v0.5.0
2020-12-31 13:39:42 +00:00
Alex Orlenko
9f82cbe0c5
Update documentation
2020-12-31 13:39:38 +00:00
Alex Orlenko
bedd430eb5
Re-export mlua_derive
2020-12-29 22:26:15 +00:00
Alex Orlenko
afc41ab23c
Add serialization example & update others
2020-12-29 21:39:34 +00:00
Alex Orlenko
ce8955f5b9
Don't try to disable c modules without `package` loaded. Fix #24
2020-12-22 23:05:08 +00:00
Alex Orlenko
6e2b687cb7
Serde support (serialize feature flag)
2020-12-14 00:51:26 +00:00
Kai Schmidt
c65058a40a
impl `ToLua` and `FromLua` for `HashSet` and `BTreeSet`
2020-09-27 17:54:47 -07:00
Alex Orlenko
a172c021c9
Update `set_memory_limit` doc
2020-07-30 12:16:25 +01:00
Alex Orlenko
de2c5cd9a9
Fix compilation warnings on nightly rust
2020-07-28 21:10:55 +01:00
Alex Orlenko
d201beadc9
Add ChunkMode enum to mark chunks as text or binary
2020-07-28 21:04:21 +01:00
Alex Orlenko
dd58cdad52
Add Function::dump() to dump lua function to a binary chunk
2020-07-27 23:26:33 +01:00
Eidolon
883bf082b9
Make Lua::load load binary chunks when unsafe
2020-07-27 03:37:38 -05:00
Alex Orlenko
4265250cfd
0.4.1 release
...
Fix docs.rs build features
Update Cargo.toml description
2020-06-08 14:08:07 +01:00
Alex Orlenko
efcaef3db7
Enable hooks support for LuaJIT
2020-06-07 20:38:19 +01:00
Alex Orlenko
0a13a9631d
Fix LuaJIT 2.1 libraries loading
2020-06-07 20:38:19 +01:00
Alex Orlenko
3d42bc4ca6
Refactor main_state handling
...
Don't allow to set hook if main_state is not available
Remove Lua 5.1 dirty hack
2020-06-07 20:38:19 +01:00
Alex Orlenko
95b9fe8dac
Fix clippy warnings
2020-06-07 20:38:19 +01:00
Alex Orlenko
5952a1f709
New `module` feature
...
Don't link module with Lua core (see: http://lua-users.org/wiki/BuildingModules )
Example and tests for modules
2020-06-07 20:38:11 +01:00
Alex Orlenko
d5c22d989a
Dirty hack to get lua 5.1 main state
2020-06-06 16:07:16 +01:00
Alex Orlenko
a9a4cf13f1
Add `has_metamethod` to `AnyUserData`
2020-06-06 16:07:16 +01:00
Alex Orlenko
c3822219e0
Add hooks support (based on rlua v0.17 implementation)
...
This feature works on lua54, lua53, lua52 and lua51 only.
LuaJIT is unstable.
2020-06-06 16:07:16 +01:00
Alex Orlenko
f6da437d8b
Update docs
2020-06-06 16:07:16 +01:00
Alex Orlenko
2fd6757f39
Add LuaJIT 2.0.5 stable support
2020-06-06 16:07:16 +01:00
Alex Orlenko
cccec914ca
Remove deprecated Table::call
2020-05-15 01:48:57 +01:00
Alex Orlenko
687ecc9247
Update documentation
2020-05-15 01:48:57 +01:00
Alex Orlenko
79bfb112aa
Remove redundant lifetimes
2020-05-15 01:48:57 +01:00
Alex Orlenko
9f2d598517
Add clippy check and fix clippy warnings
2020-05-15 01:48:56 +01:00
Alex Orlenko
5a9a308790
Provide safe and unsafe Lua modes:
...
- In safe mode Lua would not have ability to load C code via `require` or `package.loadlib`
- Unsafe mode allows everything.
2020-05-12 02:14:48 +01:00
Alex Orlenko
1b2b94c808
Use Rust allocator for new Lua states that allows to set memory limit
2020-05-12 02:14:48 +01:00
Alex Orlenko
526e7418d8
Add MetaMethod::Close to support Lua 5.4 to-be-closed variables
2020-05-12 02:14:47 +01:00
Alex Orlenko
539b569ff4
Add Lua 5.4 (rc2) support
2020-05-11 02:43:34 +01:00
Alex Orlenko
5c226b4915
Lua 5.4 FFI
2020-05-11 02:43:34 +01:00
Alex Orlenko
d366ce0dd4
Scope support (including async)
2020-05-11 02:43:34 +01:00
Alex Orlenko
2bd5c2f6ca
Hide Lua "Send" capability under the optional "send" feature flag
2020-05-11 02:43:34 +01:00
Alex Orlenko
7b0e4b4280
Add Send capability to Lua
2020-05-11 02:43:34 +01:00
Alex Orlenko
6e2bb73cff
Bind Futures lifetimes to 'lua rather than 'static.
...
Fix async examples.
2020-05-11 02:43:34 +01:00
Alex Orlenko
7efcee853d
Don't allow 'callback outlive 'lua
2020-05-11 02:43:33 +01:00
Alex Orlenko
d672e19365
Add ToLua implementation for slices and arrays
2020-04-29 16:12:58 +01:00
Alex Orlenko
bda399a5b4
Get yield function in the moment of async callback creation.
...
This is usefull to temporary override `coroutine.yield` prior to create_async_callback()
and then restore to original value.
2020-04-28 14:29:36 +01:00
Alex Orlenko
fe5e87b0f5
Fix bugs with metatable cache:
...
- Don't use thread_local as Lua can be created in one thread and executed in another (in module mode);
- Make per state storage without luaL_ref;
2020-04-28 14:29:14 +01:00
Alex Orlenko
0efa0fcb6a
Update documentation
2020-04-20 01:52:01 +01:00
Alex Orlenko
c826798a6d
Minor refactor
2020-04-19 16:51:35 +01:00
Alex Orlenko
ee08050c1f
Add TableExt trait with call_method/function methods
2020-04-19 16:15:16 +01:00
Alex Orlenko
222f4df668
Add family of `call_async` function
...
Update documentation
Move async tests to a separate file
2020-04-18 21:26:12 +01:00
Alex Orlenko
47e8a80c1c
v0.3.0-alpha.1 with async support
...
Squashed commit of the async branch.
2020-04-17 22:39:50 +01:00
Alex Orlenko
1a788c48f1
Cherry-pick changes from rlua:
...
- Make Value::type_name() public
- Update CallbackError and ExternalError Display impl
2020-04-15 21:23:00 +01:00
Alex Orlenko
e4dc773aa3
Remove `__ipairs` metamethod deprecated in lua 5.3 and not available by default
2020-01-25 20:47:36 +00:00
Alex Orlenko
27121c779d
Add raw_insert() and raw_remove() for tables (represented as lists)
2020-01-07 20:53:47 +00:00
Alex Orlenko
5eec0ef56b
Implement PartialEq trait for Value (and subtypes)
...
Add equals() method to compare values optionally invoking __eq.
2020-01-07 00:03:03 +00:00
Alex Orlenko
42b33849e1
Add support of loading a specified set of standard libraries
2019-12-26 23:04:21 +00:00
Alex Orlenko
143c3a81a7
Add pair and ipair metamethods support (lua 5.2/5.3 only)
2019-11-30 00:58:42 +00:00
Alex Orlenko
fd17a01456
Add Lua 5.2 support
2019-11-30 00:58:41 +00:00
Alex Orlenko
ae677b0918
Move lua 5.1 support under new "lua51" feature
2019-11-04 22:23:15 +00:00
Alex Orlenko
6874c2e004
Fix examples and docs
2019-11-04 22:23:15 +00:00
Alex Orlenko
29aa25a48b
Dont take wrapped panic in error_tostring()
2019-11-04 22:23:09 +00:00
Alex Orlenko
85607d8bfc
Impl Drop for Lua
2019-10-17 17:05:42 +01:00
Alex Orlenko
ec08a76a41
Don't store extra data in the lua_State extra space
2019-10-17 17:05:42 +01:00
Alex Orlenko
c4fd7a9faf
Lua 5.1 support
2019-10-17 17:05:42 +01:00
Alex Orlenko
b7c578c274
Replace libc with std::os::raw
2019-10-02 22:12:28 +01:00
Alex Orlenko
224ed8ff52
Add mlua_derive proc macro module
2019-10-02 22:12:27 +01:00
Alex Orlenko
cb109f6e36
Rename to mlua
2019-10-01 16:11:12 +01:00
Alex Orlenko
2e5762f6e5
fmt glue.c
2019-09-30 22:34:47 +01:00
Alex Orlenko
2ca4273ffb
Add call method to table
2019-09-30 22:15:27 +01:00
Alex Orlenko
78480b5f31
Use main state to store extra data and auxiliary registries
2019-09-30 22:14:58 +01:00
Alex Orlenko
45159bfda7
Add Table::raw_remove method
2019-09-29 12:56:06 +01:00
Alex Orlenko
0c230a3037
Allow to catch rust panics via pcall
2019-09-29 12:56:06 +01:00
Alex Orlenko
b23ee6a162
cargo fmt
2019-09-29 12:56:03 +01:00
Alex Orlenko
affa85feb0
Backport changes from rlua 0.16 (master branch)
2019-09-29 12:53:13 +01:00
Alex Orlenko
53b352466e
Replace ffi module with implementation from "jcmoyer/rust-lua53" crate
2019-09-29 12:42:07 +01:00
Alex Orlenko
14a68dd6d2
Add dyn to trait objects
2019-09-29 12:42:07 +01:00
Alex Orlenko
47a8ac2b05
Allow only init Lua from an exiting state
2019-09-26 19:17:51 +01:00
kyren
65d8ad2f86
Allow non-utf8 Lua source in load / exec / eval
2018-10-01 06:00:21 -04:00
kyren
51339ecb1d
Some documentation and changelog fixes
2018-10-01 05:14:43 -04:00
kyren
167184ae76
Allow arbitrary [u8] Lua strings
2018-09-30 15:42:04 -04:00
kyren
6d17a383df
Avoid mem::uninitialized in generic context as it is unsound with e.g. bool
2018-09-26 21:07:11 -04:00
kyren
58ce05ff9a
Improve the situation with numerical conversion
...
This is a somewhat involved change with two breaking API changes:
1) Lua::coerce_xxx methods now return Option (this is easier and faster than
dealing with Result)
2) rlua numeric conversions now allow more loss of precision
conversions (e.g. 1.5f32 to 1i32)
The logic for the first breaking change is that mostly the coerce methods are
probably used internally, and they make sense as low-level fallible casts and
are now used as such, and there's no reason to confuse things with a Result with
a large error type and force the user to match on the error which will hopefully
only be FromLuaConversionError anyway.
The logic for the second change is that it matches the behavior of
num_traits::cast, and is more consistent in that *some* loss of precision
conversions were previously allowed (e.g. f64 to f32).
The problem is that now, Lua::coerce_integer and Lua::unpack::<i64> have
different behavior when given, for example, the number 1.5. I still think this
is the best option, though, because the Lua::coerce_xxx methods represent how
Lua works internally and the standard C API cast functions that Lua provides,
and the ToLua / FromLua code represents the most common form of fallible Rust
numeric conversion.
I could revert this change and turn `Lua::eval::<i64>("1.5", None)` back into an
error, but it seems inconsistent to allow f64 -> f32 loss of precision but not
f64 -> i64 loss of precision.
2018-09-26 21:01:54 -04:00
kyren
c3d0110722
Return rlua::Error on out of range numeric conversions using num_traits::cast
2018-09-24 22:14:50 -04:00
kyren
c07abdc03e
Merge pull request #79 from acrisci/system-lua-pkg-config
...
find system lua with pkg-config
2018-09-16 20:57:45 -04:00
kyren
b8da08187d
Move integration tests into top-level tests directory
...
other minor refactors
2018-09-16 20:15:51 -04:00
kyren
7eb71fb1df
Rename Scope::create_userdata to Scope::create_nonstatic_userdata
...
avoids clashing with the previous method name to avoid confusion
2018-09-16 19:54:12 -04:00
kyren
6153ec4b95
basic tests for nonstatic userdata
2018-09-04 19:41:00 -04:00
kyren
add547b356
comment terminology... fix?
2018-09-04 19:09:09 -04:00
kyren
703601e348
code re-org have slightly less pub(crate) items
2018-09-04 19:05:21 -04:00
kyren
30a94c4dec
Comment updates that I really hope are correct
...
Tried to explain the rationale for safety around callbacks in Lua and Scope a
bit better, because every time I don't look at this for a while I forget my
reasoning. I'm not always so great at using the right terminology, so to
whoever reads this, if I got this wrong please tell me.
2018-09-04 17:36:06 -04:00
kyren
bd00af2bac
Initial design for non-'static scoped userdata
...
Uses the same UserData trait, and should at least in theory support everything
that 'static UserData does, except that any functions added that rely on
AnyUserData are pretty much useless.
Probably pretty slow and I'm not sure how to make it dramatically faster, which
is a shame because generally when you need non'-static userdata you might be
creating it kind of a lot (if it was long-lived, it would probably be 'static).
Haven't added tests yet, will do that next.
2018-09-04 03:40:13 -04:00
kyren
37165a8201
Don't leak userdata if the metatable creation errors or panics
2018-09-04 03:38:22 -04:00
kyren
89b9968920
small macro style change
2018-09-02 20:34:39 -04:00
kyren
9c4d451d4c
Implement tuple MultiValue tuple conversion up to 16
2018-09-02 02:48:54 -04:00
kyren
1a9c50f228
Solve (maybe) *another* soundness issue with `Lua::scope`
...
Callbacks should not be able to capture their arguments and hold onto them,
because the `&Lua` used in previous calls will not remain valid across calls.
One could imagine an API where the specific `&Lua` is simply stored inside the
`Scope` itself, but this is harder to do, and would (badly) encourage storing
references inside Lua userdata.
Ideally, the only way it should be possible to store Lua handles inside Lua
itself is through usafety or the `rental` crate or other self-borrowing
techniques to make references into 'static types. If at all possible this
roadblock should stay, because reference types inside userdata are almost always
going to lead to a a memory leak, and if you accept the risks you should just
use `RegistryKey` with its manual removal.
2018-08-05 20:03:47 -04:00
kyren
b35ff5fa12
Remove out of date documentation, simpler scope lifetimes
...
The documentation describing it being a logic bug to access "outer" callback
handles when inside an "inner" callback is inaccurate, that was only true when
using an older design for handle values.
Also, there is no reason to have a separate 'callback lifetime, because 'scope
is already invariant and just using 'scope seems equivalent.
2018-08-05 19:02:19 -04:00
kyren
a2615a8cbb
Fix for a soundness bug around scope, don't allow callback parameters to escape
...
Also includes other fixes for compiletest_rs failures, and a small reorg of tests
2018-08-05 11:54:33 -04:00
kyren
8366960368
Update to failure 0.1.2, rename deprecated methods
2018-08-05 11:48:25 -04:00
kyren
2e1bdb64c0
format with up-to-date rustfmt
2018-08-05 09:51:39 -04:00
kyren
e6688e1db2
very small doc fixes
2018-08-05 09:51:32 -04:00
kyren
02bc8da203
Prepare for 0.14.0 release
2018-06-29 01:24:28 -04:00
Tony Crisci
66e49518d3
find system lua with pkg-config
2018-05-14 08:51:51 -04:00
kyren
71f3dd50a1
New approach for ref types, use an auxillary thread stack
...
Vastly simpler and less magical than using a fixed size magical section of the
active stack, and seems to be no slower. The only real downside is that
it *seems* extremely extremely hacky (and to be fair, it is).
2018-03-28 01:09:51 -04:00
kyren
5aa22de68e
Use git dependency on failure 1.0 for right now
2018-03-20 14:07:32 -04:00
kyren
8b9ab3d031
Small renames and comments to better communicate the intention of stack checking functions
2018-03-19 17:42:10 -04:00
kyren
a05f0d5cd0
Where possible, don't call to_lua / from_lua / to_lua_multi / from_lua_multi callbacks during Lua stack manipulation
...
This should protect against being able to trigger a stack assert in Lua. Lua
and associated types shoul be able to assume that LUA_MINSTACK stack slots are
available on any user entry point. In the future, we could turn check_stack
into something that only checked the Lua stack when debug_assertions is true.
2018-03-19 15:16:40 -04:00
kyren
0d5e45e800
Always ensure LUA_MINSTACK available stack spaces on callback
...
Otherwise, cleanly error with an appropriate stack error. Part of an effort to
ensure that it should not be possible to trigger a stack space assert.
2018-03-19 14:36:01 -04:00