Skip to content

Releases: rhaiscript/rhai

v1.1.1

01 Nov 02:30
bbb9038
Compare
Choose a tag to compare

Bug fixes

  • Assignment to indexing expression with dot expressions inside no longer cause a compilation error.
  • The no_module and internals features now work together without a compilation error.
  • String literal operations (such as "hello" + ", world") now optimizes correctly.

v1.1.0

11 Oct 09:45
3c40c30
Compare
Choose a tag to compare

Version 1.1.0 released to crates.io.

Bug fixes

  • Custom syntax starting with a disabled standard keyword now works properly.
  • When calling Engine::call_fn, new variables defined during evaluation of the body script are removed and no longer spill into the function call.
  • NamespaceRef::new is fixed.

Enhancements

Engine API

  • Engine::consume_XXX methods are renamed to Engine::run_XXX to make meanings clearer. The consume_XXX API is deprecated.
  • Engine::register_type_XXX are now available even under no_object.
  • Added Engine::on_parse_token to allow remapping certain tokens during parsing.
  • Added Engine::const_empty_string to merge empty strings into a single instance.

Custom Syntax

  • $symbol$ is supported in custom syntax to match any symbol.
  • Custom syntax with $block$, } or ; as the last symbol are now self-terminating (i.e. no need to attach a terminating ;).

Dynamic Values

  • Dynamic::as_string and Dynamic::as_immutable_string are deprecated and replaced by into_string and into_immutable_string respectively.
  • Added a number of constants to Dynamic.
  • Added a number of constants and fromXXX constant methods to Dynamic.
  • Added sin, cos and tan for Decimal values.

Decimal Values

  • parse_float(), PI() and E() now defer to Decimal under no_float if decimal is turned on.
  • Added log10() for Decimal.
  • ln for Decimal is now checked and won't panic.

String Values

  • SmartString now uses LazyCompact instead of Compact to minimize allocations.
  • Added pop for strings.
  • Added ImmutableString::ptr_eq to test if two strings point to the same allocation.
  • The serde feature of SmartString is turned on under metadata to make Map serializable.

Scope API

  • Scope::set_value now takes anything that implements Into<Cow<str>>.
  • Added Scope::is_constant to check if a variable is constant.
  • Added Scope::set_or_push to add a new variable only if one doesn't already exist.

AST API

  • Added ASTNode::position.
  • ReturnType is removed in favor of option flags for Stmt::Return.
  • Stmt::Break and Stmt::Continue are merged into Stmt::BreakLoop via an option flag.
  • StaticVec is changed to keep three items inline instead of four.

v1.0.6

28 Sep 08:50
8c15e2b
Compare
Choose a tag to compare

Bug fixes

  • Eliminate unnecessary property write-back when accessed via a getter since property getters are assumed to be pure.
  • Writing to a property of an indexed valued obtained via an indexer now works properly by writing back the changed value via an index setter.

Enhancements

  • MultiInputsStream, ParseState, TokenIterator, IdentifierBuilder and AccessMode are exported under the internals feature.

v1.0.5

19 Sep 14:30
4ed757d
Compare
Choose a tag to compare

This is a bug fix version with the following fixes:

  • FloatWrapper is no longer erroneously exported under no_float+internals.
  • The sign function now works properly for float values that are NaN.

v1.0.4

03 Sep 02:16
5cc1fd1
Compare
Choose a tag to compare

Fixed bug with catch variable used in catch block.

This release fixes a bug in 1.0.3 which has been yanked.

v1.0.2

17 Aug 07:49
e4c2637
Compare
Choose a tag to compare

Fixed bug in method call followed by an array indexing.

v1.0.1

06 Aug 07:29
b3a1c12
Compare
Choose a tag to compare

Bug fixes

  • Fixed bug in using indexing/dotting inside index bracket.
  • while and loop statements are no longer considered pure (since a loop can go on forever and this is a side effect).

