summaryrefslogtreecommitdiff
path: root/examples/repl.rs
AgeCommit message (Collapse)Author
2019-11-04Fix examples and docsAlex Orlenko
2018-10-01Allow non-utf8 Lua source in load / exec / evalkyren
2018-09-24Upgrade rustyline to 2.0 to avoid confusionkyren
2017-10-23auto-formattingkyren
2017-08-03autoformattingkyren
2017-08-02Merge pull request #34 from jonas-schievink/better-errorkyren
[WIP] Enhanced errors
2017-08-02Fix multiline inputsJonas Schievink
2017-08-02Use rustyline for the REPLJonas Schievink
This makes the REPL more usable as you can now edit lines and recall previously executed statements.
2017-08-01Merge IncompleteStatement into SyntaxErrorJonas Schievink
Both are a form of syntax error, this reflects that better. No functionality is lost, incomplete inputs are moved to a bool field of SyntaxError.
2017-07-23Rename `LuaString` to `String`Jonas Schievink
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-23Remove the `Lua*` prefix from most typesJonas Schievink
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-16Give `Lua::eval` a source name param and simplifyJonas Schievink
2017-06-25Simplification of error typeskyren
The multi-level error types were a mistake. Probably should have waited on the cargo version bump, oh well.
2017-06-24Lots of LuaError changeskyren
It is possible that I have gone too far here into error discrimination and should scale it back, not sure yet.
2017-06-24Big API incompatible error change, remove dependency on error_chainkyren
The current situation with error_chain is less than ideal, and there are lots of conflicting interests that are impossible to meet at once. Here is an unorganized brain dump of the current situation, stay awhile and listen! This change was triggered ultimately by the desire to make LuaError implement Clone, and this is currently impossible with error_chain. LuaError must implement Clone to be a proper lua citizen that can live as userdata within a lua runtime, because there is no way to limit what the lua runtime can do with a received error. Currently, this is solved by there being a rule that the error will "expire" if the error is passed back into rust, and this is very sub-optimal. In fact, one could easily imagine a scenario where lua is for example memoizing some function, and if the function has ever errored in the past the function should continue returning the same error, and this situation immediately fails with this restriciton in place. Additionally, there are other more minor problems with error_chain which make the API less good than it could be, or limit how we can use error_chain. This change has already solved a small bug in a Chucklefish project, where the conversion from an external error type (Borrow[Mut]Error) was allowed but not intended for user code, and was accidentally used. Additionally, pattern matching on error_chain errors, which should be common when dealing with Lua, is less convenient than a hand rolled error type. So, if we decide not to use error_chain, we now have a new set of problems if we decide interoperability with error_chain is important. The first problem we run into is that there are two natural bounds for wrapped errors that we would pick, (Error + Send + Sync), or just Error, and neither of them will interoperate well with error_chain. (Error + Send + Sync) means we can't wrap error chain errors into LuaError::ExternalError (they're missing the Sync bound), and having the bounds be just Error means the opposite, that we can't hold a LuaError inside an error_chain error. We could just decide that interoperability with error_chain is the most important qualification, and pick (Error + Send), but this causes a DIFFERENT set of problems. The rust ecosystem has the two primary error bounds as Error or (Error + Send + Sync), and there are Into impls from &str / String to Box<Error + Send + Sync> for example, but NOT (Error + Send). This means that we are forced to manually recreate the conversions from &str / String to LuaError rather than relying on a single Into<Box<Error + Send + Sync>> bound, but this means that string conversions have a different set of methods than other error types for external error conversion. I have not been able to figure out an API that I am happy with that uses the (Error + Send) bound. Box<Error> is obnoxious because not having errors implement Send causes needless problems in a multithreaded context, so that leaves (Error + Send + Sync). This is actually a completely reasonable bound for external errors, and has the nice String Into impls that we would want, the ONLY problem is that it is a pain to interoperate with the current version of error_chain. It would be nice to be able to specify the traits that an error generated by the error_chain macro would implement, and this is apparently in progress in the error_chain library. This would solve both the problem with not being able to implement Clone and the problems with (Error + Send) bounds. I am not convinced that this library should go back to using error_chain when that functionality is in stable error_chain though, because of the other minor usability problems with using error_chain. In that theoretical situation, the downside of NOT using error_chain is simply that there would not be automatic stacktraces of LuaError. This is not a huge problem, because stack traces of lua errors are not extremely useful, and for external errors it is not too hard to create a different version of the LuaExternalResult / LuaExternalError traits and do conversion from an error_chain type into a type that will print the stacktrace on display, or use downcasting in the error causes. So in summary, this library is no longer using error_chain, and probably will not use it again in the future. Currently this means that to interoperate with error_chain, you should use error_chain 0.8.1, which derives Sync on errors, or wait for a version that supports user defined trait derives. In the future when error_chain supports user defined trait derives, users may have to take an extra step to make wrapped external errors print the stacktrace that they capture. This change works, but is not entirely complete. There is no error documentation yet, and the change brought to a head an ugly module organization problem. There will be more commits for documentation and reorganization, then a new stable version of rlua.
2017-06-20Method renames, remove ToLua / FromLua impls for Setskyren
There is no single obvious form for a set in lua, and it is not very difficult to accept a table and convert the sequence values into a set. Also rename some methods as per discussion.
2017-06-17Allow multiline input in the REPL exampleJonas Schievink
2017-06-17Add a simple repl exampleJonas Schievink