Commit Graph

91 Commits

Author SHA1 Message Date
Nathan Kent
86d86a85e4 Remove unsound casting functions
The casting functions in `unsafe.rs` were unsound (i.e., they allowed
safe code to cause undefined behavior). While they did appear to be used
in a way that wouldn't cause UB the fact that there exists unsound
functions is unsettling.

This commit removes those functions and replaces it with a macro that
performs the same reification - the difference is that the macro call
will also include the checks which are required to prevent UB. A macro
was chosen instead of a function for two reasons:

1. A macro can keep the same code generation whereas a function would
   require going through an `Option` which has negative impacts on code
   generation (niche values cause poor DCE).
2. There exist other `unsafe` code blocks in the crate and an attempt to
   make Rhai 100% safe is completely out-of-scope for this merge
   request, so we may as well use `unsafe` in the macro.

Regarding (2) above, I may come back at a later date with a 100% safe
`reify` function but only once the other `unsafe` blocks are removed.
For posterity, said function would look something like:

```rust
fn reify<A: Any, C>(value: A) -> Option<C> {
    let mut v = Some(value);
    let v: &mut dyn Any = &mut v;
    v.downcast_mut::<Option<C>>().map(Option::take)
}
```
2022-02-05 16:29:05 -08:00
Stephen Chung
be9356727f Add variable definition filter. 2022-02-04 22:59:41 +08:00
Stephen Chung
936dc01e39 Pass level to var resolver. 2022-02-04 22:16:12 +08:00
Stephen Chung
6c1c8bc538 Improve position display. 2022-02-04 12:04:33 +08:00
Stephen Chung
9fa6839380 Simplify debugger calls. 2022-02-03 11:56:08 +08:00
Stephen Chung
8322e62c18 Fix function exit trigger and add function enter trigger. 2022-02-02 22:42:33 +08:00
Stephen Chung
e0ed713bb6 Fix builds. 2022-02-02 14:57:30 +08:00
Stephen Chung
4a80483749 Support call stack and FunctionExit for native functions. 2022-02-02 14:47:35 +08:00
Stephen Chung
7163a7331a Add commands and status to debugging interface. 2022-02-01 22:30:05 +08:00
Stephen Chung
ff06bb98a1 Fix no_module build. 2022-01-30 23:28:02 +08:00
Stephen Chung
7b92a80c32 Fix encapsulated environment in module functions. 2022-01-30 17:27:13 +08:00
Stephen Chung
19ef92a3f3 Fix builds. 2022-01-29 13:37:58 +08:00
Stephen Chung
6b02dde848 Gate dead code for no_module. 2022-01-29 11:09:43 +08:00
Stephen Chung
66af69aaff Refactor and add state to debugger. 2022-01-28 18:59:18 +08:00
Stephen Chung
e476929597 Remove Box on callback traits. 2022-01-27 23:55:32 +08:00
Stephen Chung
3c2ac7f0c5 Add ability for debugger to throw errors. 2022-01-27 16:58:11 +08:00
Stephen Chung
3cec9751bf Remove call stack under no_function. 2022-01-27 16:58:11 +08:00
Stephen Chung
40aaab60c3 Refine debugger. 2022-01-27 16:58:11 +08:00
Stephen Chung
fc87dec128 Add debugging interface. 2022-01-27 16:58:11 +08:00
Stephen Chung
fb0b071fe0 Add lifetimes to GlobalRuntimeState and EvalState for future needs. 2022-01-22 17:48:07 +08:00
Stephen Chung
f92894e337 Rename GlobalRuntimeStatemodules -> imports. 2022-01-20 08:17:34 +08:00
Stephen Chung
86fc2f7bf1 Refine types display. 2022-01-17 21:51:04 +08:00
Stephen Chung
00b189d0c6 Replace Cow<str> in Scope with SmartString. 2022-01-15 11:26:43 +08:00
Stephen Chung
a8ec984b0f Fix unsafe violation in for loop. 2022-01-15 10:18:16 +08:00
Stephen Chung
37dbc68bf5 Use target_family for wasm. 2022-01-12 08:12:28 +08:00
Stephen Chung
f399e8a905 Evaluate function call args more efficiently. 2022-01-08 18:40:19 +08:00
Stephen Chung
a267ac5e54 Split Engine into eval folder. 2022-01-07 11:43:47 +08:00
Stephen Chung
c75d51ae88 Reduce unnecessary data size checking. 2022-01-06 22:10:16 +08:00
Stephen Chung
bc6bf6c6ba Change expect("exists") to unwrap(). 2022-01-06 11:07:52 +08:00
Stephen Chung
328f6910b6 Refactor wasm feature gates. 2022-01-04 22:16:20 +08:00
Stephen Chung
d99953c101 Fixup AsRef<str> vs &str. 2022-01-04 15:22:48 +08:00
Stephen Chung
1d1e473ac4 Minor refactor. 2022-01-03 23:16:47 +08:00
Stephen Chung
29f1328087 Simplify Dynamic::from for better inlining. 2022-01-02 20:47:03 +08:00
Stephen Chung
809feaf58d Add doc comments. 2022-01-02 15:14:55 +08:00
Stephen Chung
d60ed5a502 Reduce size of Variant trait. 2022-01-01 19:54:46 +08:00
Stephen Chung
a6ddb64596 Fix builds. 2022-01-01 17:38:32 +08:00
Stephen Chung
135b1f54c2 Remove Option from source and use empty string as no source. 2022-01-01 17:20:00 +08:00
Stephen Chung
ce93f56813 Rename parameters. 2021-12-31 17:49:19 +08:00
Stephen Chung
be4ae6e763 Add rewind_scope to eval_stmt. 2021-12-30 08:57:23 +08:00
Stephen Chung
4bd482352e Fix eval call. 2021-12-28 23:00:31 +08:00
Stephen Chung
cbaf095c7a Merge restore_state and rewind_scope. 2021-12-28 17:50:49 +08:00
Stephen Chung
5b667a69b7 Reverse EvalStateData. 2021-12-28 12:19:20 +08:00
Stephen Chung
280010c427 Fix builds. 2021-12-28 12:00:01 +08:00
Stephen Chung
807240e249 Rename Imports to GlobalRuntimeState. 2021-12-28 11:42:52 +08:00
Stephen Chung
9deddc679c Use Box<str>. 2021-12-27 23:15:25 +08:00
Stephen Chung
a78488d935 Rename Imports to GlobalRuntimeState. 2021-12-27 23:03:30 +08:00
Stephen Chung
757eacfdde No need for types with Into::into. 2021-12-27 16:59:05 +08:00
Stephen Chung
f443e4d9f6 Fix formatting. 2021-12-27 13:30:44 +08:00
Stephen Chung
dfb3378b28 Expand function call arguments inline storage. 2021-12-27 12:27:44 +08:00
Stephen Chung
05d4c81e7a Use type alias for error. 2021-12-27 12:27:31 +08:00