Commit Graph

143 Commits

Author SHA1 Message Date
Jonas Schievink df5c8fa4b0 Remove unneeded variable from example
Apparently doctests swallow *all* of their output, including compiler
warnings, by default.
2017-07-25 22:58:18 +02:00
kyren 8515db4c82 Merge pull request #24 from jonas-schievink/examples
Enhance documentation and add more examples
2017-07-25 00:40:11 -04:00
kyren 8194c4d411 Use stack_guard when the function doesn't return Result
Also, simplify some things that used to use error_guard but now are not
2017-07-25 00:37:44 -04:00
kyren 3579b83888 Merge pull request #23 from jonas-schievink/string
Beef up the String API
2017-07-25 00:31:56 -04:00
Jonas Schievink 335ecbbac6 tiny typo 2017-07-25 02:13:11 +02:00
Jonas Schievink 54464b0842 AnyUserData docs 2017-07-25 02:11:17 +02:00
Jonas Schievink 58c80c05be Replace unneeded eval by exec 2017-07-25 02:05:57 +02:00
Jonas Schievink 34fd4a00ce Document UserDataMethods 2017-07-25 02:00:49 +02:00
Jonas Schievink e2aeca58ae Table docs and examples
This looks almost like the standard lib now :)
2017-07-25 01:40:53 +02:00
Jonas Schievink 09dc89895a Add an example 2017-07-25 00:42:59 +02:00
Jonas Schievink 1f2fc6455f Beef up the String API
Adds `as_bytes` to view the string as a `[u8]`. Unlike the conversion to
a `&str` slice, this cannot fail.

