Commit Graph

596 Commits

Author SHA1 Message Date
kyren 8820e7705c test `owns_registry_value` 2018-02-06 00:54:04 -05:00
kyren 79635f29be Add method to check whether a RegistryKey is owned by a given `Lua` instance 2018-02-06 00:41:51 -05:00
kyren d43f8129f3 experimentally make `RegistryKey` Send 2018-02-06 00:05:35 -05:00
kyren fe35742026 Set the metatable of __gc'ed userdata to something more informative 2018-02-05 14:40:20 -05:00
kyren 6382baa991 Use ptr::write to initialize uninitalized memory, NOT mem::replace 2018-01-27 18:38:00 -05:00
kyren 77eb73a50c Simplify handling of userdata __gc and resurrected userdata.
Now, simply remove the userdata table immediately before dropping the userdata.
This does two things, it prevents __gc from double dropping the userdata, and
after the first call to __gc, it prevents the userdata from being identified as
any particular userdata type, so it cannot be misused after being finalized.

This change thus removes the userdata invalidation error, and simplifies a lot
of userdata handling code.

It also fixes a panic bug.  Because there is no predictable order for
finalizers, it is possible to run a userdata finalizer that does not resurrect
itself before a lua table finalizer that accesses that userdata, and this means
that there were several asserts that were possible to trigger in normal Lua code
in util.rs related to `WrappedError`.

Now, finalized userdata is simply a userdata with no methods, so any use of
finalized userdata becomes a normal script runtime error (though, with a
potentially confusing error message).  As a future improvement, we could set
a metatable on finalized userdata that provides a better error message.
2018-01-27 18:27:01 -05:00
kyren cbc882bad0 Bump cargo version to 0.11.0 2018-01-26 22:03:13 -05:00
kyren 1ffc6ee36f update changelog for 0.11.0 2018-01-26 21:58:23 -05:00
kyren 3db880af04 Update README for clarity, typofixes 2018-01-26 21:37:17 -05:00
kyren 8527266d3b Add an API that exposes the functionality of `lua_getuservalue` and `lua_setuservalue` 2018-01-26 20:06:18 -05:00
kyren 0801104762 ACTUALLY expose `RegistryKey` API
Also fixes a safety issue with RegistryKey, where you could use RegistryKeys
with mismatching Lua instances.
2018-01-26 19:43:53 -05:00
kyren b44a6c95df
Merge pull request #66 from jonas-schievink/docs
Clarify a few docs
2018-01-26 17:56:15 -05:00
Jonas Schievink ff847ea438 __gc would be safe now, reword MetaMethod docs accordingly 2018-01-26 21:31:01 +01:00
Jonas Schievink 0a4ae8d859 Additional `MetaMethod` docs 2018-01-26 19:44:35 +01:00
Jonas Schievink 79b028419f create_function docs: mention what returning `Err` does 2018-01-26 19:24:01 +01:00
Jonas Schievink 67f8e1d49c Fix rustdoc rendering warning 2018-01-26 18:35:21 +01:00
Jonas Schievink 2d89eb39da Don't use a `StdResult` alias for better docs.
This is a pretty opinionated change, but I find documentation to be
clearer when using plain old names everybody understands immediately.
2018-01-26 18:32:58 +01:00
kyren 50ecf39beb
Merge pull request #63 from chucklefish/failure
Experimentally use the `failure` crate for errors
2018-01-24 15:02:31 -05:00
kyren 79ba909db0 Experimentally use the `failure` crate for errors 2018-01-21 20:08:51 -05:00
kyren 685fc12aad Missed unprotected call to luaL_ref 2017-12-17 16:55:37 -05:00
kyren 443054f753 Update README, CHANGELOG, and Cargo.toml for 0.10.2 2017-12-17 01:14:11 -05:00
kyren 42007260ca Add automatic Lua "user accessible registry" keys
Also, during the implementation of this, I noticed a problem with the 0.10
memory safety, which is that luaL_ref is also memory unsafe.  I attempted to
change the API to support luaL_ref potentially returning Result, but this change
will cause an enormous amount of API chaos, (just as an example, it becomes
impossible to implement Clone for LuaRef as is).  Instead, luaL_ref now is
guarded by gc_guard.
2017-12-17 00:46:22 -05:00
kyren e6d84a4bb3 Change API names, add unset function 2017-12-16 18:05:53 -05:00
kyren ad23fe83e0 auto formatting 2017-12-16 17:46:32 -05:00
kyren bfb6111e0a API for registry access via string keys only (for now)
Also includes some fixes for stack usage and changes an assert_eq to lua_assert
2017-12-16 17:44:13 -05:00
kyren 56c9493f23 spelling fix for my spelling fix 2017-12-05 07:30:34 -05:00
kyren c67ae24c97 bump version for doc spelling fix 2017-12-05 00:16:35 -05:00
kyren d609d38675 spelling fixes 2017-12-05 00:12:00 -05:00
kyren 447810364a extra space 2017-12-04 23:57:08 -05:00
kyren 66a4e9a8e7 Add `ExpiredUserData` error and avoid what was previously a panic
Also make sure that panic messages clearly state that they are internal errors,
so people report them as a bug.  Since the only panics left are all internal
errors, just move the internal error message into the panic / assert macros.
2017-12-04 02:50:27 -05:00
kyren 80a98ef29c Couple of changes:
- Update readme, changelog, cargo version number in preparation for release
- Remove panicking behavior on recursive callback calls, add additional error
  variant for recursive callback errors.