v1.0.0

07 Jul 01:03
51a9c55
Compare
Choose a tag to compare

The official version 1.0.

Almost the same version as 0.20.3 but with deprecated API's removed.

Version 1.0.0 released to crates.io.

Bug fixes

  • Fixed infinite loop in certain script optimizations.
  • Building for no-std no longer requires patching smartstring.
  • Parsing a lone return or throw without a semicolon at the end of a block no longer raises an error.

Breaking changes

  • All deprecated API's (e.g. the RegisterFn and RegisterResultFn traits) are removed.
  • Module::set_id is split into Module::set_id and Module::clear_id pair.
  • begin, end, each, then, unless are no longer reserved keywords.

Enhancements

  • New methods is_odd, is_even for integers, and is_zero for all numbers.
  • From<BTreeSet> and From<HashSet> are added for Dynamic, which create object maps with () values.

v0.20.3

22 Jun 14:46
6006942
Compare
Choose a tag to compare

This version adds support to index into an integer number, treating it as a bit-field.

Version 0.20.3 released to crates.io.

Bug fixes

  • Fixed incorrect optimization regarding chain-indexing with non-numeric index.
  • Variable values are checked for over-sized violations after assignments and setters.

Breaking changes

  • To keep the API consistent, strings are no longer iterable by default. Use the chars method to iterate through the characters in a string.
  • Dynamic::take_string and Dynamic::take_immutable_string are renamed to Dynamic::as_string and Dynamic::as_immutable_string respectively.

New features

  • New syntax for for statement to include counter variable.
  • An integer value can now be indexed to get/set a single bit.
  • The bits method of an integer can be used to iterate through its bits.
  • New $bool$, $int$, $float$ and $string$ expression types for custom syntax.
  • New methods to_hex, to_octal and to_binary for integer numbers.
  • New methods to_upper, to_lower, make_upper, make_lower for strings/characters.

v0.20.2

26 May 09:35
9a54fd6
Compare
Choose a tag to compare

This version adds a number of convenience features:

  • Ability for a Dynamic to hold an i32 tag of arbitrary data

  • Simplifies dynamic properties access by falling back to an indexer (passing the name of the property as a string) when a property is not found.

Version 0.20.2 released to crates.io.

Bug fixes

  • Propagation of constants held in a custom scope now works properly instead of always replacing by ().

Breaking changes

  • Engine::disable_doc_comments is removed because doc-comments are now placed under the metadata feature flag.
  • Registering a custom syntax now only requires specifying whether the Scope is adjusted (i.e. whether variables are added or removed). There is no need to specify the number of variables added/removed.
  • Assigning to a property of a constant is now allowed and no longer raise an EvalAltResult::ErrorAssignmentToConstant error. This is to facilitate the Singleton pattern. Registered setter functions are automatically guarded against setters calling on constants and will continue to raise errors unless the pure attribute is present (for plugins).
  • If a property getter/setter is not found, an indexer with string index, if any, is tried.
  • The indexers API (Engine::register_indexer_XXX and Module::set_indexer_XXX) are now also exposed under no_index.

New features

  • Each Dynamic value can now contain arbitrary data (type i32) in the form of a tag. This is to use up otherwise wasted space in the Dynamic type.
  • A new internal feature no_smartstring to turn off SmartString for those rare cases that it is needed.
  • DynamicReadLock and DynamicWriteLoc are exposed under internals.
  • From<Shared<Locked<Dynamic>>> is added for Dynamic mapping directly to a shared value, together with support for Dynamic::from.
  • An indexer with string index acts as a fallback to a property getter/setter.

Enhancements

  • Registering a custom syntax now only requires specifying whether the Scope is adjusted (i.e. whether variables are added or removed). This allows more flexibility for cases where the number of new variables declared depends on internal logic.
  • Putting a pure attribute on a plugin property/index setter now enables it to be used on constants.