Adds tests for both functions, which made me notice that `to_str` is
broken when the string contains null bytes, so I made it use the
`as_bytes` method.
2017-07-25 00:37:37 +02:00
Jonas Schievink 0b7b7e9d79 Add Function::call example 2017-07-25 00:16:43 +02:00
Jonas Schievink 59ab95f6ff Beef up Function::bind docs + example 2017-07-25 00:05:36 +02:00
Jonas Schievink 63e0587d26 Remove "equivalent" Lua code from Function::bind
Not only was this code not equivalent, it didn't even run since varargs
cannot be used as an upvalue (it's multiple values, after all).

Since Lua does not allow passing 2 sets of variadic arguments to a
function, the resulting code would be *very* complex and would involve
packing both sets of varargs into tables, concatenating them, then
`table.unpack`ing them to finally pass them.

This complex code would only make the docs more difficult to understand,
which is the opposite effect I originally intended with this. Let's just
get rid of this bad equivalence.
2017-07-24 23:52:15 +02:00
Jonas Schievink 9b809a8197 Make examples adhere to API guidelines
> Examples use ?, not try!, not unwrap (C-QUESTION-MARK)

> Like it or not, example code is often copied verbatim by users.
> Unwrapping an error should be a conscious decision that the user
> needs to make.
2017-07-24 23:45:24 +02:00
kyren 69fa01df45 auto formatting 2017-07-24 10:40:00 -04:00
kyren 1eaa201441 Merge pull request #17 from jonas-schievink/remove-lua-prefix
Remove the `Lua*` prefix from most types
2017-07-24 07:31:59 -04:00
kyren b3b0f17f59 Slight changes for consistency
I am not actually sure what the best pattern is to import conflicting
standard types, but this is at least consistent.
2017-07-24 07:30:29 -04:00
kyren 698785df64 Merge remote-tracking branch 'base/master' into remove-lua-prefix 2017-07-24 07:21:54 -04:00
kyren c7d2311c6a Do several more Lua prefix renames, add prelude module
Rename the following:

LuaNil => Nil
LuaExternalError => ExternalError
LuaExternalResult => ExternalResult
LuaCallback => Callback (internal only)

Use qualified re-exports at the top of the module.

Add a new public 'prelude' module which re-exports everything with a
non-conflicting name (Adds back the Lua prefix), and is meant to be imported
unqualified.
2017-07-24 07:12:52 -04:00
kyren 44c99ea1b9 Remove error_guard
Replace with custom protected versions of lua ffi functions.
2017-07-23 13:41:46 -04:00
Jonas Schievink 8f044755dc Fixes after rebase 2017-07-23 18:37:48 +02:00
Jonas Schievink b47f9e0d76 Continue renames in comments/strings 2017-07-23 18:36:50 +02:00
Jonas Schievink 8bd0c2c812 Rename LuaString to String
This required a lot of little adjustments where we used std's `String`
before. In downstream code, this shouldn't be necessary, as you can just
do `use rlua::String as LuaString` to disambiguate.
2017-07-23 18:36:50 +02:00
Jonas Schievink 9df7727eaa Remove the Lua* prefix from most types
cc #15

Doesn't touch `LuaString` mainly because that's a *lot* of renaming work
and the code looks weird. Also I want feedback before I proceed.
2017-07-23 18:36:50 +02:00
kyren 91dbbfe759 More aggressively remove code from error_guard 2017-07-23 10:41:51 -04:00
kyren d5ec09614c Merge pull request #22 from jonas-schievink/droptest
Add a test ensuring that userdata is dropped
2017-07-23 10:09:16 -04:00
Jonas Schievink 984ade66cc Make test_expired_userdata less noisy
The printing was cluttering the test runner output
2017-07-23 12:51:14 +02:00
Jonas Schievink 1c53ba3d4c Add a test ensuring that userdata is dropped 2017-07-23 12:50:42 +02:00
kyren 2bd7a2ee8c Reduce error_guard code to as little as possible
Also ensure that on error in error_guard the stack is in a predictable place.
2017-07-23 02:08:32 -04:00
kyren 36134e6373 Userdata can have __gc metamethods called multiple times
Lua 5.3 has the ability for scripts to define __gc metamethods on
tables, which gives them the ability to "resurrect" userdata after __gc
has been called.  This means, __gc can be called multiple times on
userdata.  This commit protects against this by simply panicking on
access after resurrection.  This is possibly not the best approach?
2017-07-23 01:00:33 -04:00
kyren 396a4b0916 Possibly this fixes rust stable? 2017-07-19 21:32:54 -04:00
kyren 5b723d58be Allow callback functions to have 'lua lifetime rather than 'static
Fixes #14
2017-07-19 21:28:16 -04:00
kyren 6df96d8eb1 Rename LightUserData to LuaLightUserData for consistency
I know, this is the opposite of PR #17 wishes to do, please don't take this as
an indication that I would wish to do the opposite.  I actually want to discuss
PR #17 with you, but I'm not sure about it yet, and my pedantry will not allow
me to let this remain inconsistent in the meantime.  This way, either way it's
consistent haha.
2017-07-19 20:15:46 -04:00
kyren 160c5405e1 Add back explanatory comment about trying "return <expr>" before statement
Also run through rustfmt
2017-07-19 20:10:11 -04:00
kyren 4f2d894a52 Merge pull request #16 from jonas-schievink/eval-name
Give `Lua::eval` a source name param and simplify
2017-07-19 20:07:37 -04:00
Jonas Schievink d9098900d1 Give Lua::eval a source name param and simplify 2017-07-16 22:53:32 +02:00
kyren eafe4c7c30 cargo version bump for linking fix 2017-07-09 17:20:51 -04:00
kyren cc216721b8 slightly cleaner way of linking to an external liblua5.3, if the option is enabled 2017-07-09 17:05:54 -04:00
kyren b8fab1b3ed Make the builtin version of lua 5.3 optional
In case you would need to build a crazy custom version of lua for a weird
platform.  This could possibly be done in a cleaner way.
2017-07-05 19:35:53 -04:00
kyren 6b8a4240e2 format fix, fixes rustfmt warning 2017-06-30 15:17:53 -04:00
kyren d9478d6cd7 Comments should be wrapped at 100 lines, according to standard 2017-06-27 14:05:49 -04:00
kyren 6f0caa4a6d Update README, small example changes. 2017-06-25 22:25:28 -04:00
kyren 8156b7e529 Small README typo fix 2017-06-25 18:33:02 -04:00
kyren cd4343c83e Bump cargo version (again! I'm sorry!), and update README 2017-06-25 18:27:52 -04:00
kyren d3b311fe49 Another major API change, out of stack space is not an Err
It, ahem "should not" be possible to exhaust lua stack space in normal usage,
and causing stack errors to be Err is slightly obnoxious.  I have been wanting
to make this change for a while, and removing the callback API from tables makes
this sensible *I think*.

I can think of a couple of ways that this is not technically true, but I think
that they are acceptable, or should be handled differently.

One, you can make arbitrarily sized LuaVariadic values.  I think this is maybe a
bug already, because there is an argument limit in Lua which is lower than the
stack limit.  I'm not sure what happens there, but if it is a stack based panic,
(or any panic?) it is a bug.

Two, I believe that if you recurse over and over between lua -> rust -> lua ->
rust etc, and call rlua API functions, you might get a stack panic.  I think for
trusted lua code, this is morally equivalent to a regular stack overflow in
plain rust, which is already.. well it's not a panic but it's some kind of safe
crash I'm not sure, so I think this is acceptable.  For *untrusted* lua code,
this could theoretically be a problem if the API provided a callback that would
call back into lua, then some lua script could force a stack based panic.  There
are so many concerns with untrusted lua code, and this library is NOT safe
enough yet for untrusted code (it doesn't even provide an option to limit lua to
the safe API subset yet!), so this is not currently an issue.  When the library
provides support for "safe lua", it should come with big warnings anyway, and
being able to force a stack panic is pretty minor in comparison.

I think if there are other ways to cause unbounded stack usage, that it is a
bug, or there can be an error just for that situation, like argument count
limits.

This commit also fixes several stupid bugs with tests, stack checking, and
panics.
2017-06-25 17:15:11 -04:00
kyren bf9bf849c2 Simplification of error types
The multi-level error types were a mistake.  Probably should have waited on the
cargo version bump, oh well.
2017-06-25 04:25:48 -04:00
kyren 8548fbd263 Bump cargo version to 0.7.0
I'm not 100% sold on the LuaError design, I think there are a lot of questions
still, but there have been enough bugfixes that it's better to do a cargo bump.
2017-06-25 02:41:02 -04:00
kyren 7dba280a4b Tests for LuaError conversion, Important pcall / xpcall bugfixes. 2017-06-25 02:40:09 -04:00
kyren cbae1a805a This is a SLIGHTLY better implementation I think. 2017-06-25 02:04:14 -04:00