2017-12-04 01:47:04 -05:00
kyren 0c644e7136 more reorganization in an attempt to shrink the size of lua.rs 2017-12-04 01:04:12 -05:00
kyren a44b6b5170 Move function and thread into their own modules, auto-formatting 2017-12-04 00:57:39 -05:00
kyren 51838f3509 Include garbage collector error type, remove unnecessary setmetatable wrapper 2017-12-04 00:35:13 -05:00
kyren d76935e683 I *THINK* this might actually be it, is rlua 'm' safe now? 2017-12-04 00:15:20 -05:00
kyren d0ff10b528 I believe this is all the external API changes necessary for 'm' safety 2017-12-03 23:45:00 -05:00
kyren e80e7d4540 missing push_string calls in util 2017-12-03 23:25:03 -05:00
kyren 67e8907f19 Couple of changes in preparation for 'm' safety:
- auto formatting
- add gc control to ffi
- add gc_guard to util functions
- use gc_guard to make util error handling functions never trigger __gc
  metamethod Lua errors even without __gc metatable wrapper
- sort of a technicality, don't call luaL_requiref outside of the Lua
  constructor, as it could trigger the garbage collector when user code has had
  a chance to set __gc metamethods.  Changes the API to load the debug table.
2017-12-03 23:01:03 -05:00
kyren 0bd676aa81 more refactoring 2017-12-03 21:19:32 -05:00
kyren c95f591935 remove specific protected functions in favor of generic protect_lua_call 2017-12-03 20:29:41 -05:00
kyren 37a3145ced missed stack size fix 2017-12-03 20:15:57 -05:00
kyren a490229f31 More refactoring towards mem error safety 2017-12-03 20:10:45 -05:00
kyren 0909ca34fc auto formatting 2017-12-03 18:25:53 -05:00
kyren e41c72d642 more refactoring trying to find a workable path to 'm' error safety 2017-12-03 18:15:31 -05:00
kyren 5742e3f20a still making small structural changes
slowly trying to refactor things until using all the protected calls in
protected_ffi is workable
2017-12-02 19:16:57 -05:00
kyren f51a822738 auto-formatting 2017-12-02 18:56:14 -05:00
kyren 8a6161b16f new strategy for protected ffi calls 2017-12-02 18:37:17 -05:00
kyren b7c80ec066 make some things private 2017-12-02 17:47:00 -05:00
kyren 2b7e89e7c6 move error / panic metatable creation 2017-12-02 17:13:46 -05:00
kyren fa1703d3d1 split macros into their own file 2017-12-02 17:04:33 -05:00
kyren 8a7e03978b Experimental protected versions of all used 'm' erroring functions 2017-12-02 15:41:53 -05:00
kyren cfa2b34a7b Bump version to 0.9.7, update changelog 2017-11-08 14:07:48 -05:00
kyren cf013a6a43
Merge pull request #55 from Timidger/bugfix/setting_metatable_nil
Fixes error when setting metatable to nil
2017-11-08 00:32:38 -05:00
Timidger f9c451bd26 Add test ensuring behaviour is correct 2017-11-07 20:13:52 -08:00
Timidger 8ac27877e4 Only get gc on setmetatable if metatable isn't nil 2017-11-07 20:13:30 -08:00
kyren 33eff0e132
Merge pull request #54 from Timidger/feature/debug-unsafe-lib
Added ability to load debug lib, Fixes #52
2017-11-04 02:57:03 -04:00
Timidger a137086064 Check that we have enough room on stack for module 2017-10-29 15:26:40 -07:00
Timidger 71fdca5477 Fixed test to use Lua assert 2017-10-29 15:24:54 -07:00
Timidger 316c6976e4 Added pop after loading lua library 2017-10-29 14:54:55 -07:00
Timidger 26b7901ab3 Added test for loading unsafe debug library in Lua 2017-10-29 14:53:30 -07:00
Timidger 2658433bd1 Added ability to load debug lib, Fixes #52 2017-10-28 20:46:24 -07:00
kyren 00a3153ae0 Bump version / changelog for 0.9.6 2017-10-26 16:53:14 -04:00
kyren 892069edd6 Correctly wrap external errors so that Debug trait and Error::cause are correct 2017-10-26 16:49:16 -04:00
kyren 8592af1b16 Bump version to 0.9.5, update changelog 2017-10-25 14:55:05 -04:00
kyren deab88a851 Fix xpcall return values, make the tests a lot better. 2017-10-25 14:51:10 -04:00
kyren 773bf3e9ba Fix some clippy lints, possible edge case API incompatibility around HashMap 2017-10-24 16:15:57 -04:00
kyren 4bbeeb2b2d Update to 0.9.4, update changelog 2017-10-24 08:59:55 -04:00
kyren f634ce1101 It turns out, luaL_ref uses 1 extra internal stack space
All my check_stack calls are wrong, and this blows up very easily in situations
with recursive data structures.
2017-10-24 08:53:26 -04:00
kyren e7661a5c27 auto-formatting 2017-10-23 16:42:20 -04:00
kyren 8c30acec4e Possibly better stack behavior 2017-10-23 15:17:46 -04:00
kyren ba183b0119 Fix quadratic behavior in bind 2017-10-23 14:50:47 -04:00
kyren 4a7881f652 Whoops, messed up the version in the changelog. 2017-10-14 19:33:53 -04:00
kyren 401c06cfe6 Bump cargo version to 0.9.3, update changelog. 2017-10-14 19:27:24 -04:00
kyren 8a2cfeb00d Update readme regarding plans for panic / abort safety and other clarifications 2017-10-14 18:53:05 -04:00
kyren 4b7a3403bc Cleanups of userdata handling, particularly around callbacks
First, make sure that `add_methods` cannot trigger another userdata registry
insert, causing an unintended panic.  Second, remove `RefCell` surrounding
userdata hashmap, as this change makes it no longer needed.  Third, add a
`RefCell` around `Callback` because FnMut means that callbacks cannot recurse
into themselves, and panic appropriately when this happens.  This should
eventually be turned into an error.
2017-10-14 18:26:09 -04:00
kyren c5a4dfd7eb more reorganization, move simple type defines to types.rs module 2017-09-30 01:27:18 -04:00
kyren 8324d9e648 move userdata tests into userdata.rs 2017-09-30 01:13:58 -04:00
kyren 7a45490aca crudely move LightUserData/UserData/AnyUserData to their own module 2017-09-30 01:08:08 -04:00
kyren cf764fbabe move table tests to table.rs 2017-09-30 00:53:28 -04:00
kyren f785180a77 Merge pull request #45 from jonas-schievink/string
Extend String API
2017-09-30 00:43:19 -04:00
kyren cc502379c1 Print CallbackError in a better way
CallbackError now, instead of displaying the cause description, instead prints
"callback error: <traceback>".  Since the cause is already in the cause chain of
the error, this avoids repeatedly printing the cause of callback errors along
the chain, and also actually prints the callback when using Display on each
error in the chain.
2017-09-26 11:36:50 -04:00
kyren ef538d8757 Update rlua to 0.9.2, add SOME kind of changelog. 2017-09-24 19:32:26 -04:00
kyren 61dc2823a6 Merge pull request #47 from jonas-schievink/base--
Don't load the base library into the "base" global
2017-09-16 21:09:33 -04:00
Jonas Schievink a7a080b50a Don't load the base library into the "base" global
The stock Lua interpreter doesn't do this either. AFAIK the "base" library is supposed to be loaded into "_G" only as it contains functions like `assert` and `error`.
2017-09-17 00:07:19 +02:00
kyren 4b035af0e8 Merge pull request #44 from jonas-schievink/linkfix
Fix links in `Variadic` docs
2017-09-15 19:43:12 -04:00
Jonas Schievink a5b6d8fc85 Add `String::as_bytes_with_nul`
This cannot be accomplished without using unsafe code, which justifies this addition in my opinion.

