rhai/scripts/all_in_one.d.rhai

6481 lines
165 KiB
JavaScript
Raw Normal View History

2022-09-03 09:48:00 +02:00
module static;
op ==(int, int) -> bool;
op !=(int, int) -> bool;
op >(int, int) -> bool;
op >=(int, int) -> bool;
op <(int, int) -> bool;
op <=(int, int) -> bool;
op &(int, int) -> int;
op |(int, int) -> int;
op ^(int, int) -> int;
op ..(int, int) -> Range<int>;
op ..=(int, int) -> RangeInclusive<int>;
op ==(bool, bool) -> bool;
op !=(bool, bool) -> bool;
op >(bool, bool) -> bool;
op >=(bool, bool) -> bool;
op <(bool, bool) -> bool;
op <=(bool, bool) -> bool;
op &(bool, bool) -> bool;
op |(bool, bool) -> bool;
op ^(bool, bool) -> bool;
op ==((), ()) -> bool;
op !=((), ()) -> bool;
op >((), ()) -> bool;
op >=((), ()) -> bool;
op <((), ()) -> bool;
op <=((), ()) -> bool;
op +(int, int) -> int;
op -(int, int) -> int;
op *(int, int) -> int;
op /(int, int) -> int;
op %(int, int) -> int;
op **(int, int) -> int;
op >>(int, int) -> int;
op <<(int, int) -> int;
op +(float, float) -> float;
op -(float, float) -> float;
op *(float, float) -> float;
op /(float, float) -> float;
op %(float, float) -> float;
op **(float, float) -> float;
op ==(float, float) -> bool;
op !=(float, float) -> bool;
op >(float, float) -> bool;
op >=(float, float) -> bool;
op <(float, float) -> bool;
op <=(float, float) -> bool;
op +(float, int) -> float;
op -(float, int) -> float;
op *(float, int) -> float;
op /(float, int) -> float;
op %(float, int) -> float;
op **(float, int) -> float;
op ==(float, int) -> bool;
op !=(float, int) -> bool;
op >(float, int) -> bool;
op >=(float, int) -> bool;
op <(float, int) -> bool;
op <=(float, int) -> bool;
op +(int, float) -> float;
op -(int, float) -> float;
op *(int, float) -> float;
op /(int, float) -> float;
op %(int, float) -> float;
op **(int, float) -> float;
op ==(int, float) -> bool;
op !=(int, float) -> bool;
op >(int, float) -> bool;
op >=(int, float) -> bool;
op <(int, float) -> bool;
op <=(int, float) -> bool;
op +(Decimal, Decimal) -> Decimal;
op -(Decimal, Decimal) -> Decimal;
op *(Decimal, Decimal) -> Decimal;
op /(Decimal, Decimal) -> Decimal;
op %(Decimal, Decimal) -> Decimal;
op **(Decimal, Decimal) -> Decimal;
op ==(Decimal, Decimal) -> bool;
op !=(Decimal, Decimal) -> bool;
op >(Decimal, Decimal) -> bool;
op >=(Decimal, Decimal) -> bool;
op <(Decimal, Decimal) -> bool;
op <=(Decimal, Decimal) -> bool;
op +(Decimal, int) -> Decimal;
op -(Decimal, int) -> Decimal;
op *(Decimal, int) -> Decimal;
op /(Decimal, int) -> Decimal;
op %(Decimal, int) -> Decimal;
op **(Decimal, int) -> Decimal;
op ==(Decimal, int) -> bool;
op !=(Decimal, int) -> bool;
op >(Decimal, int) -> bool;
op >=(Decimal, int) -> bool;
op <(Decimal, int) -> bool;
op <=(Decimal, int) -> bool;
op +(int, Decimal) -> Decimal;
op -(int, Decimal) -> Decimal;
op *(int, Decimal) -> Decimal;
op /(int, Decimal) -> Decimal;
op %(int, Decimal) -> Decimal;
op **(int, Decimal) -> Decimal;
op ==(int, Decimal) -> bool;
op !=(int, Decimal) -> bool;
op >(int, Decimal) -> bool;
op >=(int, Decimal) -> bool;
op <(int, Decimal) -> bool;
op <=(int, Decimal) -> bool;
op +(String, String) -> String;
op -(String, String) -> String;
op ==(String, String) -> bool;
op !=(String, String) -> bool;
op >(String, String) -> bool;
op >=(String, String) -> bool;
op <(String, String) -> bool;
op <=(String, String) -> bool;
op +(char, char) -> String;
op ==(char, char) -> bool;
op !=(char, char) -> bool;
op >(char, char) -> bool;
op >=(char, char) -> bool;
op <(char, char) -> bool;
op <=(char, char) -> bool;
op +(char, String) -> String;
op ==(char, String) -> bool;
op !=(char, String) -> bool;
op >(char, String) -> bool;
op >=(char, String) -> bool;
op <(char, String) -> bool;
op <=(char, String) -> bool;
op +(String, char) -> String;
op -(String, char) -> String;
op ==(String, char) -> bool;
op !=(String, char) -> bool;
op >(String, char) -> bool;
op >=(String, char) -> bool;
op <(String, char) -> bool;
op <=(String, char) -> bool;
op +((), String) -> String;
op ==((), String) -> bool;
op !=((), String) -> bool;
op >((), String) -> bool;
op >=((), String) -> bool;
op <((), String) -> bool;
op <=((), String) -> bool;
op +(String, ()) -> String;
op ==(String, ()) -> bool;
op !=(String, ()) -> bool;
op >(String, ()) -> bool;
op >=(String, ()) -> bool;
op <(String, ()) -> bool;
op <=(String, ()) -> bool;
op +(Blob, Blob) -> Blob;
op +(Blob, char) -> Blob;
op ==(Blob, Blob) -> bool;
op !=(Blob, Blob) -> bool;
op ==(Range<int>, RangeInclusive<int>) -> bool;
op !=(Range<int>, RangeInclusive<int>) -> bool;
op ==(RangeInclusive<int>, Range<int>) -> bool;
op !=(RangeInclusive<int>, Range<int>) -> bool;
op ==(Range<int>, Range<int>) -> bool;
op !=(Range<int>, Range<int>) -> bool;
op ==(RangeInclusive<int>, RangeInclusive<int>) -> bool;
op !=(RangeInclusive<int>, RangeInclusive<int>) -> bool;
op ==(?, ?) -> bool;
op !=(?, ?) -> bool;
op >(?, ?) -> bool;
op >=(?, ?) -> bool;
op <(?, ?) -> bool;
op <=(?, ?) -> bool;
op &=(bool, bool);
op |=(bool, bool);
op +=(int, int);
op -=(int, int);
op *=(int, int);
op /=(int, int);
op %=(int, int);
op **=(int, int);
op >>=(int, int);
op <<=(int, int);
op &=(int, int);
op |=(int, int);
op ^=(int, int);
op +=(float, float);
op -=(float, float);
op *=(float, float);
op /=(float, float);
op %=(float, float);
op **=(float, float);
op +=(float, int);
op -=(float, int);
op *=(float, int);
op /=(float, int);
op %=(float, int);
op **=(float, int);
op +=(Decimal, Decimal);
op -=(Decimal, Decimal);
op *=(Decimal, Decimal);
op /=(Decimal, Decimal);
op %=(Decimal, Decimal);
op **=(Decimal, Decimal);
op +=(Decimal, int);
op -=(Decimal, int);
op *=(Decimal, int);
op /=(Decimal, int);
op %=(Decimal, int);
op **=(Decimal, int);
op +=(String, String);
op -=(String, String);
op +=(String, char);
op -=(String, char);
op +=(char, String);
op +=(char, char);
op +=(Array, Array);
op +=(Array, ?);
op +=(Blob, Blob);
op +=(Blob, int);
op +=(Blob, char);
op +=(Blob, String);
op in(?, Array) -> bool;
op in(String, String) -> bool;
op in(char, String) -> bool;
op in(int, Range<int>) -> bool;
op in(int, RangeInclusive<int>) -> bool;
op in(String, Map) -> bool;
op in(int, Blob) -> bool;
/// Display any data to the standard output.
///
/// # Example
///
/// ```rhai
/// let answer = 42;
///
/// print(`The Answer is ${answer}`);
/// ```
fn print(data: ?);
/// Display any data to the standard output in debug format.
///
/// # Example
///
/// ```rhai
/// let answer = 42;
///
/// debug(answer);
/// ```
fn debug(data: ?);
/// Get the type of a value.
///
/// # Example
///
/// ```rhai
/// let x = "hello, world!";
///
/// print(x.type_of()); // prints "string"
/// ```
fn type_of(data: ?) -> String;
/// Create a function pointer to a named function.
///
/// If the specified name is not a valid function name, an error is raised.
///
/// # Example
///
/// ```rhai
/// let f = Fn("foo"); // function pointer to 'foo'
///
/// f.call(42); // call: foo(42)
/// ```
fn Fn(fn_name: String) -> FnPtr;
/// Call a function pointed to by a function pointer,
/// passing following arguments to the function call.
///
/// If an appropriate function is not found, an error is raised.
///
/// # Example
///
/// ```rhai
/// let f = Fn("foo"); // function pointer to 'foo'
///
/// f.call(1, 2, 3); // call: foo(1, 2, 3)
/// ```
fn call(fn_ptr: FnPtr, ...args: ?) -> ?;
/// Call a function pointed to by a function pointer, binding the `this` pointer
/// to the object of the method call, and passing on following arguments to the function call.
///
/// If an appropriate function is not found, an error is raised.
///
/// # Example
///
/// ```rhai
/// fn add(x) {
/// this + x
/// }
///
/// let f = Fn("add"); // function pointer to 'add'
///
/// let x = 41;
///
/// let r = x.call(f, 1); // call: add(1) with 'this' = 'x'
///
/// print(r); // prints 42
/// ```
fn call(obj: ?, fn_ptr: FnPtr, ...args: ?) -> ?;
/// Curry a number of arguments into a function pointer and return it as a new function pointer.
///
/// # Example
///
/// ```rhai
/// fn foo(x, y, z) {
/// x + y + z
/// }
///
/// let f = Fn("foo");
///
/// let g = f.curry(1, 2); // curried arguments: 1, 2
///
/// g.call(3); // call: foo(1, 2, 3)
/// ```
fn curry(fn_ptr: FnPtr, ...args: ?) -> FnPtr;
/// Return `true` if a script-defined function exists with a specified name and
/// number of parameters.
///
/// # Example
///
/// ```rhai
/// fn foo(x) { }
///
/// print(is_def_fn("foo", 1)); // prints true
/// print(is_def_fn("foo", 2)); // prints false
/// print(is_def_fn("foo", 0)); // prints false
/// print(is_def_fn("bar", 1)); // prints false
/// ```
fn is_def_fn(fn_name: String, num_params: int) -> bool;
/// Return `true` if a variable matching a specified name is defined.
///
/// # Example
///
/// ```rhai
/// let x = 42;
///
/// print(is_def_var("x")); // prints true
/// print(is_def_var("foo")); // prints false
///
/// {
/// let y = 1;
/// print(is_def_var("y")); // prints true
/// }
///
/// print(is_def_var("y")); // prints false
/// ```
fn is_def_var(var_name: String) -> bool;
/// Return `true` if the variable is shared.
///
/// # Example
///
/// ```rhai
/// let x = 42;
///
/// print(is_shared(x)); // prints false
///
/// let f = || x; // capture 'x', making it shared
///
/// print(is_shared(x)); // prints true
/// ```
fn is_shared(variable: ?) -> bool;
/// Evaluate a text script within the current scope.
///
/// # Example
///
/// ```rhai
/// let x = 42;
///
/// eval("let y = x; x = 123;");
///
/// print(x); // prints 123
/// print(y); // prints 42
/// ```
fn eval(script: String) -> ?;
/// Return `true` if the string contains another string.
///
/// This function also drives the `in` operator.
///
/// # Example
///
/// ```rhai
/// let x = "hello world!";
///
/// // The 'in' operator calls 'contains' in the background
/// if "world" in x {
/// print("found!");
/// }
/// ```
fn contains(string: String, find: String) -> bool;
/// Return `true` if the string contains a character.
///
/// This function also drives the `in` operator.
///
/// # Example
///
/// ```rhai
/// let x = "hello world!";
///
/// // The 'in' operator calls 'contains' in the background
/// if 'w' in x {
/// print("found!");
/// }
/// ```
fn contains(string: String, ch: char) -> bool;
/// Return `true` if a value falls within the exclusive range.
///
/// This function also drives the `in` operator.
///
/// # Example
///
/// ```rhai
/// let r = 1..100;
///
/// // The 'in' operator calls 'contains' in the background
/// if 42 in r {
/// print("found!");
/// }
/// ```
fn contains(range: Range<int>, value: int) -> bool;
/// Return `true` if a value falls within the inclusive range.
///
/// This function also drives the `in` operator.
///
/// # Example
///
/// ```rhai
/// let r = 1..=100;
///
/// // The 'in' operator calls 'contains' in the background
/// if 42 in r {
/// print("found!");
/// }
/// ```
fn contains(range: RangeInclusive<int>, value: int) -> bool;
/// Return `true` if a key exists within the object map.
///
/// This function also drives the `in` operator.
///
/// # Example
///
/// ```rhai
/// let m = #{a:1, b:2, c:3};
///
/// // The 'in' operator calls 'contains' in the background
/// if "c" in m {
/// print("found!");
/// }
/// ```
fn contains(map: Map, string: String) -> bool;
/// Return `true` if a value is found within the BLOB.
///
/// This function also drives the `in` operator.
///
/// # Example
///
/// ```rhai
/// let b = blob();
///
/// b += 1; b += 2; b += 3; b += 4; b += 5;
///
/// // The 'in' operator calls 'contains' in the background
/// if 3 in b {
/// print("found!");
/// }
/// ```
fn contains(blob: Blob, value: int) -> bool;
op minus(int, int) -> int;
op !(bool) -> bool;
/// Return `true` if two arrays are not-equal (i.e. any element not equal or not in the same order).
///
/// The operator `==` is used to compare elements and must be defined,
/// otherwise `false` is assumed.
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3, 4, 5];
/// let y = [1, 2, 3, 4, 5];
/// let z = [1, 2, 3, 4];
///
/// print(x != y); // prints false
///
/// print(x != z); // prints true
/// ```
op !=(Array, Array) -> bool;
/// Return `true` if two object maps are not equal (i.e. at least one property value is not equal).
///
/// The operator `==` is used to compare property values and must be defined,
/// otherwise `false` is assumed.
///
/// # Example
///
/// ```rhai
/// let m1 = #{a:1, b:2, c:3};
/// let m2 = #{a:1, b:2, c:3};
/// let m3 = #{a:1, c:3};
///
/// print(m1 != m2); // prints false
///
/// print(m1 != m3); // prints true
/// ```
op !=(Map, Map) -> bool;
/// Return `true` if two timestamps are not equal.
op !=(Instant, Instant) -> bool;
op !=(int, f32) -> bool;
op !=(int, float) -> bool;
op !=(f32, int) -> bool;
op !=(f32, f32) -> bool;
op !=(float, int) -> bool;
op !=(i128, i128) -> bool;
op !=(i16, i16) -> bool;
op !=(i32, i32) -> bool;
op !=(i8, i8) -> bool;
op !=(u128, u128) -> bool;
op !=(u16, u16) -> bool;
op !=(u32, u32) -> bool;
op !=(u64, u64) -> bool;
op !=(u8, u8) -> bool;
op %(int, f32) -> f32;
op %(f32, int) -> f32;
op %(f32, f32) -> f32;
op %(i128, i128) -> i128;
op %(i16, i16) -> i16;
op %(i32, i32) -> i32;
op %(i8, i8) -> i8;
op %(u128, u128) -> u128;
op %(u16, u16) -> u16;
op %(u32, u32) -> u32;
op %(u64, u64) -> u64;
op %(u8, u8) -> u8;
op &(i128, i128) -> i128;
op &(i16, i16) -> i16;
op &(i32, i32) -> i32;
op &(i8, i8) -> i8;
op &(u128, u128) -> u128;
op &(u16, u16) -> u16;
op &(u32, u32) -> u32;
op &(u64, u64) -> u64;
op &(u8, u8) -> u8;
op *(int, f32) -> f32;
op *(f32, int) -> f32;
op *(f32, f32) -> f32;
op *(i128, i128) -> i128;
op *(i16, i16) -> i16;
op *(i32, i32) -> i32;
op *(i8, i8) -> i8;
op *(u128, u128) -> u128;
op *(u16, u16) -> u16;
op *(u32, u32) -> u32;
op *(u64, u64) -> u64;
op *(u8, u8) -> u8;
op **(f32, int) -> f32;
op **(f32, f32) -> f32;
op **(i128, int) -> i128;
op **(i16, int) -> i16;
op **(i32, int) -> i32;
op **(i8, int) -> i8;
op **(u128, int) -> u128;
op **(u16, int) -> u16;
op **(u32, int) -> u32;
op **(u64, int) -> u64;
op **(u8, int) -> u8;
op +(Decimal) -> Decimal;
op +(int) -> int;
op +(f32) -> f32;
op +(float) -> float;
op +(i128) -> i128;
op +(i16) -> i16;
op +(i32) -> i32;
op +(i8) -> i8;
op +((), String) -> String;
/// Combine two arrays into a new array and return it.
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3];
/// let y = [true, 'x'];
///
/// print(x + y); // prints "[1, 2, 3, true, 'x']"
///
/// print(x); // prints "[1, 2, 3"
/// ```
op +(Array, Array) -> Array;
op +(char, String) -> String;
op +(?, String) -> String;
/// Make a copy of the object map, add all property values of another object map
/// (existing property values of the same names are replaced), then returning it.
///
/// # Example
///
/// ```rhai
/// let m = #{a:1, b:2, c:3};
/// let n = #{a: 42, d:0};
///
/// print(m + n); // prints "#{a:42, b:2, c:3, d:0}"
///
/// print(m); // prints "#{a:1, b:2, c:3}"
/// ```
op +(Map, Map) -> Map;
op +(String, String) -> String;
op +(String, char) -> String;
op +(String, ?) -> String;
op +(String, Blob) -> String;
op +(String, ()) -> String;
/// Add the specified number of `seconds` to the timestamp and return it as a new timestamp.
op +(Instant, float) -> Instant;
/// Add the specified number of `seconds` to the timestamp and return it as a new timestamp.
op +(Instant, int) -> Instant;
op +(Blob, String) -> String;
op +(int, f32) -> f32;
op +(f32, int) -> f32;
op +(f32, f32) -> f32;
op +(i128, i128) -> i128;
op +(i16, i16) -> i16;
op +(i32, i32) -> i32;
op +(i8, i8) -> i8;
op +(u128, u128) -> u128;
op +(u16, u16) -> u16;
op +(u32, u32) -> u32;
op +(u64, u64) -> u64;
op +(u8, u8) -> u8;
/// Add all property values of another object map into the object map.
/// Existing property values of the same names are replaced.
///
/// # Example
///
/// ```rhai
/// let m = #{a:1, b:2, c:3};
/// let n = #{a: 42, d:0};
///
/// m.mixin(n);
///
/// print(m); // prints "#{a:42, b:2, c:3, d:0}"
/// ```
op +=(Map, Map) -> ();
op +=(String, String) -> ();
op +=(String, char) -> ();
op +=(String, ()) -> ();
op +=(String, ?) -> ();
op +=(String, Blob) -> ();
/// Add the specified number of `seconds` to the timestamp.
op +=(Instant, float) -> ();
/// Add the specified number of `seconds` to the timestamp.
op +=(Instant, int) -> ();
op -(Decimal) -> Decimal;
op -(int) -> int;
op -(f32) -> f32;
op -(float) -> float;
op -(i128) -> i128;
op -(i16) -> i16;
op -(i32) -> i32;
op -(i8) -> i8;
/// Return the number of seconds between two timestamps.
op -(Instant, Instant) -> RhaiResult;
/// Subtract the specified number of `seconds` from the timestamp and return it as a new timestamp.
op -(Instant, float) -> Instant;
/// Subtract the specified number of `seconds` from the timestamp and return it as a new timestamp.
op -(Instant, int) -> Instant;
op -(int, f32) -> f32;
op -(f32, int) -> f32;
op -(f32, f32) -> f32;
op -(i128, i128) -> i128;
op -(i16, i16) -> i16;
op -(i32, i32) -> i32;
op -(i8, i8) -> i8;
op -(u128, u128) -> u128;
op -(u16, u16) -> u16;
op -(u32, u32) -> u32;
op -(u64, u64) -> u64;
op -(u8, u8) -> u8;
/// Subtract the specified number of `seconds` from the timestamp.
op -=(Instant, float) -> ();
/// Subtract the specified number of `seconds` from the timestamp.
op -=(Instant, int) -> ();
op /(int, f32) -> f32;
op /(f32, int) -> f32;
op /(f32, f32) -> f32;
op /(i128, i128) -> i128;
op /(i16, i16) -> i16;
op /(i32, i32) -> i32;
op /(i8, i8) -> i8;
op /(u128, u128) -> u128;
op /(u16, u16) -> u16;
op /(u32, u32) -> u32;
op /(u64, u64) -> u64;
op /(u8, u8) -> u8;
/// Return `true` if the first timestamp is earlier than the second.
op <(Instant, Instant) -> bool;
op <(int, f32) -> bool;
op <(int, float) -> bool;
op <(f32, int) -> bool;
op <(f32, f32) -> bool;
op <(float, int) -> bool;
op <(i128, i128) -> bool;
op <(i16, i16) -> bool;
op <(i32, i32) -> bool;
op <(i8, i8) -> bool;
op <(u128, u128) -> bool;
op <(u16, u16) -> bool;
op <(u32, u32) -> bool;
op <(u64, u64) -> bool;
op <(u8, u8) -> bool;
op <<(i128, int) -> i128;
op <<(i16, int) -> i16;
op <<(i32, int) -> i32;
op <<(i8, int) -> i8;
op <<(u128, int) -> u128;
op <<(u16, int) -> u16;
op <<(u32, int) -> u32;
op <<(u64, int) -> u64;
op <<(u8, int) -> u8;
/// Return `true` if the first timestamp is earlier than or equals to the second.
op <=(Instant, Instant) -> bool;
op <=(int, f32) -> bool;
op <=(int, float) -> bool;
op <=(f32, int) -> bool;
op <=(f32, f32) -> bool;
op <=(float, int) -> bool;
op <=(i128, i128) -> bool;
op <=(i16, i16) -> bool;
op <=(i32, i32) -> bool;
op <=(i8, i8) -> bool;
op <=(u128, u128) -> bool;
op <=(u16, u16) -> bool;
op <=(u32, u32) -> bool;
op <=(u64, u64) -> bool;
op <=(u8, u8) -> bool;
/// Return `true` if two arrays are equal (i.e. all elements are equal and in the same order).
///
/// The operator `==` is used to compare elements and must be defined,
/// otherwise `false` is assumed.
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3, 4, 5];
/// let y = [1, 2, 3, 4, 5];
/// let z = [1, 2, 3, 4];
///
/// print(x == y); // prints true
///
/// print(x == z); // prints false
/// ```
op ==(Array, Array) -> bool;
/// Return `true` if two object maps are equal (i.e. all property values are equal).
///
/// The operator `==` is used to compare property values and must be defined,
/// otherwise `false` is assumed.
///
/// # Example
///
/// ```rhai
/// let m1 = #{a:1, b:2, c:3};
/// let m2 = #{a:1, b:2, c:3};
/// let m3 = #{a:1, c:3};
///
/// print(m1 == m2); // prints true
///
/// print(m1 == m3); // prints false
/// ```
op ==(Map, Map) -> bool;
/// Return `true` if two timestamps are equal.
op ==(Instant, Instant) -> bool;
op ==(int, f32) -> bool;
op ==(int, float) -> bool;
op ==(f32, int) -> bool;
op ==(f32, f32) -> bool;
op ==(float, int) -> bool;
op ==(i128, i128) -> bool;
op ==(i16, i16) -> bool;
op ==(i32, i32) -> bool;
op ==(i8, i8) -> bool;
op ==(u128, u128) -> bool;
op ==(u16, u16) -> bool;
op ==(u32, u32) -> bool;
op ==(u64, u64) -> bool;
op ==(u8, u8) -> bool;
/// Return `true` if the first timestamp is later than the second.
op >(Instant, Instant) -> bool;
op >(int, f32) -> bool;
op >(int, float) -> bool;
op >(f32, int) -> bool;
op >(f32, f32) -> bool;
op >(float, int) -> bool;
op >(i128, i128) -> bool;
op >(i16, i16) -> bool;
op >(i32, i32) -> bool;
op >(i8, i8) -> bool;
op >(u128, u128) -> bool;
op >(u16, u16) -> bool;
op >(u32, u32) -> bool;
op >(u64, u64) -> bool;
op >(u8, u8) -> bool;
/// Return `true` if the first timestamp is later than or equals to the second.
op >=(Instant, Instant) -> bool;
op >=(int, f32) -> bool;
op >=(int, float) -> bool;
op >=(f32, int) -> bool;
op >=(f32, f32) -> bool;
op >=(float, int) -> bool;
op >=(i128, i128) -> bool;
op >=(i16, i16) -> bool;
op >=(i32, i32) -> bool;
op >=(i8, i8) -> bool;
op >=(u128, u128) -> bool;
op >=(u16, u16) -> bool;
op >=(u32, u32) -> bool;
op >=(u64, u64) -> bool;
op >=(u8, u8) -> bool;
op >>(i128, int) -> i128;
op >>(i16, int) -> i16;
op >>(i32, int) -> i32;
op >>(i8, int) -> i8;
op >>(u128, int) -> u128;
op >>(u16, int) -> u16;
op >>(u32, int) -> u32;
op >>(u64, int) -> u64;
op >>(u8, int) -> u8;
/// Return the natural number _e_.
fn E() -> float;
/// Return the number π.
fn PI() -> float;
op ^(i128, i128) -> i128;
op ^(i16, i16) -> i16;
op ^(i32, i32) -> i32;
op ^(i8, i8) -> i8;
op ^(u128, u128) -> u128;
op ^(u16, u16) -> u16;
op ^(u32, u32) -> u32;
op ^(u64, u64) -> u64;
op ^(u8, u8) -> u8;
/// Return the absolute value of the decimal number.
fn abs(x: Decimal) -> Decimal;
/// Return the absolute value of the number.
fn abs(x: int) -> int;
/// Return the absolute value of the floating-point number.
fn abs(x: f32) -> f32;
/// Return the absolute value of the floating-point number.
fn abs(x: float) -> float;
/// Return the absolute value of the number.
fn abs(x: i128) -> i128;
/// Return the absolute value of the number.
fn abs(x: i16) -> i16;
/// Return the absolute value of the number.
fn abs(x: i32) -> i32;
/// Return the absolute value of the number.
fn abs(x: i8) -> i8;
/// Return the arc-cosine of the floating-point number, in radians.
fn acos(x: float) -> float;
/// Return the arc-hyperbolic-cosine of the floating-point number, in radians.
fn acosh(x: float) -> float;
/// Return `true` if all elements in the array return `true` when applied a function named by `filter`.
///
/// # Function Parameters
///
/// A function with the same name as the value of `filter` must exist taking these parameters:
///
/// * `element`: copy of array element
/// * `index` _(optional)_: current index in the array
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 5];
///
/// print(x.all(|v| v > 3)); // prints false
///
/// print(x.all(|v| v > 1)); // prints true
///
/// print(x.all(|v, i| i > v)); // prints false
/// ```
fn all(array: Array, filter: String) -> bool;
/// Return `true` if all elements in the array return `true` when applied the `filter` function.
///
/// # Function Parameters
///
/// * `element`: copy of array element
/// * `index` _(optional)_: current index in the array
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 5];
///
/// print(x.all(|v| v > 3)); // prints false
///
/// print(x.all(|v| v > 1)); // prints true
///
/// print(x.all(|v, i| i > v)); // prints false
/// ```
fn all(array: Array, filter: FnPtr) -> bool;
/// Add all the elements of another array to the end of the array.
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3];
/// let y = [true, 'x'];
///
/// x.push(y);
///
/// print(x); // prints "[1, 2, 3, true, 'x']"
/// ```
fn append(array: Array, new_array: Array) -> ();
/// Add another BLOB to the end of the BLOB.
///
/// # Example
///
/// ```rhai
/// let b1 = blob(5, 0x42);
/// let b2 = blob(3, 0x11);
///
/// b1.push(b2);
///
/// print(b1); // prints "[4242424242111111]"
/// ```
fn append(blob1: Blob, blob2: Blob) -> ();
/// Add a character (as UTF-8 encoded byte-stream) to the end of the BLOB
///
/// # Example
///
/// ```rhai
/// let b = blob(5, 0x42);
///
/// b.append('!');
///
/// print(b); // prints "[424242424221]"
/// ```
fn append(blob: Blob, character: char) -> ();
/// Add a string (as UTF-8 encoded byte-stream) to the end of the BLOB
///
/// # Example
///
/// ```rhai
/// let b = blob(5, 0x42);
///
/// b.append("hello");
///
/// print(b); // prints "[424242424268656c 6c6f]"
/// ```
fn append(blob: Blob, string: String) -> ();
/// Add a new byte `value` to the end of the BLOB.
///
/// Only the lower 8 bits of the `value` are used; all other bits are ignored.
///
/// # Example
///
/// ```rhai
/// let b = blob();
///
/// b.push(0x42);
///
/// print(b); // prints "[42]"
/// ```
fn append(blob: Blob, value: int) -> ();
fn append(string: String, item: ?) -> ();
fn append(string: String, utf8: Blob) -> ();
/// Convert the BLOB into a string.
///
/// The byte stream must be valid UTF-8, otherwise an error is raised.
///
/// # Example
///
/// ```rhai
/// let b = blob(5, 0x42);
///
/// let x = b.as_string();
///
/// print(x); // prints "FFFFF"
/// ```
fn as_string(blob: Blob) -> String;
/// Return the arc-sine of the floating-point number, in radians.
fn asin(x: float) -> float;
/// Return the arc-hyperbolic-sine of the floating-point number, in radians.
fn asinh(x: float) -> float;
/// Return the arc-tangent of the floating-point number, in radians.
fn atan(x: float) -> float;
/// Return the arc-tangent of the floating-point numbers `x` and `y`, in radians.
fn atan(x: float, y: float) -> float;
/// Return the arc-hyperbolic-tangent of the floating-point number, in radians.
fn atanh(x: float) -> float;
/// Get an array of object maps containing the function calls stack.
///
/// If there is no debugging interface registered, an empty array is returned.
///
/// An array of strings is returned under `no_object`.
fn back_trace() -> Array;
/// Return an iterator over all the bits in the number.
///
/// # Example
///
/// ```rhai
/// let x = 123456;
///
/// for bit in x.bits() {
/// print(bit);
/// }
/// ```
fn bits(value: int) -> Iterator<bool>;
/// Return an iterator over the bits in the number starting from the specified `start` position.
///
/// If `start` < 0, position counts from the MSB (Most Significant Bit)>.
///
/// # Example
///
/// ```rhai
/// let x = 123456;
///
/// for bit in x.bits(10) {
/// print(bit);
/// }
/// ```
fn bits(value: int, from: int) -> Iterator<bool>;
/// Return an iterator over an exclusive range of bits in the number.
///
/// # Example
///
/// ```rhai
/// let x = 123456;
///
/// for bit in x.bits(10..24) {
/// print(bit);
/// }
/// ```
fn bits(value: int, range: Range<int>) -> Iterator<bool>;
/// Return an iterator over an inclusive range of bits in the number.
///
/// # Example
///
/// ```rhai
/// let x = 123456;
///
/// for bit in x.bits(10..=23) {
/// print(bit);
/// }
/// ```
fn bits(value: int, range: RangeInclusive<int>) -> Iterator<bool>;
/// Return an iterator over a portion of bits in the number.
///
/// * If `start` < 0, position counts from the MSB (Most Significant Bit)>.
/// * If `len` ≤ 0, an empty iterator is returned.
/// * If `start` position + `len` ≥ length of string, all bits of the number after the `start` position are iterated.
///
/// # Example
///
/// ```rhai
/// let x = 123456;
///
/// for bit in x.bits(10, 8) {
/// print(bit);
/// }
/// ```
fn bits(value: int, from: int, len: int) -> Iterator<bool>;
/// Return a new, empty BLOB.
fn blob() -> Blob;
/// Return a new BLOB of the specified length, filled with zeros.
///
/// If `len` ≤ 0, an empty BLOB is returned.
///
/// # Example
///
/// ```rhai
/// let b = blob(10);
///
/// print(b); // prints "[0000000000000000 0000]"
/// ```
fn blob(len: int) -> Blob;
/// Return a new BLOB of the specified length, filled with copies of the initial `value`.
///
/// If `len` ≤ 0, an empty BLOB is returned.
///
/// Only the lower 8 bits of the initial `value` are used; all other bits are ignored.
///
/// # Example
///
/// ```rhai
/// let b = blob(10, 0x42);
///
/// print(b); // prints "[4242424242424242 4242]"
/// ```
fn blob(len: int, value: int) -> Blob;
/// Return the length of the string, in number of bytes used to store it in UTF-8 encoding.
///
/// # Example
///
/// ```rhai
/// let text = "朝には紅顔ありて夕べには白骨となる";
///
/// print(text.bytes); // prints 51
/// ```
fn bytes(string: String) -> int;
/// Return the smallest whole number larger than or equals to the decimal number.
fn ceiling(x: Decimal) -> Decimal;
/// Return the smallest whole number larger than or equals to the floating-point number.
fn ceiling(x: float) -> float;
/// Return an iterator over the characters in the string.
///
/// # Example
///
/// ```rhai
/// for ch in "hello, world!".chars() {
/// print(ch);
/// }
/// ```
fn chars(string: String) -> Iterator<char>;
/// Return an iterator over the characters in the string starting from the `start` position.
///
/// * If `start` < 0, position counts from the end of the string (`-1` is the last character).
/// * If `start` < -length of string, position counts from the beginning of the string.
/// * If `start` ≥ length of string, an empty iterator is returned.
///
/// # Example
///
/// ```rhai
/// for ch in "hello, world!".chars(2) {
/// print(ch);
/// }
/// ```
fn chars(string: String, from: int) -> Iterator<char>;
/// Return an iterator over an exclusive range of characters in the string.
///
/// # Example
///
/// ```rhai
/// for ch in "hello, world!".chars(2..5) {
/// print(ch);
/// }
/// ```
fn chars(string: String, range: Range<int>) -> Iterator<char>;
/// Return an iterator over an inclusive range of characters in the string.
///
/// # Example
///
/// ```rhai
/// for ch in "hello, world!".chars(2..=6) {
/// print(ch);
/// }
/// ```
fn chars(string: String, range: RangeInclusive<int>) -> Iterator<char>;
/// Return an iterator over a portion of characters in the string.
///
/// * If `start` < 0, position counts from the end of the string (`-1` is the last character).
/// * If `start` < -length of string, position counts from the beginning of the string.
/// * If `start` ≥ length of string, an empty iterator is returned.
/// * If `len` ≤ 0, an empty iterator is returned.
/// * If `start` position + `len` ≥ length of string, all characters of the string after the `start` position are iterated.
///
/// # Example
///
/// ```rhai
/// for ch in "hello, world!".chars(2, 4) {
/// print(ch);
/// }
/// ```
fn chars(string: String, start: int, len: int) -> Iterator<char>;
/// Cut off the head of the array, leaving a tail of the specified length.
///
/// * If `len` ≤ 0, the array is cleared.
/// * If `len` ≥ length of array, the array is not modified.
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3, 4, 5];
///
/// x.chop(3);
///
/// print(x); // prints "[3, 4, 5]"
///
/// x.chop(10);
///
/// print(x); // prints "[3, 4, 5]"
/// ```
fn chop(array: Array, len: int) -> ();
/// Cut off the head of the BLOB, leaving a tail of the specified length.
///
/// * If `len` ≤ 0, the BLOB is cleared.
/// * If `len` ≥ length of BLOB, the BLOB is not modified.
///
/// # Example
///
/// ```rhai
/// let b = blob();
///
/// b += 1; b += 2; b += 3; b += 4; b += 5;
///
/// b.chop(3);
///
/// print(b); // prints "[030405]"
///
/// b.chop(10);
///
/// print(b); // prints "[030405]"
/// ```
fn chop(blob: Blob, len: int) -> ();
/// Clear the array.
fn clear(array: Array) -> ();
/// Clear the BLOB.
fn clear(blob: Blob) -> ();
/// Clear the object map.
fn clear(map: Map) -> ();
/// Clear the string, making it empty.
fn clear(string: String) -> ();
/// Return `true` if the array contains an element that equals `value`.
///
/// The operator `==` is used to compare elements with `value` and must be defined,
/// otherwise `false` is assumed.
///
/// This function also drives the `in` operator.
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3, 4, 5];
///
/// // The 'in' operator calls 'contains' in the background
/// if 4 in x {
/// print("found!");
/// }
/// ```
fn contains(array: Array, value: ?) -> bool;
/// Return the cosine of the decimal number in radians.
fn cos(x: Decimal) -> Decimal;
/// Return the cosine of the floating-point number in radians.
fn cos(x: float) -> float;
/// Return the hyperbolic cosine of the floating-point number in radians.
fn cosh(x: float) -> float;
/// Remove all characters from the string except those within an exclusive `range`.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world!";
///
/// text.crop(2..8);
///
/// print(text); // prints "llo, w"
/// ```
fn crop(string: String, range: Range<int>) -> ();
/// Remove all characters from the string except those within an inclusive `range`.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world!";
///
/// text.crop(2..=8);
///
/// print(text); // prints "llo, wo"
/// ```
fn crop(string: String, range: RangeInclusive<int>) -> ();
/// Remove all characters from the string except until the `start` position.
///
/// * If `start` < 0, position counts from the end of the string (`-1` is the last character).
/// * If `start` < -length of string, the string is not modified.
/// * If `start` ≥ length of string, the entire string is cleared.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world!";
///
/// text.crop(5);
///
/// print(text); // prints ", world!"
///
/// text.crop(-3);
///
/// print(text); // prints "ld!"
/// ```
fn crop(string: String, start: int) -> ();
/// Remove all characters from the string except those within a range.
///
/// * If `start` < 0, position counts from the end of the string (`-1` is the last character).
/// * If `start` < -length of string, position counts from the beginning of the string.
/// * If `start` ≥ length of string, the entire string is cleared.
/// * If `len` ≤ 0, the entire string is cleared.
/// * If `start` position + `len` ≥ length of string, only the portion of the string after the `start` position is retained.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world!";
///
/// text.crop(2, 8);
///
/// print(text); // prints "llo, wor"
///
/// text.crop(-5, 3);
///
/// print(text); // prints ", w"
/// ```
fn crop(string: String, start: int, len: int) -> ();
/// Return the empty string.
fn debug() -> String;
/// Convert the array into a string.
fn debug(array: Array) -> String;
/// Convert the string into debug format.
fn debug(character: char) -> String;
/// Convert the function pointer into a string in debug format.
fn debug(f: FnPtr) -> String;
/// Convert the value of the `item` into a string in debug format.
fn debug(item: ?) -> String;
/// Convert the object map into a string.
fn debug(map: Map) -> String;
/// Convert the value of `number` into a string.
fn debug(number: f32) -> String;
/// Convert the value of `number` into a string.
fn debug(number: float) -> String;
/// Convert the string into debug format.
fn debug(string: String) -> String;
/// Convert the unit into a string in debug format.
fn debug(unit: ()) -> String;
/// Convert the boolean value into a string in debug format.
fn debug(value: bool) -> String;
/// Remove duplicated _consecutive_ elements from the array.
///
/// The operator `==` is used to compare elements and must be defined,
/// otherwise `false` is assumed.
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 2, 2, 3, 4, 3, 3, 2, 1];
///
/// x.dedup();
///
/// print(x); // prints "[1, 2, 3, 4, 3, 2, 1]"
/// ```
fn dedup(array: Array) -> ();
/// Remove duplicated _consecutive_ elements from the array that return `true` when applied a
/// function named by `comparer`.
///
/// No element is removed if the correct `comparer` function does not exist.
///
/// # Function Parameters
///
/// * `element1`: copy of the current array element to compare
/// * `element2`: copy of the next array element to compare
///
/// ## Return Value
///
/// `true` if `element1 == element2`, otherwise `false`.
///
/// # Example
///
/// ```rhai
/// fn declining(a, b) { a >= b }
///
/// let x = [1, 2, 2, 2, 3, 1, 2, 3, 4, 3, 3, 2, 1];
///
/// x.dedup("declining");
///
/// print(x); // prints "[1, 2, 3, 4]"
/// ```
fn dedup(array: Array, comparer: String) -> ();
/// Remove duplicated _consecutive_ elements from the array that return `true` when applied the
/// `comparer` function.
///
/// No element is removed if the correct `comparer` function does not exist.
///
/// # Function Parameters
///
/// * `element1`: copy of the current array element to compare
/// * `element2`: copy of the next array element to compare
///
/// ## Return Value
///
/// `true` if `element1 == element2`, otherwise `false`.
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 2, 2, 3, 1, 2, 3, 4, 3, 3, 2, 1];
///
/// x.dedup(|a, b| a >= b);
///
/// print(x); // prints "[1, 2, 3, 4]"
/// ```
fn dedup(array: Array, comparer: FnPtr) -> ();
/// Remove all elements in the array that returns `true` when applied a function named by `filter`
/// and return them as a new array.
///
/// # Function Parameters
///
/// A function with the same name as the value of `filter` must exist taking these parameters:
///
/// * `element`: copy of array element
/// * `index` _(optional)_: current index in the array
///
/// # Example
///
/// ```rhai
/// fn small(x) { x < 3 }
///
/// fn screen(x, i) { x + i > 5 }
///
/// let x = [1, 2, 3, 4, 5];
///
/// let y = x.drain("small");
///
/// print(x); // prints "[3, 4, 5]"
///
/// print(y); // prints "[1, 2]"
///
/// let z = x.drain("screen");
///
/// print(x); // prints "[3, 4]"
///
/// print(z); // prints "[5]"
/// ```
fn drain(array: Array, filter: String) -> Array;
/// Remove all elements in the array that returns `true` when applied the `filter` function and
/// return them as a new array.
///
/// # Function Parameters
///
/// * `element`: copy of array element
/// * `index` _(optional)_: current index in the array
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3, 4, 5];
///
/// let y = x.drain(|v| v < 3);
///
/// print(x); // prints "[3, 4, 5]"
///
/// print(y); // prints "[1, 2]"
///
/// let z = x.drain(|v, i| v + i > 5);
///
/// print(x); // prints "[3, 4]"
///
/// print(z); // prints "[5]"
/// ```
fn drain(array: Array, filter: FnPtr) -> Array;
/// Remove all elements in the array within an exclusive `range` and return them as a new array.
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3, 4, 5];
///
/// let y = x.drain(1..3);
///
/// print(x); // prints "[1, 4, 5]"
///
/// print(y); // prints "[2, 3]"
///
/// let z = x.drain(2..3);
///
/// print(x); // prints "[1, 4]"
///
/// print(z); // prints "[5]"
/// ```
fn drain(array: Array, range: Range<int>) -> Array;
/// Remove all elements in the array within an inclusive `range` and return them as a new array.
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3, 4, 5];
///
/// let y = x.drain(1..=2);
///
/// print(x); // prints "[1, 4, 5]"
///
/// print(y); // prints "[2, 3]"
///
/// let z = x.drain(2..=2);
///
/// print(x); // prints "[1, 4]"
///
/// print(z); // prints "[5]"
/// ```
fn drain(array: Array, range: RangeInclusive<int>) -> Array;
/// Remove all bytes in the BLOB within an exclusive `range` and return them as a new BLOB.
///
/// # Example
///
/// ```rhai
/// let b1 = blob();
///
/// b1 += 1; b1 += 2; b1 += 3; b1 += 4; b1 += 5;
///
/// let b2 = b1.drain(1..3);
///
/// print(b1); // prints "[010405]"
///
/// print(b2); // prints "[0203]"
///
/// let b3 = b1.drain(2..3);
///
/// print(b1); // prints "[0104]"
///
/// print(b3); // prints "[05]"
/// ```
fn drain(blob: Blob, range: Range<int>) -> Blob;
/// Remove all bytes in the BLOB within an inclusive `range` and return them as a new BLOB.
///
/// # Example
///
/// ```rhai
/// let b1 = blob();
///
/// b1 += 1; b1 += 2; b1 += 3; b1 += 4; b1 += 5;
///
/// let b2 = b1.drain(1..=2);
///
/// print(b1); // prints "[010405]"
///
/// print(b2); // prints "[0203]"
///
/// let b3 = b1.drain(2..=2);
///
/// print(b1); // prints "[0104]"
///
/// print(b3); // prints "[05]"
/// ```
fn drain(blob: Blob, range: RangeInclusive<int>) -> Blob;
/// Remove all elements within a portion of the array and return them as a new array.
///
/// * If `start` < 0, position counts from the end of the array (`-1` is the last element).
/// * If `start` < -length of array, position counts from the beginning of the array.
/// * If `start` ≥ length of array, no element is removed and an empty array is returned.
/// * If `len` ≤ 0, no element is removed and an empty array is returned.
/// * If `start` position + `len` ≥ length of array, entire portion of the array after the `start` position is removed and returned.
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3, 4, 5];
///
/// let y = x.drain(1, 2);
///
/// print(x); // prints "[1, 4, 5]"
///
/// print(y); // prints "[2, 3]"
///
/// let z = x.drain(-1, 1);
///
/// print(x); // prints "[1, 4]"
///
/// print(z); // prints "[5]"
/// ```
fn drain(array: Array, start: int, len: int) -> Array;
/// Remove all bytes within a portion of the BLOB and return them as a new BLOB.
///
/// * If `start` < 0, position counts from the end of the BLOB (`-1` is the last byte).
/// * If `start` < -length of BLOB, position counts from the beginning of the BLOB.
/// * If `start` ≥ length of BLOB, nothing is removed and an empty BLOB is returned.
/// * If `len` ≤ 0, nothing is removed and an empty BLOB is returned.
/// * If `start` position + `len` ≥ length of BLOB, entire portion of the BLOB after the `start` position is removed and returned.
///
/// # Example
///
/// ```rhai
/// let b1 = blob();
///
/// b1 += 1; b1 += 2; b1 += 3; b1 += 4; b1 += 5;
///
/// let b2 = b1.drain(1, 2);
///
/// print(b1); // prints "[010405]"
///
/// print(b2); // prints "[0203]"
///
/// let b3 = b1.drain(-1, 1);
///
/// print(b3); // prints "[0104]"
///
/// print(z); // prints "[5]"
/// ```
fn drain(blob: Blob, start: int, len: int) -> Blob;
/// Return the number of seconds between the current system time and the timestamp.
///
/// # Example
///
/// ```rhai
/// let now = timestamp();
///
/// sleep(10.0); // sleep for 10 seconds
///
/// print(now.elapsed); // prints 10.???
/// ```
fn elapsed(timestamp: Instant) -> RhaiResult;
/// Return the end of the exclusive range.
fn end(range: ExclusiveRange) -> int;
/// Return the end of the inclusive range.
fn end(range: InclusiveRange) -> int;
/// Return `true` if the string ends with a specified string.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world!";
///
/// print(text.ends_with("world!")); // prints true
///
/// print(text.ends_with("hello")); // prints false
/// ```
fn ends_with(string: String, match_string: String) -> bool;
/// Return the exponential of the decimal number.
fn exp(x: Decimal) -> Decimal;
/// Return the exponential of the floating-point number.
fn exp(x: float) -> float;
/// Copy an exclusive range of the array and return it as a new array.
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3, 4, 5];
///
/// print(x.extract(1..3)); // prints "[2, 3]"
///
/// print(x); // prints "[1, 2, 3, 4, 5]"
/// ```
fn extract(array: Array, range: Range<int>) -> Array;
/// Copy an inclusive range of the array and return it as a new array.
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3, 4, 5];
///
/// print(x.extract(1..=3)); // prints "[2, 3, 4]"
///
/// print(x); // prints "[1, 2, 3, 4, 5]"
/// ```
fn extract(array: Array, range: RangeInclusive<int>) -> Array;
/// Copy a portion of the array beginning at the `start` position till the end and return it as
/// a new array.
///
/// * If `start` < 0, position counts from the end of the array (`-1` is the last element).
/// * If `start` < -length of array, the entire array is copied and returned.
/// * If `start` ≥ length of array, an empty array is returned.
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3, 4, 5];
///
/// print(x.extract(2)); // prints "[3, 4, 5]"
///
/// print(x.extract(-3)); // prints "[3, 4, 5]"
///
/// print(x); // prints "[1, 2, 3, 4, 5]"
/// ```
fn extract(array: Array, start: int) -> Array;
/// Copy an exclusive `range` of the BLOB and return it as a new BLOB.
///
/// # Example
///
/// ```rhai
/// let b = blob();
///
/// b += 1; b += 2; b += 3; b += 4; b += 5;
///
/// print(b.extract(1..3)); // prints "[0203]"
///
/// print(b); // prints "[0102030405]"
/// ```
fn extract(blob: Blob, range: Range<int>) -> Blob;
/// Copy an inclusive `range` of the BLOB and return it as a new BLOB.
///
/// # Example
///
/// ```rhai
/// let b = blob();
///
/// b += 1; b += 2; b += 3; b += 4; b += 5;
///
/// print(b.extract(1..=3)); // prints "[020304]"
///
/// print(b); // prints "[0102030405]"
/// ```
fn extract(blob: Blob, range: RangeInclusive<int>) -> Blob;
/// Copy a portion of the BLOB beginning at the `start` position till the end and return it as
/// a new BLOB.
///
/// * If `start` < 0, position counts from the end of the BLOB (`-1` is the last byte).
/// * If `start` < -length of BLOB, the entire BLOB is copied and returned.
/// * If `start` ≥ length of BLOB, an empty BLOB is returned.
///
/// # Example
///
/// ```rhai
/// let b = blob();
///
/// b += 1; b += 2; b += 3; b += 4; b += 5;
///
/// print(b.extract(2)); // prints "[030405]"
///
/// print(b.extract(-3)); // prints "[030405]"
///
/// print(b); // prints "[0102030405]"
/// ```
fn extract(blob: Blob, start: int) -> Blob;
/// Copy a portion of the array and return it as a new array.
///
/// * If `start` < 0, position counts from the end of the array (`-1` is the last element).
/// * If `start` < -length of array, position counts from the beginning of the array.
/// * If `start` ≥ length of array, an empty array is returned.
/// * If `len` ≤ 0, an empty array is returned.
/// * If `start` position + `len` ≥ length of array, entire portion of the array after the `start` position is copied and returned.
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3, 4, 5];
///
/// print(x.extract(1, 3)); // prints "[2, 3, 4]"
///
/// print(x.extract(-3, 2)); // prints "[3, 4]"
///
/// print(x); // prints "[1, 2, 3, 4, 5]"
/// ```
fn extract(array: Array, start: int, len: int) -> Array;
/// Copy a portion of the BLOB and return it as a new BLOB.
///
/// * If `start` < 0, position counts from the end of the BLOB (`-1` is the last byte).
/// * If `start` < -length of BLOB, position counts from the beginning of the BLOB.
/// * If `start` ≥ length of BLOB, an empty BLOB is returned.
/// * If `len` ≤ 0, an empty BLOB is returned.
/// * If `start` position + `len` ≥ length of BLOB, entire portion of the BLOB after the `start` position is copied and returned.
///
/// # Example
///
/// ```rhai
/// let b = blob();
///
/// b += 1; b += 2; b += 3; b += 4; b += 5;
///
/// print(b.extract(1, 3)); // prints "[020303]"
///
/// print(b.extract(-3, 2)); // prints "[0304]"
///
/// print(b); // prints "[0102030405]"
/// ```
fn extract(blob: Blob, start: int, len: int) -> Blob;
/// Add all property values of another object map into the object map.
/// Only properties that do not originally exist in the object map are added.
///
/// # Example
///
/// ```rhai
/// let m = #{a:1, b:2, c:3};
/// let n = #{a: 42, d:0};
///
/// m.fill_with(n);
///
/// print(m); // prints "#{a:1, b:2, c:3, d:0}"
/// ```
fn fill_with(map: Map, map2: Map) -> ();
/// Iterate through all the elements in the array, applying a `filter` function to each element
/// in turn, and return a copy of all elements (in order) that return `true` as a new array.
///
/// # Function Parameters
///
/// * `element`: copy of array element
/// * `index` _(optional)_: current index in the array
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3, 4, 5];
///
/// let y = x.filter(|v| v >= 3);
///
/// print(y); // prints "[3, 4, 5]"
///
/// let y = x.filter(|v, i| v * i >= 10);
///
/// print(y); // prints "[12, 20]"
/// ```
fn filter(array: Array, filter: FnPtr) -> Array;
/// Iterate through all the elements in the array, applying a function named by `filter` to each
/// element in turn, and return a copy of all elements (in order) that return `true` as a new array.
///
/// # Function Parameters
///
/// A function with the same name as the value of `filter` must exist taking these parameters:
///
/// * `element`: copy of array element
/// * `index` _(optional)_: current index in the array
///
/// # Example
///
/// ```rhai
/// fn screen(x, i) { x * i >= 10 }
///
/// let x = [1, 2, 3, 4, 5];
///
/// let y = x.filter("is_odd");
///
/// print(y); // prints "[1, 3, 5]"
///
/// let y = x.filter("screen");
///
/// print(y); // prints "[12, 20]"
/// ```
fn filter(array: Array, filter_func: String) -> Array;
/// Return the largest whole number less than or equals to the decimal number.
fn floor(x: Decimal) -> Decimal;
/// Return the largest whole number less than or equals to the floating-point number.
fn floor(x: float) -> float;
/// Return the fractional part of the decimal number.
fn fraction(x: Decimal) -> Decimal;
/// Return the fractional part of the floating-point number.
fn fraction(x: float) -> float;
/// Get a copy of the element at the `index` position in the array.
///
/// * If `index` < 0, position counts from the end of the array (`-1` is the last element).
/// * If `index` < -length of array, `()` is returned.
/// * If `index` ≥ length of array, `()` is returned.
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3];
///
/// print(x.get(0)); // prints 1
///
/// print(x.get(-1)); // prints 3
///
/// print(x.get(99)); // prints empty (for '()')
/// ```
fn get(array: Array, index: int) -> ?;
/// Get the byte value at the `index` position in the BLOB.
///
/// * If `index` < 0, position counts from the end of the BLOB (`-1` is the last element).
/// * If `index` < -length of BLOB, zero is returned.
/// * If `index` ≥ length of BLOB, zero is returned.
///
/// # Example
///
/// ```rhai
/// let b = blob();
///
/// b += 1; b += 2; b += 3; b += 4; b += 5;
///
/// print(b.get(0)); // prints 1
///
/// print(b.get(-1)); // prints 5
///
/// print(b.get(99)); // prints 0
/// ```
fn get(blob: Blob, index: int) -> int;
/// Get the value of the `property` in the object map and return a copy.
///
/// If `property` does not exist in the object map, `()` is returned.
///
/// # Example
///
/// ```rhai
/// let m = #{a: 1, b: 2, c: 3};
///
/// print(m.get("b")); // prints 2
///
/// print(m.get("x")); // prints empty (for '()')
/// ```
fn get(map: Map, property: String) -> ?;
/// Get the character at the `index` position in the string.
///
/// * If `index` < 0, position counts from the end of the string (`-1` is the last character).
/// * If `index` < -length of string, zero is returned.
/// * If `index` ≥ length of string, zero is returned.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world!";
///
/// print(text.get(0)); // prints 'h'
///
/// print(text.get(-1)); // prints '!'
///
/// print(text.get(99)); // prints empty (for '()')'
/// ```
fn get(string: String, index: int) -> ?;
/// Return an iterator over all the bits in the number.
///
/// # Example
///
/// ```rhai
/// let x = 123456;
///
/// for bit in x.bits {
/// print(bit);
/// }
/// ```
fn get bits(value: int) -> Iterator<bool>;
/// Return the length of the string, in number of bytes used to store it in UTF-8 encoding.
///
/// # Example
///
/// ```rhai
/// let text = "朝には紅顔ありて夕べには白骨となる";
///
/// print(text.bytes); // prints 51
/// ```
fn get bytes(string: String) -> int;
/// Return the smallest whole number larger than or equals to the decimal number.
fn get ceiling(x: Decimal) -> Decimal;
/// Return the smallest whole number larger than or equals to the floating-point number.
fn get ceiling(x: float) -> float;
/// Return an iterator over all the characters in the string.
///
/// # Example
///
/// ```rhai
/// for ch in "hello, world!".chars {
/// print(ch);
/// }
/// ```
fn get chars(string: String) -> Iterator<char>;
/// Return the number of seconds between the current system time and the timestamp.
///
/// # Example
///
/// ```rhai
/// let now = timestamp();
///
/// sleep(10.0); // sleep for 10 seconds
///
/// print(now.elapsed); // prints 10.???
/// ```
fn get elapsed(timestamp: Instant) -> RhaiResult;
/// Return the end of the exclusive range.
fn get end(range: ExclusiveRange) -> int;
/// Return the end of the inclusive range.
fn get end(range: InclusiveRange) -> int;
/// Return the largest whole number less than or equals to the decimal number.
fn get floor(x: Decimal) -> Decimal;
/// Return the largest whole number less than or equals to the floating-point number.
fn get floor(x: float) -> float;
/// Return the fractional part of the decimal number.
fn get fraction(x: Decimal) -> Decimal;
/// Return the fractional part of the floating-point number.
fn get fraction(x: float) -> float;
/// Return the integral part of the decimal number.
fn get int(x: Decimal) -> Decimal;
/// Return the integral part of the floating-point number.
fn get int(x: float) -> float;
/// Return `true` if the function is an anonymous function.
///
/// # Example
///
/// ```rhai
/// let f = |x| x * 2;
///
/// print(f.is_anonymous); // prints true
/// ```
fn get is_anonymous(fn_ptr: FnPtr) -> bool;
/// Return true if the array is empty.
fn get is_empty(array: Array) -> bool;
/// Return true if the BLOB is empty.
fn get is_empty(blob: Blob) -> bool;
/// Return true if the range contains no items.
fn get is_empty(range: ExclusiveRange) -> bool;
/// Return true if the range contains no items.
fn get is_empty(range: InclusiveRange) -> bool;
/// Return true if the string is empty.
fn get is_empty(string: String) -> bool;
/// Return true if the number is even.
fn get is_even(x: int) -> bool;
/// Return true if the number is even.
fn get is_even(x: i128) -> bool;
/// Return true if the number is even.
fn get is_even(x: i16) -> bool;
/// Return true if the number is even.
fn get is_even(x: i32) -> bool;
/// Return true if the number is even.
fn get is_even(x: i8) -> bool;
/// Return true if the number is even.
fn get is_even(x: u128) -> bool;
/// Return true if the number is even.
fn get is_even(x: u16) -> bool;
/// Return true if the number is even.
fn get is_even(x: u32) -> bool;
/// Return true if the number is even.
fn get is_even(x: u64) -> bool;
/// Return true if the number is even.
fn get is_even(x: u8) -> bool;
/// Return `true` if the range is exclusive.
fn get is_exclusive(range: ExclusiveRange) -> bool;
/// Return `true` if the range is exclusive.
fn get is_exclusive(range: InclusiveRange) -> bool;
/// Return `true` if the floating-point number is finite.
fn get is_finite(x: float) -> bool;
/// Return `true` if the range is inclusive.
fn get is_inclusive(range: ExclusiveRange) -> bool;
/// Return `true` if the range is inclusive.
fn get is_inclusive(range: InclusiveRange) -> bool;
/// Return `true` if the floating-point number is infinite.
fn get is_infinite(x: float) -> bool;
/// Return `true` if the floating-point number is `NaN` (Not A Number).
fn get is_nan(x: float) -> bool;
/// Return true if the number is odd.
fn get is_odd(x: int) -> bool;
/// Return true if the number is odd.
fn get is_odd(x: i128) -> bool;
/// Return true if the number is odd.
fn get is_odd(x: i16) -> bool;
/// Return true if the number is odd.
fn get is_odd(x: i32) -> bool;
/// Return true if the number is odd.
fn get is_odd(x: i8) -> bool;
/// Return true if the number is odd.
fn get is_odd(x: u128) -> bool;
/// Return true if the number is odd.
fn get is_odd(x: u16) -> bool;
/// Return true if the number is odd.
fn get is_odd(x: u32) -> bool;
/// Return true if the number is odd.
fn get is_odd(x: u64) -> bool;
/// Return true if the number is odd.
fn get is_odd(x: u8) -> bool;
/// Return true if the decimal number is zero.
fn get is_zero(x: Decimal) -> bool;
/// Return true if the number is zero.
fn get is_zero(x: int) -> bool;
/// Return true if the floating-point number is zero.
fn get is_zero(x: f32) -> bool;
/// Return true if the floating-point number is zero.
fn get is_zero(x: float) -> bool;
/// Return true if the number is zero.
fn get is_zero(x: i128) -> bool;
/// Return true if the number is zero.
fn get is_zero(x: i16) -> bool;
/// Return true if the number is zero.
fn get is_zero(x: i32) -> bool;
/// Return true if the number is zero.
fn get is_zero(x: i8) -> bool;
/// Return true if the number is zero.
fn get is_zero(x: u128) -> bool;
/// Return true if the number is zero.
fn get is_zero(x: u16) -> bool;
/// Return true if the number is zero.
fn get is_zero(x: u32) -> bool;
/// Return true if the number is zero.
fn get is_zero(x: u64) -> bool;
/// Return true if the number is zero.
fn get is_zero(x: u8) -> bool;
/// Number of elements in the array.
fn get len(array: Array) -> int;
/// Return the length of the BLOB.
///
/// # Example
///
/// ```rhai
/// let b = blob(10, 0x42);
///
/// print(b); // prints "[4242424242424242 4242]"
///
/// print(b.len()); // prints 10
/// ```
fn get len(blob: Blob) -> int;
/// Return the length of the string, in number of characters.
///
/// # Example
///
/// ```rhai
/// let text = "朝には紅顔ありて夕べには白骨となる";
///
/// print(text.len); // prints 17
/// ```
fn get len(string: String) -> int;
/// Return the name of the function.
///
/// # Example
///
/// ```rhai
/// fn double(x) { x * 2 }
///
/// let f = Fn("double");
///
/// print(f.name); // prints "double"
/// ```
fn get name(fn_ptr: FnPtr) -> String;
/// Return the nearest whole number closest to the decimal number.
/// Always round mid-point towards the closest even number.
fn get round(x: Decimal) -> Decimal;
/// Return the nearest whole number closest to the floating-point number.
/// Rounds away from zero.
fn get round(x: float) -> float;
/// Return the start of the exclusive range.
fn get start(range: ExclusiveRange) -> int;
/// Return the start of the inclusive range.
fn get start(range: InclusiveRange) -> int;
/// Return the _tag_ of a `Dynamic` value.
///
/// # Example
///
/// ```rhai
/// let x = "hello, world!";
///
/// x.tag = 42;
///
/// print(x.tag); // prints 42
/// ```
fn get tag(value: ?) -> int;
/// Return `true` if the specified `bit` in the number is set.
///
/// If `bit` < 0, position counts from the MSB (Most Significant Bit).
///
/// # Example
///
/// ```rhai
/// let x = 123456;
///
/// print(x.get_bit(5)); // prints false
///
/// print(x.get_bit(6)); // prints true
///
/// print(x.get_bit(-48)); // prints true on 64-bit
/// ```
fn get_bit(value: int, bit: int) -> bool;
/// Return an exclusive range of bits in the number as a new number.
///
/// # Example
///
/// ```rhai
/// let x = 123456;
///
/// print(x.get_bits(5..10)); // print 18
/// ```
fn get_bits(value: int, range: Range<int>) -> int;
/// Return an inclusive range of bits in the number as a new number.
///
/// # Example
///
/// ```rhai
/// let x = 123456;
///
/// print(x.get_bits(5..=9)); // print 18
/// ```
fn get_bits(value: int, range: RangeInclusive<int>) -> int;
/// Return a portion of bits in the number as a new number.
///
/// * If `start` < 0, position counts from the MSB (Most Significant Bit).
/// * If `bits` ≤ 0, zero is returned.
/// * If `start` position + `bits` ≥ total number of bits, the bits after the `start` position are returned.
///
/// # Example
///
/// ```rhai
/// let x = 123456;
///
/// print(x.get_bits(5, 8)); // print 18
/// ```
fn get_bits(value: int, start: int, bits: int) -> int;
fn get_fn_metadata_list() -> Array;
fn get_fn_metadata_list(name: String) -> Array;
fn get_fn_metadata_list(name: String, params: int) -> Array;
/// Return the hypotenuse of a triangle with sides `x` and `y`.
fn hypot(x: float, y: float) -> float;
/// Iterate through all the elements in the array, applying a function named by `filter` to each
/// element in turn, and return the index of the first element that returns `true`.
/// If no element returns `true`, `-1` is returned.
///
/// # Function Parameters
///
/// A function with the same name as the value of `filter` must exist taking these parameters:
///
/// * `element`: copy of array element
/// * `index` _(optional)_: current index in the array
///
/// # Example
///
/// ```rhai
/// fn is_special(x) { x > 3 }
///
/// fn is_dumb(x) { x > 8 }
///
/// let x = [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 5];
///
/// print(x.index_of("is_special")); // prints 3
///
/// print(x.index_of("is_dumb")); // prints -1
/// ```
fn index_of(array: Array, filter: String) -> int;
/// Iterate through all the elements in the array, applying a `filter` function to each element
/// in turn, and return the index of the first element that returns `true`.
/// If no element returns `true`, `-1` is returned.
///
/// # Function Parameters
///
/// * `element`: copy of array element
/// * `index` _(optional)_: current index in the array
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 5];
///
/// print(x.index_of(|v| v > 3)); // prints 3: 4 > 3
///
/// print(x.index_of(|v| v > 8)); // prints -1: nothing is > 8
///
/// print(x.index_of(|v, i| v * i > 20)); // prints 7: 4 * 7 > 20
/// ```
fn index_of(array: Array, filter: FnPtr) -> int;
/// Find the first element in the array that equals a particular `value` and return its index.
/// If no element equals `value`, `-1` is returned.
///
/// The operator `==` is used to compare elements with `value` and must be defined,
/// otherwise `false` is assumed.
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 5];
///
/// print(x.index_of(4)); // prints 3 (first index)
///
/// print(x.index_of(9)); // prints -1
///
/// print(x.index_of("foo")); // prints -1: strings do not equal numbers
/// ```
fn index_of(array: Array, value: ?) -> int;
/// Find the specified `character` in the string and return the first index where it is found.
/// If the `character` is not found, `-1` is returned.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world!";
///
/// print(text.index_of('l')); // prints 2 (first index)
///
/// print(text.index_of('x')); // prints -1
/// ```
fn index_of(string: String, character: char) -> int;
/// Find the specified `character` in the string and return the first index where it is found.
/// If the `character` is not found, `-1` is returned.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world! hello, foobar!";
///
/// print(text.index_of("ll")); // prints 2 (first index)
///
/// print(text.index_of("xx:)); // prints -1
/// ```
fn index_of(string: String, find_string: String) -> int;
/// Iterate through all the elements in the array, starting from a particular `start` position,
/// applying a function named by `filter` to each element in turn, and return the index of the
/// first element that returns `true`. If no element returns `true`, `-1` is returned.
///
/// * If `start` < 0, position counts from the end of the array (`-1` is the last element).
/// * If `start` < -length of array, position counts from the beginning of the array.
/// * If `start` ≥ length of array, `-1` is returned.
///
/// # Function Parameters
///
/// A function with the same name as the value of `filter` must exist taking these parameters:
///
/// * `element`: copy of array element
/// * `index` _(optional)_: current index in the array
///
/// # Example
///
/// ```rhai
/// fn plural(x) { x > 1 }
///
/// fn singular(x) { x < 2 }
///
/// fn screen(x, i) { x * i > 20 }
///
/// let x = [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 5];
///
/// print(x.index_of("plural", 3)); // prints 5: 2 > 1
///
/// print(x.index_of("singular", 9)); // prints -1: nothing < 2 past index 9
///
/// print(x.index_of("plural", 15)); // prints -1: nothing found past end of array
///
/// print(x.index_of("plural", -5)); // prints 9: -5 = start from index 8
///
/// print(x.index_of("plural", -99)); // prints 1: -99 = start from beginning
///
/// print(x.index_of("screen", 8)); // prints 10: 3 * 10 > 20
/// ```
fn index_of(array: Array, filter: String, start: int) -> int;
/// Iterate through all the elements in the array, starting from a particular `start` position,
/// applying a `filter` function to each element in turn, and return the index of the first
/// element that returns `true`. If no element returns `true`, `-1` is returned.
///
/// * If `start` < 0, position counts from the end of the array (`-1` is the last element).
/// * If `start` < -length of array, position counts from the beginning of the array.
/// * If `start` ≥ length of array, `-1` is returned.
///
/// # Function Parameters
///
/// * `element`: copy of array element
/// * `index` _(optional)_: current index in the array
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 5];
///
/// print(x.index_of(|v| v > 1, 3)); // prints 5: 2 > 1
///
/// print(x.index_of(|v| v < 2, 9)); // prints -1: nothing < 2 past index 9
///
/// print(x.index_of(|v| v > 1, 15)); // prints -1: nothing found past end of array
///
/// print(x.index_of(|v| v > 1, -5)); // prints 9: -5 = start from index 8
///
/// print(x.index_of(|v| v > 1, -99)); // prints 1: -99 = start from beginning
///
/// print(x.index_of(|v, i| v * i > 20, 8)); // prints 10: 3 * 10 > 20
/// ```
fn index_of(array: Array, filter: FnPtr, start: int) -> int;
/// Find the first element in the array, starting from a particular `start` position, that
/// equals a particular `value` and return its index. If no element equals `value`, `-1` is returned.
///
/// * If `start` < 0, position counts from the end of the array (`-1` is the last element).
/// * If `start` < -length of array, position counts from the beginning of the array.
/// * If `start` ≥ length of array, `-1` is returned.
///
/// The operator `==` is used to compare elements with `value` and must be defined,
/// otherwise `false` is assumed.
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 5];
///
/// print(x.index_of(4, 2)); // prints 3
///
/// print(x.index_of(4, 5)); // prints 7
///
/// print(x.index_of(4, 15)); // prints -1: nothing found past end of array
///
/// print(x.index_of(4, -5)); // prints 11: -5 = start from index 8
///
/// print(x.index_of(9, 1)); // prints -1: nothing equals 9
///
/// print(x.index_of("foo", 1)); // prints -1: strings do not equal numbers
/// ```
fn index_of(array: Array, value: ?, start: int) -> int;
/// Find the specified `character` in the string, starting from the specified `start` position,
/// and return the first index where it is found.
/// If the `character` is not found, `-1` is returned.
///
/// * If `start` < 0, position counts from the end of the string (`-1` is the last character).
/// * If `start` < -length of string, position counts from the beginning of the string.
/// * If `start` ≥ length of string, `-1` is returned.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world!";
///
/// print(text.index_of('l', 5)); // prints 10 (first index after 5)
///
/// print(text.index_of('o', -7)); // prints 8
///
/// print(text.index_of('x', 0)); // prints -1
/// ```
fn index_of(string: String, character: char, start: int) -> int;
/// Find the specified sub-string in the string, starting from the specified `start` position,
/// and return the first index where it is found.
/// If the sub-string is not found, `-1` is returned.
///
/// * If `start` < 0, position counts from the end of the string (`-1` is the last character).
/// * If `start` < -length of string, position counts from the beginning of the string.
/// * If `start` ≥ length of string, `-1` is returned.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world! hello, foobar!";
///
/// print(text.index_of("ll", 5)); // prints 16 (first index after 5)
///
/// print(text.index_of("ll", -15)); // prints 16
///
/// print(text.index_of("xx", 0)); // prints -1
/// ```
fn index_of(string: String, find_string: String, start: int) -> int;
/// Add a new element into the array at a particular `index` position.
///
/// * If `index` < 0, position counts from the end of the array (`-1` is the last element).
/// * If `index` < -length of array, the element is added to the beginning of the array.
/// * If `index` ≥ length of array, the element is appended to the end of the array.
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3];
///
/// x.insert(0, "hello");
///
/// x.insert(2, true);
///
/// x.insert(-2, 42);
///
/// print(x); // prints ["hello", 1, true, 2, 42, 3]
/// ```
fn insert(array: Array, index: int, item: ?) -> ();
/// Add a byte `value` to the BLOB at a particular `index` position.
///
/// * If `index` < 0, position counts from the end of the BLOB (`-1` is the last byte).
/// * If `index` < -length of BLOB, the byte value is added to the beginning of the BLOB.
/// * If `index` ≥ length of BLOB, the byte value is appended to the end of the BLOB.
///
/// Only the lower 8 bits of the `value` are used; all other bits are ignored.
///
/// # Example
///
/// ```rhai
/// let b = blob(5, 0x42);
///
/// b.insert(2, 0x18);
///
/// print(b); // prints "[4242184242]"
/// ```
fn insert(blob: Blob, index: int, value: int) -> ();
/// Return the integral part of the decimal number.
fn int(x: Decimal) -> Decimal;
/// Return the integral part of the floating-point number.
fn int(x: float) -> float;
/// Return `true` if the function is an anonymous function.
///
/// # Example
///
/// ```rhai
/// let f = |x| x * 2;
///
/// print(f.is_anonymous); // prints true
/// ```
fn is_anonymous(fn_ptr: FnPtr) -> bool;
/// Return true if the array is empty.
fn is_empty(array: Array) -> bool;
/// Return true if the BLOB is empty.
fn is_empty(blob: Blob) -> bool;
/// Return true if the map is empty.
fn is_empty(map: Map) -> bool;
/// Return true if the range contains no items.
fn is_empty(range: ExclusiveRange) -> bool;
/// Return true if the range contains no items.
fn is_empty(range: InclusiveRange) -> bool;
/// Return true if the string is empty.
fn is_empty(string: String) -> bool;
/// Return true if the number is even.
fn is_even(x: int) -> bool;
/// Return true if the number is even.
fn is_even(x: i128) -> bool;
/// Return true if the number is even.
fn is_even(x: i16) -> bool;
/// Return true if the number is even.
fn is_even(x: i32) -> bool;
/// Return true if the number is even.
fn is_even(x: i8) -> bool;
/// Return true if the number is even.
fn is_even(x: u128) -> bool;
/// Return true if the number is even.
fn is_even(x: u16) -> bool;
/// Return true if the number is even.
fn is_even(x: u32) -> bool;
/// Return true if the number is even.
fn is_even(x: u64) -> bool;
/// Return true if the number is even.
fn is_even(x: u8) -> bool;
/// Return `true` if the range is exclusive.
fn is_exclusive(range: ExclusiveRange) -> bool;
/// Return `true` if the range is exclusive.
fn is_exclusive(range: InclusiveRange) -> bool;
/// Return `true` if the floating-point number is finite.
fn is_finite(x: float) -> bool;
/// Return `true` if the range is inclusive.
fn is_inclusive(range: ExclusiveRange) -> bool;
/// Return `true` if the range is inclusive.
fn is_inclusive(range: InclusiveRange) -> bool;
/// Return `true` if the floating-point number is infinite.
fn is_infinite(x: float) -> bool;
/// Return `true` if the floating-point number is `NaN` (Not A Number).
fn is_nan(x: float) -> bool;
/// Return true if the number is odd.
fn is_odd(x: int) -> bool;
/// Return true if the number is odd.
fn is_odd(x: i128) -> bool;
/// Return true if the number is odd.
fn is_odd(x: i16) -> bool;
/// Return true if the number is odd.
fn is_odd(x: i32) -> bool;
/// Return true if the number is odd.
fn is_odd(x: i8) -> bool;
/// Return true if the number is odd.
fn is_odd(x: u128) -> bool;
/// Return true if the number is odd.
fn is_odd(x: u16) -> bool;
/// Return true if the number is odd.
fn is_odd(x: u32) -> bool;
/// Return true if the number is odd.
fn is_odd(x: u64) -> bool;
/// Return true if the number is odd.
fn is_odd(x: u8) -> bool;
/// Return true if the decimal number is zero.
fn is_zero(x: Decimal) -> bool;
/// Return true if the number is zero.
fn is_zero(x: int) -> bool;
/// Return true if the floating-point number is zero.
fn is_zero(x: f32) -> bool;
/// Return true if the floating-point number is zero.
fn is_zero(x: float) -> bool;
/// Return true if the number is zero.
fn is_zero(x: i128) -> bool;
/// Return true if the number is zero.
fn is_zero(x: i16) -> bool;
/// Return true if the number is zero.
fn is_zero(x: i32) -> bool;
/// Return true if the number is zero.
fn is_zero(x: i8) -> bool;
/// Return true if the number is zero.
fn is_zero(x: u128) -> bool;
/// Return true if the number is zero.
fn is_zero(x: u16) -> bool;
/// Return true if the number is zero.
fn is_zero(x: u32) -> bool;
/// Return true if the number is zero.
fn is_zero(x: u64) -> bool;
/// Return true if the number is zero.
fn is_zero(x: u8) -> bool;
/// Return an array with all the property names in the object map.
///
/// # Example
///
/// ```rhai
/// let m = #{a:1, b:2, c:3};
///
/// print(m.keys()); // prints ["a", "b", "c"]
/// ```
fn keys(map: Map) -> Array;
/// Number of elements in the array.
fn len(array: Array) -> int;
/// Return the length of the BLOB.
///
/// # Example
///
/// ```rhai
/// let b = blob(10, 0x42);
///
/// print(b); // prints "[4242424242424242 4242]"
///
/// print(b.len()); // prints 10
/// ```
fn len(blob: Blob) -> int;
/// Return the number of properties in the object map.
fn len(map: Map) -> int;
/// Return the length of the string, in number of characters.
///
/// # Example
///
/// ```rhai
/// let text = "朝には紅顔ありて夕べには白骨となる";
///
/// print(text.len); // prints 17
/// ```
fn len(string: String) -> int;
/// Return the natural log of the decimal number.
fn ln(x: Decimal) -> Decimal;
/// Return the natural log of the floating-point number.
fn ln(x: float) -> float;
/// Return the log of the decimal number with base 10.
fn log(x: Decimal) -> Decimal;
/// Return the log of the floating-point number with base 10.
fn log(x: float) -> float;
/// Return the log of the floating-point number with `base`.
fn log(x: float, base: float) -> float;
/// Convert the character to lower-case.
///
/// # Example
///
/// ```rhai
/// let ch = 'A';
///
/// ch.make_lower();
///
/// print(ch); // prints 'a'
/// ```
fn make_lower(character: char) -> ();
/// Convert the string to all lower-case.
///
/// # Example
///
/// ```rhai
/// let text = "HELLO, WORLD!"
///
/// text.make_lower();
///
/// print(text); // prints "hello, world!";
/// ```
fn make_lower(string: String) -> ();
/// Convert the character to upper-case.
///
/// # Example
///
/// ```rhai
/// let ch = 'a';
///
/// ch.make_upper();
///
/// print(ch); // prints 'A'
/// ```
fn make_upper(character: char) -> ();
/// Convert the string to all upper-case.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world!"
///
/// text.make_upper();
///
/// print(text); // prints "HELLO, WORLD!";
/// ```
fn make_upper(string: String) -> ();
/// Iterate through all the elements in the array, applying a function named by `mapper` to each
/// element in turn, and return the results as a new array.
///
/// # Function Parameters
///
/// A function with the same name as the value of `mapper` must exist taking these parameters:
///
/// * `element`: copy of array element
/// * `index` _(optional)_: current index in the array
///
/// # Example
///
/// ```rhai
/// fn square(x) { x * x }
///
/// fn multiply(x, i) { x * i }
///
/// let x = [1, 2, 3, 4, 5];
///
/// let y = x.map("square");
///
/// print(y); // prints "[1, 4, 9, 16, 25]"
///
/// let y = x.map("multiply");
///
/// print(y); // prints "[0, 2, 6, 12, 20]"
/// ```
fn map(array: Array, mapper: String) -> Array;
/// Iterate through all the elements in the array, applying a `mapper` function to each element
/// in turn, and return the results as a new array.
///
/// # Function Parameters
///
/// * `element`: copy of array element
/// * `index` _(optional)_: current index in the array
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3, 4, 5];
///
/// let y = x.map(|v| v * v);
///
/// print(y); // prints "[1, 4, 9, 16, 25]"
///
/// let y = x.map(|v, i| v * i);
///
/// print(y); // prints "[0, 2, 6, 12, 20]"
/// ```
fn map(array: Array, mapper: FnPtr) -> Array;
/// Add all property values of another object map into the object map.
/// Existing property values of the same names are replaced.
///
/// # Example
///
/// ```rhai
/// let m = #{a:1, b:2, c:3};
/// let n = #{a: 42, d:0};
///
/// m.mixin(n);
///
/// print(m); // prints "#{a:42, b:2, c:3, d:0}"
/// ```
fn mixin(map: Map, map2: Map) -> ();
/// Return the name of the function.
///
/// # Example
///
/// ```rhai
/// fn double(x) { x * 2 }
///
/// let f = Fn("double");
///
/// print(f.name); // prints "double"
/// ```
fn name(fn_ptr: FnPtr) -> String;
/// Pad the array to at least the specified length with copies of a specified element.
///
/// If `len` ≤ length of array, no padding is done.
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3];
///
/// x.pad(5, 42);
///
/// print(x); // prints "[1, 2, 3, 42, 42]"
///
/// x.pad(3, 123);
///
/// print(x); // prints "[1, 2, 3, 42, 42]"
/// ```
fn pad(array: Array, len: int, item: ?) -> ();
/// Pad the BLOB to at least the specified length with copies of a specified byte `value`.
///
/// If `len` ≤ length of BLOB, no padding is done.
///
/// Only the lower 8 bits of the `value` are used; all other bits are ignored.
///
/// # Example
///
/// ```rhai
/// let b = blob(3, 0x42);
///
/// b.pad(5, 0x18)
///
/// print(b); // prints "[4242421818]"
///
/// b.pad(3, 0xab)
///
/// print(b); // prints "[4242421818]"
/// ```
fn pad(blob: Blob, len: int, value: int) -> ();
/// Pad the string to at least the specified number of characters with the specified `character`.
///
/// If `len` ≤ length of string, no padding is done.
///
/// # Example
///
/// ```rhai
/// let text = "hello";
///
/// text.pad(8, '!');
///
/// print(text); // prints "hello!!!"
///
/// text.pad(5, '*');
///
/// print(text); // prints "hello!!!"
/// ```
fn pad(string: String, len: int, character: char) -> ();
/// Pad the string to at least the specified number of characters with the specified string.
///
/// If `len` ≤ length of string, no padding is done.
///
/// # Example
///
/// ```rhai
/// let text = "hello";
///
/// text.pad(10, "(!)");
///
/// print(text); // prints "hello(!)(!)"
///
/// text.pad(8, '***');
///
/// print(text); // prints "hello(!)(!)"
/// ```
fn pad(string: String, len: int, padding: String) -> ();
/// Parse the bytes within an exclusive `range` in the BLOB as a `FLOAT`
/// in big-endian byte order.
///
/// * If number of bytes in `range` < number of bytes for `FLOAT`, zeros are padded.
/// * If number of bytes in `range` > number of bytes for `FLOAT`, extra bytes are ignored.
fn parse_be_float(blob: Blob, range: Range<int>) -> float;
/// Parse the bytes within an inclusive `range` in the BLOB as a `FLOAT`
/// in big-endian byte order.
///
/// * If number of bytes in `range` < number of bytes for `FLOAT`, zeros are padded.
/// * If number of bytes in `range` > number of bytes for `FLOAT`, extra bytes are ignored.
fn parse_be_float(blob: Blob, range: RangeInclusive<int>) -> float;
/// Parse the bytes beginning at the `start` position in the BLOB as a `FLOAT`
/// in big-endian byte order.
///
/// * If `start` < 0, position counts from the end of the BLOB (`-1` is the last byte).
/// * If `start` < -length of BLOB, position counts from the beginning of the BLOB.
/// * If `start` ≥ length of BLOB, zero is returned.
/// * If `len` ≤ 0, zero is returned.
/// * If `start` position + `len` ≥ length of BLOB, entire portion of the BLOB after the `start` position is parsed.
///
/// * If number of bytes in range < number of bytes for `FLOAT`, zeros are padded.
/// * If number of bytes in range > number of bytes for `FLOAT`, extra bytes are ignored.
fn parse_be_float(blob: Blob, start: int, len: int) -> float;
/// Parse the bytes within an exclusive `range` in the BLOB as an `INT`
/// in big-endian byte order.
///
/// * If number of bytes in `range` < number of bytes for `INT`, zeros are padded.
/// * If number of bytes in `range` > number of bytes for `INT`, extra bytes are ignored.
///
/// ```rhai
/// let b = blob();
///
/// b += 1; b += 2; b += 3; b += 4; b += 5;
///
/// let x = b.parse_be_int(1..3); // parse two bytes
///
/// print(x.to_hex()); // prints "02030000...00"
/// ```
fn parse_be_int(blob: Blob, range: Range<int>) -> int;
/// Parse the bytes within an inclusive `range` in the BLOB as an `INT`
/// in big-endian byte order.
///
/// * If number of bytes in `range` < number of bytes for `INT`, zeros are padded.
/// * If number of bytes in `range` > number of bytes for `INT`, extra bytes are ignored.
///
/// ```rhai
/// let b = blob();
///
/// b += 1; b += 2; b += 3; b += 4; b += 5;
///
/// let x = b.parse_be_int(1..=3); // parse three bytes
///
/// print(x.to_hex()); // prints "0203040000...00"
/// ```
fn parse_be_int(blob: Blob, range: RangeInclusive<int>) -> int;
/// Parse the bytes beginning at the `start` position in the BLOB as an `INT`
/// in big-endian byte order.
///
/// * If `start` < 0, position counts from the end of the BLOB (`-1` is the last byte).
/// * If `start` < -length of BLOB, position counts from the beginning of the BLOB.
/// * If `start` ≥ length of BLOB, zero is returned.
/// * If `len` ≤ 0, zero is returned.
/// * If `start` position + `len` ≥ length of BLOB, entire portion of the BLOB after the `start` position is parsed.
///
/// * If number of bytes in range < number of bytes for `INT`, zeros are padded.
/// * If number of bytes in range > number of bytes for `INT`, extra bytes are ignored.
///
/// ```rhai
/// let b = blob();
///
/// b += 1; b += 2; b += 3; b += 4; b += 5;
///
/// let x = b.parse_be_int(1, 2);
///
/// print(x.to_hex()); // prints "02030000...00"
/// ```
fn parse_be_int(blob: Blob, start: int, len: int) -> int;
/// Parse a string into a decimal number.
///
/// # Example
///
/// ```rhai
/// let x = parse_decimal("123.456");
///
/// print(x); // prints 123.456
/// ```
fn parse_decimal(string: String) -> Decimal;
/// Parse a string into a floating-point number.
///
/// # Example
///
/// ```rhai
/// let x = parse_int("123.456");
///
/// print(x); // prints 123.456
/// ```
fn parse_float(string: String) -> float;
/// Parse a string into an integer number.
///
/// # Example
///
/// ```rhai
/// let x = parse_int("123");
///
/// print(x); // prints 123
/// ```
fn parse_int(string: String) -> int;
/// Parse a string into an integer number of the specified `radix`.
///
/// `radix` must be between 2 and 36.
///
/// # Example
///
/// ```rhai
/// let x = parse_int("123");
///
/// print(x); // prints 123
///
/// let y = parse_int("123abc", 16);
///
/// print(y); // prints 1194684 (0x123abc)
/// ```
fn parse_int(string: String, radix: int) -> int;
/// Parse the bytes within an exclusive `range` in the BLOB as a `FLOAT`
/// in little-endian byte order.
///
/// * If number of bytes in `range` < number of bytes for `FLOAT`, zeros are padded.
/// * If number of bytes in `range` > number of bytes for `FLOAT`, extra bytes are ignored.
fn parse_le_float(blob: Blob, range: Range<int>) -> float;
/// Parse the bytes within an inclusive `range` in the BLOB as a `FLOAT`
/// in little-endian byte order.
///
/// * If number of bytes in `range` < number of bytes for `FLOAT`, zeros are padded.
/// * If number of bytes in `range` > number of bytes for `FLOAT`, extra bytes are ignored.
fn parse_le_float(blob: Blob, range: RangeInclusive<int>) -> float;
/// Parse the bytes beginning at the `start` position in the BLOB as a `FLOAT`
/// in little-endian byte order.
///
/// * If `start` < 0, position counts from the end of the BLOB (`-1` is the last byte).
/// * If `start` < -length of BLOB, position counts from the beginning of the BLOB.
/// * If `start` ≥ length of BLOB, zero is returned.
/// * If `len` ≤ 0, zero is returned.
/// * If `start` position + `len` ≥ length of BLOB, entire portion of the BLOB after the `start` position is parsed.
///
/// * If number of bytes in range < number of bytes for `FLOAT`, zeros are padded.
/// * If number of bytes in range > number of bytes for `FLOAT`, extra bytes are ignored.
fn parse_le_float(blob: Blob, start: int, len: int) -> float;
/// Parse the bytes within an exclusive `range` in the BLOB as an `INT`
/// in little-endian byte order.
///
/// * If number of bytes in `range` < number of bytes for `INT`, zeros are padded.
/// * If number of bytes in `range` > number of bytes for `INT`, extra bytes are ignored.
///
/// ```rhai
/// let b = blob();
///
/// b += 1; b += 2; b += 3; b += 4; b += 5;
///
/// let x = b.parse_le_int(1..3); // parse two bytes
///
/// print(x.to_hex()); // prints "0302"
/// ```
fn parse_le_int(blob: Blob, range: Range<int>) -> int;
/// Parse the bytes within an inclusive `range` in the BLOB as an `INT`
/// in little-endian byte order.
///
/// * If number of bytes in `range` < number of bytes for `INT`, zeros are padded.
/// * If number of bytes in `range` > number of bytes for `INT`, extra bytes are ignored.
///
/// ```rhai
/// let b = blob();
///
/// b += 1; b += 2; b += 3; b += 4; b += 5;
///
/// let x = b.parse_le_int(1..=3); // parse three bytes
///
/// print(x.to_hex()); // prints "040302"
/// ```
fn parse_le_int(blob: Blob, range: RangeInclusive<int>) -> int;
/// Parse the bytes beginning at the `start` position in the BLOB as an `INT`
/// in little-endian byte order.
///
/// * If `start` < 0, position counts from the end of the BLOB (`-1` is the last byte).
/// * If `start` < -length of BLOB, position counts from the beginning of the BLOB.
/// * If `start` ≥ length of BLOB, zero is returned.
/// * If `len` ≤ 0, zero is returned.
/// * If `start` position + `len` ≥ length of BLOB, entire portion of the BLOB after the `start` position is parsed.
///
/// * If number of bytes in range < number of bytes for `INT`, zeros are padded.
/// * If number of bytes in range > number of bytes for `INT`, extra bytes are ignored.
///
/// ```rhai
/// let b = blob();
///
/// b += 1; b += 2; b += 3; b += 4; b += 5;
///
/// let x = b.parse_le_int(1, 2);
///
/// print(x.to_hex()); // prints "0302"
/// ```
fn parse_le_int(blob: Blob, start: int, len: int) -> int;
/// Remove the last element from the array and return it.
///
/// If the array is empty, `()` is returned.
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3];
///
/// print(x.pop()); // prints 3
///
/// print(x); // prints "[1, 2]"
/// ```
fn pop(array: Array) -> ?;
/// Remove the last byte from the BLOB and return it.
///
/// If the BLOB is empty, zero is returned.
///
/// # Example
///
/// ```rhai
/// let b = blob();
///
/// b += 1; b += 2; b += 3; b += 4; b += 5;
///
/// print(b.pop()); // prints 5
///
/// print(b); // prints "[01020304]"
/// ```
fn pop(blob: Blob) -> int;
/// Remove the last character from the string and return it.
///
/// If the string is empty, `()` is returned.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world!";
///
/// print(text.pop()); // prints '!'
///
/// print(text); // prints "hello, world"
/// ```
fn pop(string: String) -> ?;
/// Remove a specified number of characters from the end of the string and return it as a
/// new string.
///
/// * If `len` ≤ 0, the string is not modified and an empty string is returned.
/// * If `len` ≥ length of string, the string is cleared and the entire string returned.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world!";
///
/// print(text.pop(4)); // prints "rld!"
///
/// print(text); // prints "hello, wo"
/// ```
fn pop(string: String, len: int) -> String;
/// Return the empty string.
fn print() -> String;
/// Convert the array into a string.
fn print(array: Array) -> String;
/// Return the character into a string.
fn print(character: char) -> String;
/// Convert the value of the `item` into a string.
fn print(item: ?) -> String;
/// Convert the object map into a string.
fn print(map: Map) -> String;
/// Convert the value of `number` into a string.
fn print(number: f32) -> String;
/// Convert the value of `number` into a string.
fn print(number: float) -> String;
/// Return the `string`.
fn print(string: String) -> String;
/// Return the empty string.
fn print(unit: ()) -> String;
/// Return the boolean value into a string.
fn print(value: bool) -> String;
/// Add a new element, which is not another array, to the end of the array.
///
/// If `item` is `Array`, then `append` is more specific and will be called instead.
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3];
///
/// x.push("hello");
///
/// print(x); // prints [1, 2, 3, "hello"]
/// ```
fn push(array: Array, item: ?) -> ();
/// Add a new byte `value` to the end of the BLOB.
///
/// Only the lower 8 bits of the `value` are used; all other bits are ignored.
///
/// # Example
///
/// ```rhai
/// let b = blob();
///
/// b.push(0x42);
///
/// print(b); // prints "[42]"
/// ```
fn push(blob: Blob, value: int) -> ();
/// Return an iterator over the exclusive range of `from..to`.
/// The value `to` is never included.
///
/// # Example
///
/// ```rhai
/// // prints all values from 8 to 17
/// for n in range(8, 18) {
/// print(n);
/// }
/// ```
fn range(from: i128, to: i128) -> Iterator<i128>;
/// Return an iterator over the exclusive range of `from..to`.
/// The value `to` is never included.
///
/// # Example
///
/// ```rhai
/// // prints all values from 8 to 17
/// for n in range(8, 18) {
/// print(n);
/// }
/// ```
fn range(from: i16, to: i16) -> Iterator<i16>;
/// Return an iterator over the exclusive range of `from..to`.
/// The value `to` is never included.
///
/// # Example
///
/// ```rhai
/// // prints all values from 8 to 17
/// for n in range(8, 18) {
/// print(n);
/// }
/// ```
fn range(from: i32, to: i32) -> Iterator<i32>;
/// Return an iterator over the exclusive range of `from..to`.
/// The value `to` is never included.
///
/// # Example
///
/// ```rhai
/// // prints all values from 8 to 17
/// for n in range(8, 18) {
/// print(n);
/// }
/// ```
fn range(from: int, to: int) -> Iterator<int>;
/// Return an iterator over the exclusive range of `from..to`.
/// The value `to` is never included.
///
/// # Example
///
/// ```rhai
/// // prints all values from 8 to 17
/// for n in range(8, 18) {
/// print(n);
/// }
/// ```
fn range(from: i8, to: i8) -> Iterator<i8>;
/// Return an iterator over the exclusive range of `from..to`.
/// The value `to` is never included.
///
/// # Example
///
/// ```rhai
/// // prints all values from 8 to 17
/// for n in range(8, 18) {
/// print(n);
/// }
/// ```
fn range(from: u128, to: u128) -> Iterator<u128>;
/// Return an iterator over the exclusive range of `from..to`.
/// The value `to` is never included.
///
/// # Example
///
/// ```rhai
/// // prints all values from 8 to 17
/// for n in range(8, 18) {
/// print(n);
/// }
/// ```
fn range(from: u16, to: u16) -> Iterator<u16>;
/// Return an iterator over the exclusive range of `from..to`.
/// The value `to` is never included.
///
/// # Example
///
/// ```rhai
/// // prints all values from 8 to 17
/// for n in range(8, 18) {
/// print(n);
/// }
/// ```
fn range(from: u32, to: u32) -> Iterator<u32>;
/// Return an iterator over the exclusive range of `from..to`.
/// The value `to` is never included.
///
/// # Example
///
/// ```rhai
/// // prints all values from 8 to 17
/// for n in range(8, 18) {
/// print(n);
/// }
/// ```
fn range(from: u64, to: u64) -> Iterator<u64>;
/// Return an iterator over the exclusive range of `from..to`.
/// The value `to` is never included.
///
/// # Example
///
/// ```rhai
/// // prints all values from 8 to 17
/// for n in range(8, 18) {
/// print(n);
/// }
/// ```
fn range(from: u8, to: u8) -> Iterator<u8>;
/// Return an iterator over an exclusive range, each iteration increasing by `step`.
///
/// If `range` is reversed and `step` < 0, iteration goes backwards.
///
/// Otherwise, if `range` is empty, an empty iterator is returned.
///
/// # Example
///
/// ```rhai
/// // prints all values from 8 to 17 in steps of 3
/// for n in range(8..18, 3) {
/// print(n);
/// }
///
/// // prints all values down from 18 to 9 in steps of -3
/// for n in range(18..8, -3) {
/// print(n);
/// }
/// ```
fn range(range: Range<Decimal>, step: Decimal) -> Iterator<Decimal>;
/// Return an iterator over an exclusive range, each iteration increasing by `step`.
///
/// If `range` is reversed and `step` < 0, iteration goes backwards.
///
/// Otherwise, if `range` is empty, an empty iterator is returned.
///
/// # Example
///
/// ```rhai
/// // prints all values from 8 to 17 in steps of 3
/// for n in range(8..18, 3) {
/// print(n);
/// }
///
/// // prints all values down from 18 to 9 in steps of -3
/// for n in range(18..8, -3) {
/// print(n);
/// }
/// ```
fn range(range: Range<float>, step: float) -> Iterator<float>;
/// Return an iterator over an exclusive range, each iteration increasing by `step`.
///
/// If `range` is reversed and `step` < 0, iteration goes backwards.
///
/// Otherwise, if `range` is empty, an empty iterator is returned.
///
/// # Example
///
/// ```rhai
/// // prints all values from 8 to 17 in steps of 3
/// for n in range(8..18, 3) {
/// print(n);
/// }
///
/// // prints all values down from 18 to 9 in steps of -3
/// for n in range(18..8, -3) {
/// print(n);
/// }
/// ```
fn range(range: Range<i128>, step: i128) -> Iterator<i128>;
/// Return an iterator over an exclusive range, each iteration increasing by `step`.
///
/// If `range` is reversed and `step` < 0, iteration goes backwards.
///
/// Otherwise, if `range` is empty, an empty iterator is returned.
///
/// # Example
///
/// ```rhai
/// // prints all values from 8 to 17 in steps of 3
/// for n in range(8..18, 3) {
/// print(n);
/// }
///
/// // prints all values down from 18 to 9 in steps of -3
/// for n in range(18..8, -3) {
/// print(n);
/// }
/// ```
fn range(range: Range<i16>, step: i16) -> Iterator<i16>;
/// Return an iterator over an exclusive range, each iteration increasing by `step`.
///
/// If `range` is reversed and `step` < 0, iteration goes backwards.
///
/// Otherwise, if `range` is empty, an empty iterator is returned.
///
/// # Example
///
/// ```rhai
/// // prints all values from 8 to 17 in steps of 3
/// for n in range(8..18, 3) {
/// print(n);
/// }
///
/// // prints all values down from 18 to 9 in steps of -3
/// for n in range(18..8, -3) {
/// print(n);
/// }
/// ```
fn range(range: Range<i32>, step: i32) -> Iterator<i32>;
/// Return an iterator over an exclusive range, each iteration increasing by `step`.
///
/// If `range` is reversed and `step` < 0, iteration goes backwards.
///
/// Otherwise, if `range` is empty, an empty iterator is returned.
///
/// # Example
///
/// ```rhai
/// // prints all values from 8 to 17 in steps of 3
/// for n in range(8..18, 3) {
/// print(n);
/// }
///
/// // prints all values down from 18 to 9 in steps of -3
/// for n in range(18..8, -3) {
/// print(n);
/// }
/// ```
fn range(range: Range<int>, step: int) -> Iterator<int>;
/// Return an iterator over an exclusive range, each iteration increasing by `step`.
///
/// If `range` is reversed and `step` < 0, iteration goes backwards.
///
/// Otherwise, if `range` is empty, an empty iterator is returned.
///
/// # Example
///
/// ```rhai
/// // prints all values from 8 to 17 in steps of 3
/// for n in range(8..18, 3) {
/// print(n);
/// }
///
/// // prints all values down from 18 to 9 in steps of -3
/// for n in range(18..8, -3) {
/// print(n);
/// }
/// ```
fn range(range: Range<i8>, step: i8) -> Iterator<i8>;
/// Return an iterator over an exclusive range, each iteration increasing by `step`.
///
/// If `range` is reversed and `step` < 0, iteration goes backwards.
///
/// Otherwise, if `range` is empty, an empty iterator is returned.
///
/// # Example
///
/// ```rhai
/// // prints all values from 8 to 17 in steps of 3
/// for n in range(8..18, 3) {
/// print(n);
/// }
///
/// // prints all values down from 18 to 9 in steps of -3
/// for n in range(18..8, -3) {
/// print(n);
/// }
/// ```
fn range(range: Range<u128>, step: u128) -> Iterator<u128>;
/// Return an iterator over an exclusive range, each iteration increasing by `step`.
///
/// If `range` is reversed and `step` < 0, iteration goes backwards.
///
/// Otherwise, if `range` is empty, an empty iterator is returned.
///
/// # Example
///
/// ```rhai
/// // prints all values from 8 to 17 in steps of 3
/// for n in range(8..18, 3) {
/// print(n);
/// }
///
/// // prints all values down from 18 to 9 in steps of -3
/// for n in range(18..8, -3) {
/// print(n);
/// }
/// ```
fn range(range: Range<u16>, step: u16) -> Iterator<u16>;
/// Return an iterator over an exclusive range, each iteration increasing by `step`.
///
/// If `range` is reversed and `step` < 0, iteration goes backwards.
///
/// Otherwise, if `range` is empty, an empty iterator is returned.
///
/// # Example
///
/// ```rhai
/// // prints all values from 8 to 17 in steps of 3
/// for n in range(8..18, 3) {
/// print(n);
/// }
///
/// // prints all values down from 18 to 9 in steps of -3
/// for n in range(18..8, -3) {
/// print(n);
/// }
/// ```
fn range(range: Range<u32>, step: u32) -> Iterator<u32>;
/// Return an iterator over an exclusive range, each iteration increasing by `step`.
///
/// If `range` is reversed and `step` < 0, iteration goes backwards.
///
/// Otherwise, if `range` is empty, an empty iterator is returned.
///
/// # Example
///
/// ```rhai
/// // prints all values from 8 to 17 in steps of 3
/// for n in range(8..18, 3) {
/// print(n);
/// }
///
/// // prints all values down from 18 to 9 in steps of -3
/// for n in range(18..8, -3) {
/// print(n);
/// }
/// ```
fn range(range: Range<u64>, step: u64) -> Iterator<u64>;
/// Return an iterator over an exclusive range, each iteration increasing by `step`.
///
/// If `range` is reversed and `step` < 0, iteration goes backwards.
///
/// Otherwise, if `range` is empty, an empty iterator is returned.
///
/// # Example
///
/// ```rhai
/// // prints all values from 8 to 17 in steps of 3
/// for n in range(8..18, 3) {
/// print(n);
/// }
///
/// // prints all values down from 18 to 9 in steps of -3
/// for n in range(18..8, -3) {
/// print(n);
/// }
/// ```
fn range(range: Range<u8>, step: u8) -> Iterator<u8>;
/// Return an iterator over the exclusive range of `from..to`, each iteration increasing by `step`.
/// The value `to` is never included.
///
/// If `from` > `to` and `step` < 0, iteration goes backwards.
///
/// If `from` > `to` and `step` > 0 or `from` < `to` and `step` < 0, an empty iterator is returned.
///
/// # Example
///
/// ```rhai
/// // prints all values from 8 to 17 in steps of 3
/// for n in range(8, 18, 3) {
/// print(n);
/// }
///
/// // prints all values down from 18 to 9 in steps of -3
/// for n in range(18, 8, -3) {
/// print(n);
/// }
/// ```
fn range(from: Decimal, to: Decimal, step: Decimal) -> Iterator<Decimal>;
/// Return an iterator over the exclusive range of `from..to`, each iteration increasing by `step`.
/// The value `to` is never included.
///
/// If `from` > `to` and `step` < 0, iteration goes backwards.
///
/// If `from` > `to` and `step` > 0 or `from` < `to` and `step` < 0, an empty iterator is returned.
///
/// # Example
///
/// ```rhai
/// // prints all values from 8 to 17 in steps of 3
/// for n in range(8, 18, 3) {
/// print(n);
/// }
///
/// // prints all values down from 18 to 9 in steps of -3
/// for n in range(18, 8, -3) {
/// print(n);
/// }
/// ```
fn range(from: float, to: float, step: float) -> Iterator<float>;
/// Return an iterator over the exclusive range of `from..to`, each iteration increasing by `step`.
/// The value `to` is never included.
///
/// If `from` > `to` and `step` < 0, iteration goes backwards.
///
/// If `from` > `to` and `step` > 0 or `from` < `to` and `step` < 0, an empty iterator is returned.
///
/// # Example
///
/// ```rhai
/// // prints all values from 8 to 17 in steps of 3
/// for n in range(8, 18, 3) {
/// print(n);
/// }
///
/// // prints all values down from 18 to 9 in steps of -3
/// for n in range(18, 8, -3) {
/// print(n);
/// }
/// ```
fn range(from: i128, to: i128, step: i128) -> Iterator<i128>;
/// Return an iterator over the exclusive range of `from..to`, each iteration increasing by `step`.
/// The value `to` is never included.
///
/// If `from` > `to` and `step` < 0, iteration goes backwards.
///
/// If `from` > `to` and `step` > 0 or `from` < `to` and `step` < 0, an empty iterator is returned.
///
/// # Example
///
/// ```rhai
/// // prints all values from 8 to 17 in steps of 3
/// for n in range(8, 18, 3) {
/// print(n);
/// }
///
/// // prints all values down from 18 to 9 in steps of -3
/// for n in range(18, 8, -3) {
/// print(n);
/// }
/// ```
fn range(from: i16, to: i16, step: i16) -> Iterator<i16>;
/// Return an iterator over the exclusive range of `from..to`, each iteration increasing by `step`.
/// The value `to` is never included.
///
/// If `from` > `to` and `step` < 0, iteration goes backwards.
///
/// If `from` > `to` and `step` > 0 or `from` < `to` and `step` < 0, an empty iterator is returned.
///
/// # Example
///
/// ```rhai
/// // prints all values from 8 to 17 in steps of 3
/// for n in range(8, 18, 3) {
/// print(n);
/// }
///
/// // prints all values down from 18 to 9 in steps of -3
/// for n in range(18, 8, -3) {
/// print(n);
/// }
/// ```
fn range(from: i32, to: i32, step: i32) -> Iterator<i32>;
/// Return an iterator over the exclusive range of `from..to`, each iteration increasing by `step`.
/// The value `to` is never included.
///
/// If `from` > `to` and `step` < 0, iteration goes backwards.
///
/// If `from` > `to` and `step` > 0 or `from` < `to` and `step` < 0, an empty iterator is returned.
///
/// # Example
///
/// ```rhai
/// // prints all values from 8 to 17 in steps of 3
/// for n in range(8, 18, 3) {
/// print(n);
/// }
///
/// // prints all values down from 18 to 9 in steps of -3
/// for n in range(18, 8, -3) {
/// print(n);
/// }
/// ```
fn range(from: int, to: int, step: int) -> Iterator<int>;
/// Return an iterator over the exclusive range of `from..to`, each iteration increasing by `step`.
/// The value `to` is never included.
///
/// If `from` > `to` and `step` < 0, iteration goes backwards.
///
/// If `from` > `to` and `step` > 0 or `from` < `to` and `step` < 0, an empty iterator is returned.
///
/// # Example
///
/// ```rhai
/// // prints all values from 8 to 17 in steps of 3
/// for n in range(8, 18, 3) {
/// print(n);
/// }
///
/// // prints all values down from 18 to 9 in steps of -3
/// for n in range(18, 8, -3) {
/// print(n);
/// }
/// ```
fn range(from: i8, to: i8, step: i8) -> Iterator<i8>;
/// Return an iterator over the exclusive range of `from..to`, each iteration increasing by `step`.
/// The value `to` is never included.
///
/// If `from` > `to` and `step` < 0, iteration goes backwards.
///
/// If `from` > `to` and `step` > 0 or `from` < `to` and `step` < 0, an empty iterator is returned.
///
/// # Example
///
/// ```rhai
/// // prints all values from 8 to 17 in steps of 3
/// for n in range(8, 18, 3) {
/// print(n);
/// }
///
/// // prints all values down from 18 to 9 in steps of -3
/// for n in range(18, 8, -3) {
/// print(n);
/// }
/// ```
fn range(from: u128, to: u128, step: u128) -> Iterator<u128>;
/// Return an iterator over the exclusive range of `from..to`, each iteration increasing by `step`.
/// The value `to` is never included.
///
/// If `from` > `to` and `step` < 0, iteration goes backwards.
///
/// If `from` > `to` and `step` > 0 or `from` < `to` and `step` < 0, an empty iterator is returned.
///
/// # Example
///
/// ```rhai
/// // prints all values from 8 to 17 in steps of 3
/// for n in range(8, 18, 3) {
/// print(n);
/// }
///
/// // prints all values down from 18 to 9 in steps of -3
/// for n in range(18, 8, -3) {
/// print(n);
/// }
/// ```
fn range(from: u16, to: u16, step: u16) -> Iterator<u16>;
/// Return an iterator over the exclusive range of `from..to`, each iteration increasing by `step`.
/// The value `to` is never included.
///
/// If `from` > `to` and `step` < 0, iteration goes backwards.
///
/// If `from` > `to` and `step` > 0 or `from` < `to` and `step` < 0, an empty iterator is returned.
///
/// # Example
///
/// ```rhai
/// // prints all values from 8 to 17 in steps of 3
/// for n in range(8, 18, 3) {
/// print(n);
/// }
///
/// // prints all values down from 18 to 9 in steps of -3
/// for n in range(18, 8, -3) {
/// print(n);
/// }
/// ```
fn range(from: u32, to: u32, step: u32) -> Iterator<u32>;
/// Return an iterator over the exclusive range of `from..to`, each iteration increasing by `step`.
/// The value `to` is never included.
///
/// If `from` > `to` and `step` < 0, iteration goes backwards.
///
/// If `from` > `to` and `step` > 0 or `from` < `to` and `step` < 0, an empty iterator is returned.
///
/// # Example
///
/// ```rhai
/// // prints all values from 8 to 17 in steps of 3
/// for n in range(8, 18, 3) {
/// print(n);
/// }
///
/// // prints all values down from 18 to 9 in steps of -3
/// for n in range(18, 8, -3) {
/// print(n);
/// }
/// ```
fn range(from: u64, to: u64, step: u64) -> Iterator<u64>;
/// Return an iterator over the exclusive range of `from..to`, each iteration increasing by `step`.
/// The value `to` is never included.
///
/// If `from` > `to` and `step` < 0, iteration goes backwards.
///
/// If `from` > `to` and `step` > 0 or `from` < `to` and `step` < 0, an empty iterator is returned.
///
/// # Example
///
/// ```rhai
/// // prints all values from 8 to 17 in steps of 3
/// for n in range(8, 18, 3) {
/// print(n);
/// }
///
/// // prints all values down from 18 to 9 in steps of -3
/// for n in range(18, 8, -3) {
/// print(n);
/// }
/// ```
fn range(from: u8, to: u8, step: u8) -> Iterator<u8>;
/// Reduce an array by iterating through all elements while applying a function named by `reducer`.
///
/// # Function Parameters
///
/// A function with the same name as the value of `reducer` must exist taking these parameters:
///
/// * `result`: accumulated result, initially `()`
/// * `element`: copy of array element
/// * `index` _(optional)_: current index in the array
///
/// # Example
///
/// ```rhai
/// fn process(r, x) {
/// x + (r ?? 0)
/// }
/// fn process_extra(r, x, i) {
/// x + i + (r ?? 0)
/// }
///
/// let x = [1, 2, 3, 4, 5];
///
/// let y = x.reduce("process");
///
/// print(y); // prints 15
///
/// let y = x.reduce("process_extra");
///
/// print(y); // prints 25
/// ```
fn reduce(array: Array, reducer: String) -> RhaiResult;
/// Reduce an array by iterating through all elements while applying the `reducer` function.
///
/// # Function Parameters
///
/// * `result`: accumulated result, initially `()`
/// * `element`: copy of array element
/// * `index` _(optional)_: current index in the array
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3, 4, 5];
///
/// let y = x.reduce(|r, v| v + (r ?? 0));
///
/// print(y); // prints 15
///
/// let y = x.reduce(|r, v, i| v + i + (r ?? 0));
///
/// print(y); // prints 25
/// ```
fn reduce(array: Array, reducer: FnPtr) -> RhaiResult;
/// Reduce an array by iterating through all elements while applying a function named by `reducer`.
///
/// # Function Parameters
///
/// A function with the same name as the value of `reducer` must exist taking these parameters:
///
/// * `result`: accumulated result, starting with the value of `initial`
/// * `element`: copy of array element
/// * `index` _(optional)_: current index in the array
///
/// # Example
///
/// ```rhai
/// fn process(r, x) { x + r }
///
/// fn process_extra(r, x, i) { x + i + r }
///
/// let x = [1, 2, 3, 4, 5];
///
/// let y = x.reduce("process", 5);
///
/// print(y); // prints 20
///
/// let y = x.reduce("process_extra", 5);
///
/// print(y); // prints 30
/// ```
fn reduce(array: Array, reducer: String, initial: ?) -> RhaiResult;
/// Reduce an array by iterating through all elements while applying the `reducer` function.
///
/// # Function Parameters
///
/// * `result`: accumulated result, starting with the value of `initial`
/// * `element`: copy of array element
/// * `index` _(optional)_: current index in the array
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3, 4, 5];
///
/// let y = x.reduce(|r, v| v + r, 5);
///
/// print(y); // prints 20
///
/// let y = x.reduce(|r, v, i| v + i + r, 5);
///
/// print(y); // prints 30
/// ```
fn reduce(array: Array, reducer: FnPtr, initial: ?) -> RhaiResult;
/// Reduce an array by iterating through all elements, in _reverse_ order,
/// while applying a function named by `reducer`.
///
/// # Function Parameters
///
/// A function with the same name as the value of `reducer` must exist taking these parameters:
///
/// * `result`: accumulated result, initially `()`
/// * `element`: copy of array element
/// * `index` _(optional)_: current index in the array
///
/// # Example
///
/// ```rhai
/// fn process(r, x) {
/// x + (r ?? 0)
/// }
/// fn process_extra(r, x, i) {
/// x + i + (r ?? 0)
/// }
///
/// let x = [1, 2, 3, 4, 5];
///
/// let y = x.reduce_rev("process");
///
/// print(y); // prints 15
///
/// let y = x.reduce_rev("process_extra");
///
/// print(y); // prints 25
/// ```
fn reduce_rev(array: Array, reducer: String) -> RhaiResult;
/// Reduce an array by iterating through all elements, in _reverse_ order,
/// while applying the `reducer` function.
///
/// # Function Parameters
///
/// * `result`: accumulated result, initially `()`
/// * `element`: copy of array element
/// * `index` _(optional)_: current index in the array
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3, 4, 5];
///
/// let y = x.reduce_rev(|r, v| v + (r ?? 0));
///
/// print(y); // prints 15
///
/// let y = x.reduce_rev(|r, v, i| v + i + (r ?? 0));
///
/// print(y); // prints 25
/// ```
fn reduce_rev(array: Array, reducer: FnPtr) -> RhaiResult;
/// Reduce an array by iterating through all elements, in _reverse_ order,
/// while applying a function named by `reducer`.
///
/// # Function Parameters
///
/// A function with the same name as the value of `reducer` must exist taking these parameters:
///
/// * `result`: accumulated result, starting with the value of `initial`
/// * `element`: copy of array element
/// * `index` _(optional)_: current index in the array
///
/// # Example
///
/// ```rhai
/// fn process(r, x) { x + r }
///
/// fn process_extra(r, x, i) { x + i + r }
///
/// let x = [1, 2, 3, 4, 5];
///
/// let y = x.reduce_rev("process", 5);
///
/// print(y); // prints 20
///
/// let y = x.reduce_rev("process_extra", 5);
///
/// print(y); // prints 30
/// ```
fn reduce_rev(array: Array, reducer: String, initial: ?) -> RhaiResult;
/// Reduce an array by iterating through all elements, in _reverse_ order,
/// while applying the `reducer` function.
///
/// # Function Parameters
///
/// * `result`: accumulated result, starting with the value of `initial`
/// * `element`: copy of array element
/// * `index` _(optional)_: current index in the array
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3, 4, 5];
///
/// let y = x.reduce_rev(|r, v| v + r, 5);
///
/// print(y); // prints 20
///
/// let y = x.reduce_rev(|r, v, i| v + i + r, 5);
///
/// print(y); // prints 30
/// ```
fn reduce_rev(array: Array, reducer: FnPtr, initial: ?) -> RhaiResult;
/// Remove the element at the specified `index` from the array and return it.
///
/// * If `index` < 0, position counts from the end of the array (`-1` is the last element).
/// * If `index` < -length of array, `()` is returned.
/// * If `index` ≥ length of array, `()` is returned.
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3];
///
/// print(x.remove(1)); // prints 2
///
/// print(x); // prints "[1, 3]"
///
/// print(x.remove(-2)); // prints 1
///
/// print(x); // prints "[3]"
/// ```
fn remove(array: Array, index: int) -> ?;
/// Remove the byte at the specified `index` from the BLOB and return it.
///
/// * If `index` < 0, position counts from the end of the BLOB (`-1` is the last byte).
/// * If `index` < -length of BLOB, zero is returned.
/// * If `index` ≥ length of BLOB, zero is returned.
///
/// # Example
///
/// ```rhai
/// let b = blob();
///
/// b += 1; b += 2; b += 3; b += 4; b += 5;
///
/// print(x.remove(1)); // prints 2
///
/// print(x); // prints "[01030405]"
///
/// print(x.remove(-2)); // prints 4
///
/// print(x); // prints "[010305]"
/// ```
fn remove(blob: Blob, index: int) -> int;
/// Remove any property of the specified `name` from the object map, returning its value.
///
/// If the property does not exist, `()` is returned.
///
/// # Example
///
/// ```rhai
/// let m = #{a:1, b:2, c:3};
///
/// let x = m.remove("b");
///
/// print(x); // prints 2
///
/// print(m); // prints "#{a:1, c:3}"
/// ```
fn remove(map: Map, property: String) -> ?;
/// Remove all occurrences of a character from the string.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world! hello, foobar!";
///
/// text.remove("o");
///
/// print(text); // prints "hell, wrld! hell, fbar!"
/// ```
fn remove(string: String, character: char) -> ();
/// Remove all occurrences of a sub-string from the string.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world! hello, foobar!";
///
/// text.remove("hello");
///
/// print(text); // prints ", world! , foobar!"
/// ```
fn remove(string: String, sub_string: String) -> ();
/// Replace all occurrences of the specified character in the string with another character.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world! hello, foobar!";
///
/// text.replace("l", '*');
///
/// print(text); // prints "he**o, wor*d! he**o, foobar!"
/// ```
fn replace(string: String, find_character: char, substitute_character: char) -> ();
/// Replace all occurrences of the specified character in the string with another string.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world! hello, foobar!";
///
/// text.replace('l', "(^)");
///
/// print(text); // prints "he(^)(^)o, wor(^)d! he(^)(^)o, foobar!"
/// ```
fn replace(string: String, find_character: char, substitute_string: String) -> ();
/// Replace all occurrences of the specified sub-string in the string with the specified character.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world! hello, foobar!";
///
/// text.replace("hello", '*');
///
/// print(text); // prints "*, world! *, foobar!"
/// ```
fn replace(string: String, find_string: String, substitute_character: char) -> ();
/// Replace all occurrences of the specified sub-string in the string with another string.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world! hello, foobar!";
///
/// text.replace("hello", "hey");
///
/// print(text); // prints "hey, world! hey, foobar!"
/// ```
fn replace(string: String, find_string: String, substitute_string: String) -> ();
/// Remove all elements in the array that do not return `true` when applied a function named by
/// `filter` and return them as a new array.
///
/// # Function Parameters
///
/// A function with the same name as the value of `filter` must exist taking these parameters:
///
/// * `element`: copy of array element
/// * `index` _(optional)_: current index in the array
///
/// # Example
///
/// ```rhai
/// fn large(x) { x >= 3 }
///
/// fn screen(x, i) { x + i <= 5 }
///
/// let x = [1, 2, 3, 4, 5];
///
/// let y = x.retain("large");
///
/// print(x); // prints "[3, 4, 5]"
///
/// print(y); // prints "[1, 2]"
///
/// let z = x.retain("screen");
///
/// print(x); // prints "[3, 4]"
///
/// print(z); // prints "[5]"
/// ```
fn retain(array: Array, filter: String) -> Array;
/// Remove all elements in the array that do not return `true` when applied the `filter`
/// function and return them as a new array.
///
/// # Function Parameters
///
/// * `element`: copy of array element
/// * `index` _(optional)_: current index in the array
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3, 4, 5];
///
/// let y = x.retain(|v| v >= 3);
///
/// print(x); // prints "[3, 4, 5]"
///
/// print(y); // prints "[1, 2]"
///
/// let z = x.retain(|v, i| v + i <= 5);
///
/// print(x); // prints "[3, 4]"
///
/// print(z); // prints "[5]"
/// ```
fn retain(array: Array, filter: FnPtr) -> Array;
/// Remove all elements in the array not within an exclusive `range` and return them as a new array.
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3, 4, 5];
///
/// let y = x.retain(1..4);
///
/// print(x); // prints "[2, 3, 4]"
///
/// print(y); // prints "[1, 5]"
///
/// let z = x.retain(1..3);
///
/// print(x); // prints "[3, 4]"
///
/// print(z); // prints "[1]"
/// ```
fn retain(array: Array, range: Range<int>) -> Array;
/// Remove all elements in the array not within an inclusive `range` and return them as a new array.
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3, 4, 5];
///
/// let y = x.retain(1..=3);
///
/// print(x); // prints "[2, 3, 4]"
///
/// print(y); // prints "[1, 5]"
///
/// let z = x.retain(1..=2);
///
/// print(x); // prints "[3, 4]"
///
/// print(z); // prints "[1]"
/// ```
fn retain(array: Array, range: RangeInclusive<int>) -> Array;
/// Remove all bytes in the BLOB not within an exclusive `range` and return them as a new BLOB.
///
/// # Example
///
/// ```rhai
/// let b1 = blob();
///
/// b1 += 1; b1 += 2; b1 += 3; b1 += 4; b1 += 5;
///
/// let b2 = b1.retain(1..4);
///
/// print(b1); // prints "[020304]"
///
/// print(b2); // prints "[0105]"
///
/// let b3 = b1.retain(1..3);
///
/// print(b1); // prints "[0304]"
///
/// print(b2); // prints "[01]"
/// ```
fn retain(blob: Blob, range: Range<int>) -> Blob;
/// Remove all bytes in the BLOB not within an inclusive `range` and return them as a new BLOB.
///
/// # Example
///
/// ```rhai
/// let b1 = blob();
///
/// b1 += 1; b1 += 2; b1 += 3; b1 += 4; b1 += 5;
///
/// let b2 = b1.retain(1..=3);
///
/// print(b1); // prints "[020304]"
///
/// print(b2); // prints "[0105]"
///
/// let b3 = b1.retain(1..=2);
///
/// print(b1); // prints "[0304]"
///
/// print(b2); // prints "[01]"
/// ```
fn retain(blob: Blob, range: RangeInclusive<int>) -> Blob;
/// Remove all elements not within a portion of the array and return them as a new array.
///
/// * If `start` < 0, position counts from the end of the array (`-1` is the last element).
/// * If `start` < -length of array, position counts from the beginning of the array.
/// * If `start` ≥ length of array, all elements are removed returned.
/// * If `len` ≤ 0, all elements are removed and returned.
/// * If `start` position + `len` ≥ length of array, entire portion of the array before the `start` position is removed and returned.
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3, 4, 5];
///
/// let y = x.retain(1, 2);
///
/// print(x); // prints "[2, 3]"
///
/// print(y); // prints "[1, 4, 5]"
///
/// let z = x.retain(-1, 1);
///
/// print(x); // prints "[3]"
///
/// print(z); // prints "[2]"
/// ```
fn retain(array: Array, start: int, len: int) -> Array;
/// Remove all bytes not within a portion of the BLOB and return them as a new BLOB.
///
/// * If `start` < 0, position counts from the end of the BLOB (`-1` is the last byte).
/// * If `start` < -length of BLOB, position counts from the beginning of the BLOB.
/// * If `start` ≥ length of BLOB, all elements are removed returned.
/// * If `len` ≤ 0, all elements are removed and returned.
/// * If `start` position + `len` ≥ length of BLOB, entire portion of the BLOB before the `start` position is removed and returned.
///
/// # Example
///
/// ```rhai
/// let b1 = blob();
///
/// b1 += 1; b1 += 2; b1 += 3; b1 += 4; b1 += 5;
///
/// let b2 = b1.retain(1, 2);
///
/// print(b1); // prints "[0203]"
///
/// print(b2); // prints "[010405]"
///
/// let b3 = b1.retain(-1, 1);
///
/// print(b1); // prints "[03]"
///
/// print(b3); // prints "[02]"
/// ```
fn retain(blob: Blob, start: int, len: int) -> Blob;
/// Reverse all the elements in the array.
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3, 4, 5];
///
/// x.reverse();
///
/// print(x); // prints "[5, 4, 3, 2, 1]"
/// ```
fn reverse(array: Array) -> ();
/// Reverse the BLOB.
///
/// # Example
///
/// ```rhai
/// let b = blob();
///
/// b += 1; b += 2; b += 3; b += 4; b += 5;
///
/// print(b); // prints "[0102030405]"
///
/// b.reverse();
///
/// print(b); // prints "[0504030201]"
/// ```
fn reverse(blob: Blob) -> ();
/// Return the nearest whole number closest to the decimal number.
/// Always round mid-point towards the closest even number.
fn round(x: Decimal) -> Decimal;
/// Return the nearest whole number closest to the floating-point number.
/// Rounds away from zero.
fn round(x: float) -> float;
/// Round the decimal number to the specified number of `digits` after the decimal point and return it.
/// Always round mid-point towards the closest even number.
fn round(x: Decimal, digits: int) -> Decimal;
/// Round the decimal number to the specified number of `digits` after the decimal point and return it.
/// Always round towards zero.
fn round_down(x: Decimal, digits: int) -> Decimal;
/// Round the decimal number to the specified number of `digits` after the decimal point and return it.
/// Always round mid-points towards zero.
fn round_half_down(x: Decimal, digits: int) -> Decimal;
/// Round the decimal number to the specified number of `digits` after the decimal point and return it.
/// Always round mid-points away from zero.
fn round_half_up(x: Decimal, digits: int) -> Decimal;
/// Round the decimal number to the specified number of `digits` after the decimal point and return it.
/// Always round away from zero.
fn round_up(x: Decimal, digits: int) -> Decimal;
/// Set the element at the `index` position in the array to a new `value`.
///
/// * If `index` < 0, position counts from the end of the array (`-1` is the last element).
/// * If `index` < -length of array, the array is not modified.
/// * If `index` ≥ length of array, the array is not modified.
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3];
///
/// x.set(0, 42);
///
/// print(x); // prints "[42, 2, 3]"
///
/// x.set(-3, 0);
///
/// print(x); // prints "[0, 2, 3]"
///
/// x.set(99, 123);
///
/// print(x); // prints "[0, 2, 3]"
/// ```
fn set(array: Array, index: int, value: ?) -> ();
/// Set the particular `index` position in the BLOB to a new byte `value`.
///
/// * If `index` < 0, position counts from the end of the BLOB (`-1` is the last byte).
/// * If `index` < -length of BLOB, the BLOB is not modified.
/// * If `index` ≥ length of BLOB, the BLOB is not modified.
///
/// # Example
///
/// ```rhai
/// let b = blob();
///
/// b += 1; b += 2; b += 3; b += 4; b += 5;
///
/// b.set(0, 0x42);
///
/// print(b); // prints "[4202030405]"
///
/// b.set(-3, 0);
///
/// print(b); // prints "[4202000405]"
///
/// b.set(99, 123);
///
/// print(b); // prints "[4202000405]"
/// ```
fn set(blob: Blob, index: int, value: int) -> ();
/// Set the value of the `property` in the object map to a new `value`.
///
/// If `property` does not exist in the object map, it is added.
///
/// # Example
///
/// ```rhai
/// let m = #{a: 1, b: 2, c: 3};
///
/// m.set("b", 42)'
///
/// print(m); // prints "#{a: 1, b: 42, c: 3}"
///
/// x.set("x", 0);
///
/// print(m); // prints "#{a: 1, b: 42, c: 3, x: 0}"
/// ```
fn set(map: Map, property: String, value: ?) -> ();
/// Set the `index` position in the string to a new `character`.
///
/// * If `index` < 0, position counts from the end of the string (`-1` is the last character).
/// * If `index` < -length of string, the string is not modified.
/// * If `index` ≥ length of string, the string is not modified.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world!";
///
/// text.set(3, 'x');
///
/// print(text); // prints "helxo, world!"
///
/// text.set(-3, 'x');
///
/// print(text); // prints "hello, worxd!"
///
/// text.set(99, 'x');
///
/// print(text); // prints "hello, worxd!"
/// ```
fn set(string: String, index: int, character: char) -> ();
/// Set the _tag_ of a `Dynamic` value.
///
/// # Example
///
/// ```rhai
/// let x = "hello, world!";
///
/// x.tag = 42;
///
/// print(x.tag); // prints 42
/// ```
fn set tag(value: ?, tag: int) -> ();
/// Set the specified `bit` in the number if the new value is `true`.
/// Clear the `bit` if the new value is `false`.
///
/// If `bit` < 0, position counts from the MSB (Most Significant Bit).
///
/// # Example
///
/// ```rhai
/// let x = 123456;
///
/// x.set_bit(5, true);
///
/// print(x); // prints 123488
///
/// x.set_bit(6, false);
///
/// print(x); // prints 123424
///
/// x.set_bit(-48, false);
///
/// print(x); // prints 57888 on 64-bit
/// ```
fn set_bit(value: int, bit: int, new_value: bool) -> ();
/// Replace an exclusive range of bits in the number with a new value.
///
/// # Example
///
/// ```rhai
/// let x = 123456;
///
/// x.set_bits(5..10, 42);
///
/// print(x); // print 123200
/// ```
fn set_bits(value: int, range: Range<int>, new_value: int) -> ();
/// Replace an inclusive range of bits in the number with a new value.
///
/// # Example
///
/// ```rhai
/// let x = 123456;
///
/// x.set_bits(5..=9, 42);
///
/// print(x); // print 123200
/// ```
fn set_bits(value: int, range: RangeInclusive<int>, new_value: int) -> ();
/// Replace a portion of bits in the number with a new value.
///
/// * If `start` < 0, position counts from the MSB (Most Significant Bit).
/// * If `bits` ≤ 0, the number is not modified.
/// * If `start` position + `bits` ≥ total number of bits, the bits after the `start` position are replaced.
///
/// # Example
///
/// ```rhai
/// let x = 123456;
///
/// x.set_bits(5, 8, 42);
///
/// print(x); // prints 124224
///
/// x.set_bits(-16, 10, 42);
///
/// print(x); // prints 11821949021971776 on 64-bit
/// ```
fn set_bits(value: int, bit: int, bits: int, new_value: int) -> ();
/// Set the _tag_ of a `Dynamic` value.
///
/// # Example
///
/// ```rhai
/// let x = "hello, world!";
///
/// x.tag = 42;
///
/// print(x.tag); // prints 42
/// ```
fn set_tag(value: ?, tag: int) -> ();
/// Remove the first element from the array and return it.
///
/// If the array is empty, `()` is returned.
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3];
///
/// print(x.shift()); // prints 1
///
/// print(x); // prints "[2, 3]"
/// ```
fn shift(array: Array) -> ?;
/// Remove the first byte from the BLOB and return it.
///
/// If the BLOB is empty, zero is returned.
///
/// # Example
///
/// ```rhai
/// let b = blob();
///
/// b += 1; b += 2; b += 3; b += 4; b += 5;
///
/// print(b.shift()); // prints 1
///
/// print(b); // prints "[02030405]"
/// ```
fn shift(blob: Blob) -> int;
/// Return the sign (as an integer) of the decimal number according to the following:
///
/// * `0` if the number is zero
/// * `1` if the number is positive
/// * `-1` if the number is negative
fn sign(x: Decimal) -> int;
/// Return the sign (as an integer) of the number according to the following:
///
/// * `0` if the number is zero
/// * `1` if the number is positive
/// * `-1` if the number is negative
fn sign(x: int) -> int;
/// Return the sign (as an integer) of the floating-point number according to the following:
///
/// * `0` if the number is zero
/// * `1` if the number is positive
/// * `-1` if the number is negative
fn sign(x: f32) -> int;
/// Return the sign (as an integer) of the floating-point number according to the following:
///
/// * `0` if the number is zero
/// * `1` if the number is positive
/// * `-1` if the number is negative
fn sign(x: float) -> int;
/// Return the sign (as an integer) of the number according to the following:
///
/// * `0` if the number is zero
/// * `1` if the number is positive
/// * `-1` if the number is negative
fn sign(x: i128) -> int;
/// Return the sign (as an integer) of the number according to the following:
///
/// * `0` if the number is zero
/// * `1` if the number is positive
/// * `-1` if the number is negative
fn sign(x: i16) -> int;
/// Return the sign (as an integer) of the number according to the following:
///
/// * `0` if the number is zero
/// * `1` if the number is positive
/// * `-1` if the number is negative
fn sign(x: i32) -> int;
/// Return the sign (as an integer) of the number according to the following:
///
/// * `0` if the number is zero
/// * `1` if the number is positive
/// * `-1` if the number is negative
fn sign(x: i8) -> int;
/// Return the sine of the decimal number in radians.
fn sin(x: Decimal) -> Decimal;
/// Return the sine of the floating-point number in radians.
fn sin(x: float) -> float;
/// Return the hyperbolic sine of the floating-point number in radians.
fn sinh(x: float) -> float;
/// Block the current thread for a particular number of `seconds`.
fn sleep(seconds: int) -> ();
/// Block the current thread for a particular number of `seconds`.
fn sleep(seconds: float) -> ();
/// Return `true` if any element in the array that returns `true` when applied a function named
/// by `filter`.
///
/// # Function Parameters
///
/// A function with the same name as the value of `filter` must exist taking these parameters:
///
/// * `element`: copy of array element
/// * `index` _(optional)_: current index in the array
///
/// # Example
///
/// ```rhai
/// fn large(x) { x > 3 }
///
/// fn huge(x) { x > 10 }
///
/// fn screen(x, i) { i > x }
///
/// let x = [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 5];
///
/// print(x.some("large")); // prints true
///
/// print(x.some("huge")); // prints false
///
/// print(x.some("screen")); // prints true
/// ```
fn some(array: Array, filter: String) -> bool;
/// Return `true` if any element in the array that returns `true` when applied the `filter` function.
///
/// # Function Parameters
///
/// * `element`: copy of array element
/// * `index` _(optional)_: current index in the array
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 5];
///
/// print(x.some(|v| v > 3)); // prints true
///
/// print(x.some(|v| v > 10)); // prints false
///
/// print(x.some(|v, i| i > v)); // prints true
/// ```
fn some(array: Array, filter: FnPtr) -> bool;
/// Sort the array.
///
/// All elements in the array must be of the same data type.
///
/// # Supported Data Types
///
/// * integer numbers
/// * floating-point numbers
/// * decimal numbers
/// * characters
/// * strings
/// * booleans
/// * `()`
///
/// # Example
///
/// ```rhai
/// let x = [1, 3, 5, 7, 9, 2, 4, 6, 8, 10];
///
/// x.sort();
///
/// print(x); // prints "[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]"
/// ```
fn sort(array: Array) -> ();
/// Sort the array based on applying a function named by `comparer`.
///
/// # Function Parameters
///
/// A function with the same name as the value of `comparer` must exist taking these parameters:
///
/// * `element1`: copy of the current array element to compare
/// * `element2`: copy of the next array element to compare
///
/// ## Return Value
///
/// * Any integer > 0 if `element1 > element2`
/// * Zero if `element1 == element2`
/// * Any integer < 0 if `element1 < element2`
///
/// # Example
///
/// ```rhai
/// fn reverse(a, b) {
/// if a > b {
/// -1
/// } else if a < b {
/// 1
/// } else {
/// 0
/// }
/// }
/// let x = [1, 3, 5, 7, 9, 2, 4, 6, 8, 10];
///
/// x.sort("reverse");
///
/// print(x); // prints "[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]"
/// ```
fn sort(array: Array, comparer: String) -> ();
/// Sort the array based on applying the `comparer` function.
///
/// # Function Parameters
///
/// * `element1`: copy of the current array element to compare
/// * `element2`: copy of the next array element to compare
///
/// ## Return Value
///
/// * Any integer > 0 if `element1 > element2`
/// * Zero if `element1 == element2`
/// * Any integer < 0 if `element1 < element2`
///
/// # Example
///
/// ```rhai
/// let x = [1, 3, 5, 7, 9, 2, 4, 6, 8, 10];
///
/// // Do comparisons in reverse
/// x.sort(|a, b| if a > b { -1 } else if a < b { 1 } else { 0 });
///
/// print(x); // prints "[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]"
/// ```
fn sort(array: Array, comparer: FnPtr) -> ();
/// Replace an exclusive range of the array with another array.
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3, 4, 5];
/// let y = [7, 8, 9, 10];
///
/// x.splice(1..3, y);
///
/// print(x); // prints "[1, 7, 8, 9, 10, 4, 5]"
/// ```
fn splice(array: Array, range: Range<int>, replace: Array) -> ();
/// Replace an inclusive range of the array with another array.
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3, 4, 5];
/// let y = [7, 8, 9, 10];
///
/// x.splice(1..=3, y);
///
/// print(x); // prints "[1, 7, 8, 9, 10, 5]"
/// ```
fn splice(array: Array, range: RangeInclusive<int>, replace: Array) -> ();
/// Replace an exclusive `range` of the BLOB with another BLOB.
///
/// # Example
///
/// ```rhai
/// let b1 = blob(10, 0x42);
/// let b2 = blob(5, 0x18);
///
/// b1.splice(1..4, b2);
///
/// print(b1); // prints "[4218181818184242 42424242]"
/// ```
fn splice(blob: Blob, range: Range<int>, replace: Blob) -> ();
/// Replace an inclusive `range` of the BLOB with another BLOB.
///
/// # Example
///
/// ```rhai
/// let b1 = blob(10, 0x42);
/// let b2 = blob(5, 0x18);
///
/// b1.splice(1..=4, b2);
///
/// print(b1); // prints "[4218181818184242 424242]"
/// ```
fn splice(blob: Blob, range: RangeInclusive<int>, replace: Blob) -> ();
/// Replace a portion of the array with another array.
///
/// * If `start` < 0, position counts from the end of the array (`-1` is the last element).
/// * If `start` < -length of array, position counts from the beginning of the array.
/// * If `start` ≥ length of array, the other array is appended to the end of the array.
/// * If `len` ≤ 0, the other array is inserted into the array at the `start` position without replacing any element.
/// * If `start` position + `len` ≥ length of array, entire portion of the array after the `start` position is replaced.
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3, 4, 5];
/// let y = [7, 8, 9, 10];
///
/// x.splice(1, 2, y);
///
/// print(x); // prints "[1, 7, 8, 9, 10, 4, 5]"
///
/// x.splice(-5, 4, y);
///
/// print(x); // prints "[1, 7, 7, 8, 9, 10, 5]"
/// ```
fn splice(array: Array, start: int, len: int, replace: Array) -> ();
/// Replace a portion of the BLOB with another BLOB.
///
/// * If `start` < 0, position counts from the end of the BLOB (`-1` is the last byte).
/// * If `start` < -length of BLOB, position counts from the beginning of the BLOB.
/// * If `start` ≥ length of BLOB, the other BLOB is appended to the end of the BLOB.
/// * If `len` ≤ 0, the other BLOB is inserted into the BLOB at the `start` position without replacing anything.
/// * If `start` position + `len` ≥ length of BLOB, entire portion of the BLOB after the `start` position is replaced.
///
/// # Example
///
/// ```rhai
/// let b1 = blob(10, 0x42);
/// let b2 = blob(5, 0x18);
///
/// b1.splice(1, 3, b2);
///
/// print(b1); // prints "[4218181818184242 42424242]"
///
/// b1.splice(-5, 4, b2);
///
/// print(b1); // prints "[4218181818184218 1818181842]"
/// ```
fn splice(blob: Blob, start: int, len: int, replace: Blob) -> ();
/// Split the string into segments based on whitespaces, returning an array of the segments.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world! hello, foo!";
///
/// print(text.split()); // prints ["hello,", "world!", "hello,", "foo!"]
/// ```
fn split(string: String) -> Array;
/// Cut off the array at `index` and return it as a new array.
///
/// * If `index` < 0, position counts from the end of the array (`-1` is the last element).
/// * If `index` is zero, the entire array is cut and returned.
/// * If `index` < -length of array, the entire array is cut and returned.
/// * If `index` ≥ length of array, nothing is cut from the array and an empty array is returned.
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3, 4, 5];
///
/// let y = x.split(2);
///
/// print(y); // prints "[3, 4, 5]"
///
/// print(x); // prints "[1, 2]"
/// ```
fn split(array: Array, index: int) -> Array;
/// Cut off the BLOB at `index` and return it as a new BLOB.
///
/// * If `index` < 0, position counts from the end of the BLOB (`-1` is the last byte).
/// * If `index` is zero, the entire BLOB is cut and returned.
/// * If `index` < -length of BLOB, the entire BLOB is cut and returned.
/// * If `index` ≥ length of BLOB, nothing is cut from the BLOB and an empty BLOB is returned.
///
/// # Example
///
/// ```rhai
/// let b1 = blob();
///
/// b1 += 1; b1 += 2; b1 += 3; b1 += 4; b1 += 5;
///
/// let b2 = b1.split(2);
///
/// print(b2); // prints "[030405]"
///
/// print(b1); // prints "[0102]"
/// ```
fn split(blob: Blob, index: int) -> Blob;
/// Split the string into two at the specified `index` position and return it both strings
/// as an array.
///
/// The character at the `index` position (if any) is returned in the _second_ string.
///
/// * If `index` < 0, position counts from the end of the string (`-1` is the last character).
/// * If `index` < -length of string, it is equivalent to cutting at position 0.
/// * If `index` ≥ length of string, it is equivalent to cutting at the end of the string.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world!";
///
/// print(text.split(6)); // prints ["hello,", " world!"]
///
/// print(text.split(13)); // prints ["hello, world!", ""]
///
/// print(text.split(-6)); // prints ["hello, ", "world!"]
///
/// print(text.split(-99)); // prints ["", "hello, world!"]
/// ```
fn split(string: String, index: int) -> Array;
/// Split the string into segments based on a `delimiter` string, returning an array of the segments.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world! hello, foo!";
///
/// print(text.split("ll")); // prints ["he", "o, world! he", "o, foo!"]
/// ```
fn split(string: String, delimiter: String) -> Array;
/// Split the string into segments based on a `delimiter` character, returning an array of the segments.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world! hello, foo!";
///
/// print(text.split('l')); // prints ["he", "", "o, wor", "d! he", "", "o, foo!"]
/// ```
fn split(string: String, delimiter: char) -> Array;
/// Split the string into at most the specified number of `segments` based on a `delimiter` string,
/// returning an array of the segments.
///
/// If `segments` < 1, only one segment is returned.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world! hello, foo!";
///
/// print(text.split("ll", 2)); // prints ["he", "o, world! hello, foo!"]
/// ```
fn split(string: String, delimiter: String, segments: int) -> Array;
/// Split the string into at most the specified number of `segments` based on a `delimiter` character,
/// returning an array of the segments.
///
/// If `segments` < 1, only one segment is returned.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world! hello, foo!";
///
/// print(text.split('l', 3)); // prints ["he", "", "o, world! hello, foo!"]
/// ```
fn split(string: String, delimiter: char, segments: int) -> Array;
/// Split the string into segments based on a `delimiter` string, returning an array of the
/// segments in _reverse_ order.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world! hello, foo!";
///
/// print(text.split_rev("ll")); // prints ["o, foo!", "o, world! he", "he"]
/// ```
fn split_rev(string: String, delimiter: String) -> Array;
/// Split the string into segments based on a `delimiter` character, returning an array of
/// the segments in _reverse_ order.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world! hello, foo!";
///
/// print(text.split_rev('l')); // prints ["o, foo!", "", "d! he", "o, wor", "", "he"]
/// ```
fn split_rev(string: String, delimiter: char) -> Array;
/// Split the string into at most a specified number of `segments` based on a `delimiter` string,
/// returning an array of the segments in _reverse_ order.
///
/// If `segments` < 1, only one segment is returned.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world! hello, foo!";
///
/// print(text.split_rev("ll", 2)); // prints ["o, foo!", "hello, world! he"]
/// ```
fn split_rev(string: String, delimiter: String, segments: int) -> Array;
/// Split the string into at most the specified number of `segments` based on a `delimiter` character,
/// returning an array of the segments.
///
/// If `segments` < 1, only one segment is returned.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world! hello, foo!";
///
/// print(text.split('l', 3)); // prints ["o, foo!", "", "hello, world! he"
/// ```
fn split_rev(string: String, delimiter: char, segments: int) -> Array;
/// Return the square root of the decimal number.
fn sqrt(x: Decimal) -> Decimal;
/// Return the square root of the floating-point number.
fn sqrt(x: float) -> float;
/// Return the start of the exclusive range.
fn start(range: ExclusiveRange) -> int;
/// Return the start of the inclusive range.
fn start(range: InclusiveRange) -> int;
/// Return `true` if the string starts with a specified string.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world!";
///
/// print(text.starts_with("hello")); // prints true
///
/// print(text.starts_with("world")); // prints false
/// ```
fn starts_with(string: String, match_string: String) -> bool;
/// Copy an exclusive range of characters from the string and return it as a new string.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world!";
///
/// print(text.sub_string(3..7)); // prints "lo, "
/// ```
fn sub_string(string: String, range: Range<int>) -> String;
/// Copy an inclusive range of characters from the string and return it as a new string.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world!";
///
/// print(text.sub_string(3..=7)); // prints "lo, w"
/// ```
fn sub_string(string: String, range: RangeInclusive<int>) -> String;
/// Copy a portion of the string beginning at the `start` position till the end and return it as
/// a new string.
///
/// * If `start` < 0, position counts from the end of the string (`-1` is the last character).
/// * If `start` < -length of string, the entire string is copied and returned.
/// * If `start` ≥ length of string, an empty string is returned.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world!";
///
/// print(text.sub_string(5)); // prints ", world!"
///
/// print(text.sub_string(-5)); // prints "orld!"
/// ```
fn sub_string(string: String, start: int) -> String;
/// Copy a portion of the string and return it as a new string.
///
/// * If `start` < 0, position counts from the end of the string (`-1` is the last character).
/// * If `start` < -length of string, position counts from the beginning of the string.
/// * If `start` ≥ length of string, an empty string is returned.
/// * If `len` ≤ 0, an empty string is returned.
/// * If `start` position + `len` ≥ length of string, entire portion of the string after the `start` position is copied and returned.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world!";
///
/// print(text.sub_string(3, 4)); // prints "lo, "
///
/// print(text.sub_string(-8, 3)); // prints ", w"
/// ```
fn sub_string(string: String, start: int, len: int) -> String;
/// Return the _tag_ of a `Dynamic` value.
///
/// # Example
///
/// ```rhai
/// let x = "hello, world!";
///
/// x.tag = 42;
///
/// print(x.tag); // prints 42
/// ```
fn tag(value: ?) -> int;
/// Return the tangent of the decimal number in radians.
fn tan(x: Decimal) -> Decimal;
/// Return the tangent of the floating-point number in radians.
fn tan(x: float) -> float;
/// Return the hyperbolic tangent of the floating-point number in radians.
fn tanh(x: float) -> float;
/// Create a timestamp containing the current system time.
///
/// # Example
///
/// ```rhai
/// let now = timestamp();
///
/// sleep(10.0); // sleep for 10 seconds
///
/// print(now.elapsed); // prints 10.???
/// ```
fn timestamp() -> Instant;
/// Convert the BLOB into an array of integers.
///
/// # Example
///
/// ```rhai
/// let b = blob(5, 0x42);
///
/// let x = b.to_array();
///
/// print(x); // prints "[66, 66, 66, 66, 66]"
/// ```
fn to_array(blob: Blob) -> Array;
/// Convert the `value` into a string in binary format.
fn to_binary(value: i128) -> String;
/// Convert the `value` into a string in binary format.
fn to_binary(value: i16) -> String;
/// Convert the `value` into a string in binary format.
fn to_binary(value: i32) -> String;
/// Convert the `value` into a string in binary format.
fn to_binary(value: int) -> String;
/// Convert the `value` into a string in binary format.
fn to_binary(value: i8) -> String;
/// Convert the `value` into a string in binary format.
fn to_binary(value: u128) -> String;
/// Convert the `value` into a string in binary format.
fn to_binary(value: u16) -> String;
/// Convert the `value` into a string in binary format.
fn to_binary(value: u32) -> String;
/// Convert the `value` into a string in binary format.
fn to_binary(value: u64) -> String;
/// Convert the `value` into a string in binary format.
fn to_binary(value: u8) -> String;
/// Convert the string into an UTF-8 encoded byte-stream as a BLOB.
///
/// # Example
///
/// ```rhai
/// let text = "朝には紅顔ありて夕べには白骨となる";
///
/// let bytes = text.to_blob();
///
/// print(bytes.len()); // prints 51
/// ```
fn to_blob(string: String) -> Blob;
/// Return an array containing all the characters of the string.
///
/// # Example
///
/// ```rhai
/// let text = "hello";
///
/// print(text.to_chars()); // prints "['h', 'e', 'l', 'l', 'o']"
/// ```
fn to_chars(string: String) -> Array;
/// Convert the array into a string.
fn to_debug(array: Array) -> String;
/// Convert the string into debug format.
fn to_debug(character: char) -> String;
/// Convert the function pointer into a string in debug format.
fn to_debug(f: FnPtr) -> String;
/// Convert the value of the `item` into a string in debug format.
fn to_debug(item: ?) -> String;
/// Convert the object map into a string.
fn to_debug(map: Map) -> String;
/// Convert the value of `number` into a string.
fn to_debug(number: f32) -> String;
/// Convert the value of `number` into a string.
fn to_debug(number: float) -> String;
/// Convert the string into debug format.
fn to_debug(string: String) -> String;
/// Convert the unit into a string in debug format.
fn to_debug(unit: ()) -> String;
/// Convert the boolean value into a string in debug format.
fn to_debug(value: bool) -> String;
/// Convert the floating-point number to decimal.
fn to_decimal(x: f32) -> Decimal;
/// Convert the floating-point number to decimal.
fn to_decimal(x: float) -> Decimal;
fn to_decimal(x: i16) -> Decimal;
fn to_decimal(x: i32) -> Decimal;
fn to_decimal(x: int) -> Decimal;
fn to_decimal(x: i8) -> Decimal;
fn to_decimal(x: u16) -> Decimal;
fn to_decimal(x: u32) -> Decimal;
fn to_decimal(x: u64) -> Decimal;
fn to_decimal(x: u8) -> Decimal;
/// Convert radians to degrees.
fn to_degrees(x: float) -> float;
/// Convert the decimal number to floating-point.
fn to_float(x: Decimal) -> float;
/// Convert the 32-bit floating-point number to 64-bit.
fn to_float(x: f32) -> float;
fn to_float(x: i128) -> float;
fn to_float(x: i16) -> float;
fn to_float(x: i32) -> float;
fn to_float(x: int) -> float;
fn to_float(x: i8) -> float;
fn to_float(x: u128) -> float;
fn to_float(x: u16) -> float;
fn to_float(x: u32) -> float;
fn to_float(x: u8) -> float;
/// Convert the `value` into a string in hex format.
fn to_hex(value: i128) -> String;
/// Convert the `value` into a string in hex format.
fn to_hex(value: i16) -> String;
/// Convert the `value` into a string in hex format.
fn to_hex(value: i32) -> String;
/// Convert the `value` into a string in hex format.
fn to_hex(value: int) -> String;
/// Convert the `value` into a string in hex format.
fn to_hex(value: i8) -> String;
/// Convert the `value` into a string in hex format.
fn to_hex(value: u128) -> String;
/// Convert the `value` into a string in hex format.
fn to_hex(value: u16) -> String;
/// Convert the `value` into a string in hex format.
fn to_hex(value: u32) -> String;
/// Convert the `value` into a string in hex format.
fn to_hex(value: u64) -> String;
/// Convert the `value` into a string in hex format.
fn to_hex(value: u8) -> String;
/// Convert the decimal number into an integer.
fn to_int(x: Decimal) -> int;
fn to_int(x: char) -> int;
/// Convert the floating-point number into an integer.
fn to_int(x: f32) -> int;
/// Convert the floating-point number into an integer.
fn to_int(x: float) -> int;
fn to_int(x: i128) -> int;
fn to_int(x: i16) -> int;
fn to_int(x: i32) -> int;
fn to_int(x: int) -> int;
fn to_int(x: i8) -> int;
fn to_int(x: u128) -> int;
fn to_int(x: u16) -> int;
fn to_int(x: u32) -> int;
fn to_int(x: u64) -> int;
fn to_int(x: u8) -> int;
/// Return the JSON representation of the object map.
///
/// # Data types
///
/// Only the following data types should be kept inside the object map:
/// `INT`, `FLOAT`, `ImmutableString`, `char`, `bool`, `()`, `Array`, `Map`.
///
/// # Errors
///
/// Data types not supported by JSON serialize into formats that may
/// invalidate the result.
///
/// # Example
///
/// ```rhai
/// let m = #{a:1, b:2, c:3};
///
/// print(m.to_json()); // prints {"a":1, "b":2, "c":3}
/// ```
fn to_json(map: Map) -> String;
/// Convert the character to lower-case and return it as a new character.
///
/// # Example
///
/// ```rhai
/// let ch = 'A';
///
/// print(ch.to_lower()); // prints 'a'
///
/// print(ch); // prints 'A'
/// ```
fn to_lower(character: char) -> char;
/// Convert the string to all lower-case and return it as a new string.
///
/// # Example
///
/// ```rhai
/// let text = "HELLO, WORLD!"
///
/// print(text.to_lower()); // prints "hello, world!"
///
/// print(text); // prints "HELLO, WORLD!"
/// ```
fn to_lower(string: String) -> String;
/// Convert the `value` into a string in octal format.
fn to_octal(value: i128) -> String;
/// Convert the `value` into a string in octal format.
fn to_octal(value: i16) -> String;
/// Convert the `value` into a string in octal format.
fn to_octal(value: i32) -> String;
/// Convert the `value` into a string in octal format.
fn to_octal(value: int) -> String;
/// Convert the `value` into a string in octal format.
fn to_octal(value: i8) -> String;
/// Convert the `value` into a string in octal format.
fn to_octal(value: u128) -> String;
/// Convert the `value` into a string in octal format.
fn to_octal(value: u16) -> String;
/// Convert the `value` into a string in octal format.
fn to_octal(value: u32) -> String;
/// Convert the `value` into a string in octal format.
fn to_octal(value: u64) -> String;
/// Convert the `value` into a string in octal format.
fn to_octal(value: u8) -> String;
/// Convert degrees to radians.
fn to_radians(x: float) -> float;
/// Convert the array into a string.
fn to_string(array: Array) -> String;
/// Return the character into a string.
fn to_string(character: char) -> String;
/// Convert the value of the `item` into a string.
fn to_string(item: ?) -> String;
/// Convert the object map into a string.
fn to_string(map: Map) -> String;
/// Convert the value of `number` into a string.
fn to_string(number: f32) -> String;
/// Convert the value of `number` into a string.
fn to_string(number: float) -> String;
/// Return the `string`.
fn to_string(string: String) -> String;
/// Return the empty string.
fn to_string(unit: ()) -> String;
/// Return the boolean value into a string.
fn to_string(value: bool) -> String;
/// Convert the character to upper-case and return it as a new character.
///
/// # Example
///
/// ```rhai
/// let ch = 'a';
///
/// print(ch.to_upper()); // prints 'A'
///
/// print(ch); // prints 'a'
/// ```
fn to_upper(character: char) -> char;
/// Convert the string to all upper-case and return it as a new string.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world!"
///
/// print(text.to_upper()); // prints "HELLO, WORLD!"
///
/// print(text); // prints "hello, world!"
/// ```
fn to_upper(string: String) -> String;
/// Remove whitespace characters from both ends of the string.
///
/// # Example
///
/// ```rhai
/// let text = " hello ";
///
/// text.trim();
///
/// print(text); // prints "hello"
/// ```
fn trim(string: String) -> ();
/// Cut off the array at the specified length.
///
/// * If `len` ≤ 0, the array is cleared.
/// * If `len` ≥ length of array, the array is not truncated.
///
/// # Example
///
/// ```rhai
/// let x = [1, 2, 3, 4, 5];
///
/// x.truncate(3);
///
/// print(x); // prints "[1, 2, 3]"
///
/// x.truncate(10);
///
/// print(x); // prints "[1, 2, 3]"
/// ```
fn truncate(array: Array, len: int) -> ();
/// Cut off the BLOB at the specified length.
///
/// * If `len` ≤ 0, the BLOB is cleared.
/// * If `len` ≥ length of BLOB, the BLOB is not truncated.
///
/// # Example
///
/// ```rhai
/// let b = blob();
///
/// b += 1; b += 2; b += 3; b += 4; b += 5;
///
/// b.truncate(3);
///
/// print(b); // prints "[010203]"
///
/// b.truncate(10);
///
/// print(b); // prints "[010203]"
/// ```
fn truncate(blob: Blob, len: int) -> ();
/// Cut off the string at the specified number of characters.
///
/// * If `len` ≤ 0, the string is cleared.
/// * If `len` ≥ length of string, the string is not truncated.
///
/// # Example
///
/// ```rhai
/// let text = "hello, world! hello, foobar!";
///
/// text.truncate(13);
///
/// print(text); // prints "hello, world!"
///
/// x.truncate(10);
///
/// print(text); // prints "hello, world!"
/// ```
fn truncate(string: String, len: int) -> ();
/// Return an array with all the property values in the object map.
///
/// # Example
///
/// ```rhai
/// let m = #{a:1, b:2, c:3};
///
/// print(m.values()); // prints "[1, 2, 3]""
/// ```
fn values(map: Map) -> Array;
/// Write an ASCII string to the bytes within an exclusive `range` in the BLOB.
///
/// Each ASCII character encodes to one single byte in the BLOB.
/// Non-ASCII characters are ignored.
///
/// * If number of bytes in `range` < length of `string`, extra bytes in `string` are not written.
/// * If number of bytes in `range` > length of `string`, extra bytes in `range` are not modified.
///
/// ```rhai
/// let b = blob(8);
///
/// b.write_ascii(1..5, "hello, world!");
///
/// print(b); // prints "[0068656c6c000000]"
/// ```
fn write_ascii(blob: Blob, range: Range<int>, string: String) -> ();
/// Write an ASCII string to the bytes within an inclusive `range` in the BLOB.
///
/// Each ASCII character encodes to one single byte in the BLOB.
/// Non-ASCII characters are ignored.
///
/// * If number of bytes in `range` < length of `string`, extra bytes in `string` are not written.
/// * If number of bytes in `range` > length of `string`, extra bytes in `range` are not modified.
///
/// ```rhai
/// let b = blob(8);
///
/// b.write_ascii(1..=5, "hello, world!");
///
/// print(b); // prints "[0068656c6c6f0000]"
/// ```
fn write_ascii(blob: Blob, range: RangeInclusive<int>, string: String) -> ();
/// Write an ASCII string to the bytes within an exclusive `range` in the BLOB.
///
/// * If `start` < 0, position counts from the end of the BLOB (`-1` is the last byte).
/// * If `start` < -length of BLOB, position counts from the beginning of the BLOB.
/// * If `start` ≥ length of BLOB, the BLOB is not modified.
/// * If `len` ≤ 0, the BLOB is not modified.
/// * If `start` position + `len` ≥ length of BLOB, only the portion of the BLOB after the `start` position is modified.
///
/// * If number of bytes in `range` < length of `string`, extra bytes in `string` are not written.
/// * If number of bytes in `range` > length of `string`, extra bytes in `range` are not modified.
///
/// ```rhai
/// let b = blob(8);
///
/// b.write_ascii(1, 5, "hello, world!");
///
/// print(b); // prints "[0068656c6c6f0000]"
/// ```
fn write_ascii(blob: Blob, start: int, len: int, string: String) -> ();
/// Write a `FLOAT` value to the bytes within an exclusive `range` in the BLOB
/// in big-endian byte order.
///
/// * If number of bytes in `range` < number of bytes for `FLOAT`, extra bytes in `FLOAT` are not written.
/// * If number of bytes in `range` > number of bytes for `FLOAT`, extra bytes in `range` are not modified.
fn write_be(blob: Blob, range: Range<int>, value: float) -> ();
/// Write an `INT` value to the bytes within an exclusive `range` in the BLOB
/// in big-endian byte order.
///
/// * If number of bytes in `range` < number of bytes for `INT`, extra bytes in `INT` are not written.
/// * If number of bytes in `range` > number of bytes for `INT`, extra bytes in `range` are not modified.
///
/// ```rhai
/// let b = blob(8, 0x42);
///
/// b.write_be_int(1..3, 0x99);
///
/// print(b); // prints "[4200004242424242]"
/// ```
fn write_be(blob: Blob, range: Range<int>, value: int) -> ();
/// Write a `FLOAT` value to the bytes within an inclusive `range` in the BLOB
/// in big-endian byte order.
///
/// * If number of bytes in `range` < number of bytes for `FLOAT`, extra bytes in `FLOAT` are not written.
/// * If number of bytes in `range` > number of bytes for `FLOAT`, extra bytes in `range` are not modified.
fn write_be(blob: Blob, range: RangeInclusive<int>, value: float) -> ();
/// Write an `INT` value to the bytes within an inclusive `range` in the BLOB
/// in big-endian byte order.
///
/// * If number of bytes in `range` < number of bytes for `INT`, extra bytes in `INT` are not written.
/// * If number of bytes in `range` > number of bytes for `INT`, extra bytes in `range` are not modified.
///
/// ```rhai
/// let b = blob(8, 0x42);
///
/// b.write_be_int(1..=3, 0x99);
///
/// print(b); // prints "[4200000042424242]"
/// ```
fn write_be(blob: Blob, range: RangeInclusive<int>, value: int) -> ();
/// Write a `FLOAT` value to the bytes beginning at the `start` position in the BLOB
/// in big-endian byte order.
///
/// * If `start` < 0, position counts from the end of the BLOB (`-1` is the last byte).
/// * If `start` < -length of BLOB, position counts from the beginning of the BLOB.
/// * If `start` ≥ length of BLOB, zero is returned.
/// * If `len` ≤ 0, zero is returned.
/// * If `start` position + `len` ≥ length of BLOB, entire portion of the BLOB after the `start` position is parsed.
///
/// * If number of bytes in `range` < number of bytes for `FLOAT`, extra bytes in `FLOAT` are not written.
/// * If number of bytes in `range` > number of bytes for `FLOAT`, extra bytes in `range` are not modified.
fn write_be(blob: Blob, start: int, len: int, value: float) -> ();
/// Write an `INT` value to the bytes beginning at the `start` position in the BLOB
/// in big-endian byte order.
///
/// * If `start` < 0, position counts from the end of the BLOB (`-1` is the last byte).
/// * If `start` < -length of BLOB, position counts from the beginning of the BLOB.
/// * If `start` ≥ length of BLOB, zero is returned.
/// * If `len` ≤ 0, zero is returned.
/// * If `start` position + `len` ≥ length of BLOB, entire portion of the BLOB after the `start` position is parsed.
///
/// * If number of bytes in `range` < number of bytes for `INT`, extra bytes in `INT` are not written.
/// * If number of bytes in `range` > number of bytes for `INT`, extra bytes in `range` are not modified.
///
/// ```rhai
/// let b = blob(8, 0x42);
///
/// b.write_be_int(1, 3, 0x99);
///
/// print(b); // prints "[4200000042424242]"
/// ```
fn write_be(blob: Blob, start: int, len: int, value: int) -> ();
/// Write a `FLOAT` value to the bytes within an exclusive `range` in the BLOB
/// in little-endian byte order.
///
/// * If number of bytes in `range` < number of bytes for `FLOAT`, extra bytes in `FLOAT` are not written.
/// * If number of bytes in `range` > number of bytes for `FLOAT`, extra bytes in `range` are not modified.
fn write_le(blob: Blob, range: Range<int>, value: float) -> ();
/// Write an `INT` value to the bytes within an exclusive `range` in the BLOB
/// in little-endian byte order.
///
/// * If number of bytes in `range` < number of bytes for `INT`, extra bytes in `INT` are not written.
/// * If number of bytes in `range` > number of bytes for `INT`, extra bytes in `range` are not modified.
///
/// ```rhai
/// let b = blob(8);
///
/// b.write_le_int(1..3, 0x12345678);
///
/// print(b); // prints "[0078560000000000]"
/// ```
fn write_le(blob: Blob, range: Range<int>, value: int) -> ();
/// Write a `FLOAT` value to the bytes within an inclusive `range` in the BLOB
/// in little-endian byte order.
///
/// * If number of bytes in `range` < number of bytes for `FLOAT`, extra bytes in `FLOAT` are not written.
/// * If number of bytes in `range` > number of bytes for `FLOAT`, extra bytes in `range` are not modified.
fn write_le(blob: Blob, range: RangeInclusive<int>, value: float) -> ();
/// Write an `INT` value to the bytes within an inclusive `range` in the BLOB
/// in little-endian byte order.
///
/// * If number of bytes in `range` < number of bytes for `INT`, extra bytes in `INT` are not written.
/// * If number of bytes in `range` > number of bytes for `INT`, extra bytes in `range` are not modified.
///
/// ```rhai
/// let b = blob(8);
///
/// b.write_le_int(1..=3, 0x12345678);
///
/// print(b); // prints "[0078563400000000]"
/// ```
fn write_le(blob: Blob, range: RangeInclusive<int>, value: int) -> ();
/// Write a `FLOAT` value to the bytes beginning at the `start` position in the BLOB
/// in little-endian byte order.
///
/// * If `start` < 0, position counts from the end of the BLOB (`-1` is the last byte).
/// * If `start` < -length of BLOB, position counts from the beginning of the BLOB.
/// * If `start` ≥ length of BLOB, zero is returned.
/// * If `len` ≤ 0, zero is returned.
/// * If `start` position + `len` ≥ length of BLOB, entire portion of the BLOB after the `start` position is parsed.
///
/// * If number of bytes in `range` < number of bytes for `FLOAT`, extra bytes in `FLOAT` are not written.
/// * If number of bytes in `range` > number of bytes for `FLOAT`, extra bytes in `range` are not modified.
fn write_le(blob: Blob, start: int, len: int, value: float) -> ();
/// Write an `INT` value to the bytes beginning at the `start` position in the BLOB
/// in little-endian byte order.
///
/// * If `start` < 0, position counts from the end of the BLOB (`-1` is the last byte).
/// * If `start` < -length of BLOB, position counts from the beginning of the BLOB.
/// * If `start` ≥ length of BLOB, zero is returned.
/// * If `len` ≤ 0, zero is returned.
/// * If `start` position + `len` ≥ length of BLOB, entire portion of the BLOB after the `start` position is parsed.
///
/// * If number of bytes in `range` < number of bytes for `INT`, extra bytes in `INT` are not written.
/// * If number of bytes in `range` > number of bytes for `INT`, extra bytes in `range` are not modified.
///
/// ```rhai
/// let b = blob(8);
///
/// b.write_le_int(1, 3, 0x12345678);
///
/// print(b); // prints "[0078563400000000]"
/// ```
fn write_le(blob: Blob, start: int, len: int, value: int) -> ();
/// Write a string to the bytes within an exclusive `range` in the BLOB in UTF-8 encoding.
///
/// * If number of bytes in `range` < length of `string`, extra bytes in `string` are not written.
/// * If number of bytes in `range` > length of `string`, extra bytes in `range` are not modified.
///
/// ```rhai
/// let b = blob(8);
///
/// b.write_utf8(1..5, "朝には紅顔ありて夕べには白骨となる");
///
/// print(b); // prints "[00e69c9de3000000]"
/// ```
fn write_utf8(blob: Blob, range: Range<int>, string: String) -> ();
/// Write a string to the bytes within an inclusive `range` in the BLOB in UTF-8 encoding.
///
/// * If number of bytes in `range` < length of `string`, extra bytes in `string` are not written.
/// * If number of bytes in `range` > length of `string`, extra bytes in `range` are not modified.
///
/// ```rhai
/// let b = blob(8);
///
/// b.write_utf8(1..=5, "朝には紅顔ありて夕べには白骨となる");
///
/// print(b); // prints "[00e69c9de3810000]"
/// ```
fn write_utf8(blob: Blob, range: RangeInclusive<int>, string: String) -> ();
/// Write a string to the bytes within an inclusive `range` in the BLOB in UTF-8 encoding.
///
/// * If `start` < 0, position counts from the end of the BLOB (`-1` is the last byte).
/// * If `start` < -length of BLOB, position counts from the beginning of the BLOB.
/// * If `start` ≥ length of BLOB, the BLOB is not modified.
/// * If `len` ≤ 0, the BLOB is not modified.
/// * If `start` position + `len` ≥ length of BLOB, only the portion of the BLOB after the `start` position is modified.
///
/// * If number of bytes in `range` < length of `string`, extra bytes in `string` are not written.
/// * If number of bytes in `range` > length of `string`, extra bytes in `range` are not modified.
///
/// ```rhai
/// let b = blob(8);
///
/// b.write_utf8(1, 5, "朝には紅顔ありて夕べには白骨となる");
///
/// print(b); // prints "[00e69c9de3810000]"
/// ```
fn write_utf8(blob: Blob, start: int, len: int, string: String) -> ();
op |(i128, i128) -> i128;
op |(i16, i16) -> i16;
op |(i32, i32) -> i32;
op |(i8, i8) -> i8;
op |(u128, u128) -> u128;
op |(u16, u16) -> u16;
op |(u32, u32) -> u32;
op |(u64, u64) -> u64;
op |(u8, u8) -> u8;