Also changes "null" to "nul" to be in sync with `std::ffi` docs. Naming is derived from `CStr::to_bytes_with_nul`, using `as_*` instead of `to_*` since this isn't doing any computation.
2017-09-15 23:33:28 +02:00
Jonas Schievink 0e4414fc0b Impl `AsRef<[u8]>` and generic `PartialEq` for `String`
Tests are also moved to the new string.rs file to ensure related functionality is in one place.
2017-09-15 23:10:53 +02:00
Jonas Schievink 823dd39e5d Move string and table wrappers into own files 2017-09-15 22:03:14 +02:00
Jonas Schievink 14d8b4a0a2 Fix links in `Variadic` docs 2017-09-15 20:56:46 +02:00
kyren 121bac8394 Merge pull request #43 from jonas-schievink/dire-dire-docs
More documentation work
2017-09-14 23:27:57 -04:00
Jonas Schievink 22cbed0240 More documentation work 2017-09-14 22:59:59 +02:00
kyren d862c0f08e Add methods to get/set metatables on Table
Also make Table::raw_get actually use raw get function instead of lua_gettable!
2017-09-10 19:14:51 -04:00
kyren 13dc68c36d Rename 'lua lifetimes to actually be 'lua 2017-09-09 21:29:22 -04:00
kyren ec088300f2 Specify `gcc` crate dependency with minimum bound on version with `Build` 2017-09-09 21:04:57 -04:00
kyren 94ee0aaf16 Merge pull request #42 from thelearnerofcode/master
Switched gcc::Config to gcc:Build in build.rs.
2017-09-09 20:58:07 -04:00
thelearnerofcode 21bb04da36 Switched gcc::Config to gcc:Build in build.rs. 2017-09-09 15:03:35 -04:00
kyren 5bf228fbd0 Fixup grammar error in doc comments. 2017-08-03 17:07:54 -04:00
kyren 50436d3463 autoformatting 2017-08-03 02:03:28 -04:00
kyren 1b082b17bc Don't refer to renamed prelude versions of types, refer to their normal name 2017-08-02 18:21:47 -04:00
kyren 1efef92570 I guess I need to bump the cargo version even to change the badge. 2017-08-02 17:43:44 -04:00