Add features info in docs.
This commit is contained in:
parent
c6216c0823
commit
92b549b828
@ -7,9 +7,15 @@ use crate::stdlib::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
/// An raw value of any type.
|
/// An raw value of any type.
|
||||||
|
///
|
||||||
|
/// Currently, `Variant` is not `Send` nor `Sync`, so it can practically be any type.
|
||||||
|
/// Turn on the `sync` feature to restrict it to only types that implement `Send + Sync`.
|
||||||
pub type Variant = dyn Any;
|
pub type Variant = dyn Any;
|
||||||
|
|
||||||
/// A boxed dynamic type containing any value.
|
/// A boxed dynamic type containing any value.
|
||||||
|
///
|
||||||
|
/// Currently, `Dynamic` is not `Send` nor `Sync`, so it can practically be any type.
|
||||||
|
/// Turn on the `sync` feature to restrict it to only types that implement `Send + Sync`.
|
||||||
pub type Dynamic = Box<Variant>;
|
pub type Dynamic = Box<Variant>;
|
||||||
|
|
||||||
/// A trait covering any type.
|
/// A trait covering any type.
|
||||||
@ -48,6 +54,7 @@ impl<T: crate::stdlib::any::Any + Clone + Send + Sync + ?Sized> Any for T {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// A trait covering any type.
|
||||||
#[cfg(not(feature = "sync"))]
|
#[cfg(not(feature = "sync"))]
|
||||||
pub trait Any: crate::stdlib::any::Any {
|
pub trait Any: crate::stdlib::any::Any {
|
||||||
/// Get the `TypeId` of this type.
|
/// Get the `TypeId` of this type.
|
||||||
|
@ -23,10 +23,14 @@ use crate::stdlib::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
/// An dynamic array of `Dynamic` values.
|
/// An dynamic array of `Dynamic` values.
|
||||||
|
///
|
||||||
|
/// Not available under the `no_index` feature.
|
||||||
#[cfg(not(feature = "no_index"))]
|
#[cfg(not(feature = "no_index"))]
|
||||||
pub type Array = Vec<Dynamic>;
|
pub type Array = Vec<Dynamic>;
|
||||||
|
|
||||||
/// An dynamic hash map of `Dynamic` values.
|
/// An dynamic hash map of `Dynamic` values with `String` keys.
|
||||||
|
///
|
||||||
|
/// Not available under the `no_object` feature.
|
||||||
#[cfg(not(feature = "no_object"))]
|
#[cfg(not(feature = "no_object"))]
|
||||||
pub type Map = HashMap<String, Dynamic>;
|
pub type Map = HashMap<String, Dynamic>;
|
||||||
|
|
||||||
@ -188,6 +192,8 @@ impl FunctionsLib {
|
|||||||
/// # Ok(())
|
/// # Ok(())
|
||||||
/// # }
|
/// # }
|
||||||
/// ```
|
/// ```
|
||||||
|
///
|
||||||
|
/// Currently, `Engine` is neither `Send` nor `Sync`. Turn on the `sync` feature to make it `Send + Sync`.
|
||||||
pub struct Engine<'e> {
|
pub struct Engine<'e> {
|
||||||
/// A hashmap containing all compiled functions known to the engine.
|
/// A hashmap containing all compiled functions known to the engine.
|
||||||
pub(crate) functions: HashMap<FnSpec<'e>, Box<FnAny>>,
|
pub(crate) functions: HashMap<FnSpec<'e>, Box<FnAny>>,
|
||||||
@ -302,6 +308,8 @@ impl Engine<'_> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Control whether and how the `Engine` will optimize an AST after compilation
|
/// Control whether and how the `Engine` will optimize an AST after compilation
|
||||||
|
///
|
||||||
|
/// Not available under the `no_optimize` feature.
|
||||||
#[cfg(not(feature = "no_optimize"))]
|
#[cfg(not(feature = "no_optimize"))]
|
||||||
pub fn set_optimization_level(&mut self, optimization_level: OptimizationLevel) {
|
pub fn set_optimization_level(&mut self, optimization_level: OptimizationLevel) {
|
||||||
self.optimization_level = optimization_level
|
self.optimization_level = optimization_level
|
||||||
|
30
src/error.rs
30
src/error.rs
@ -30,9 +30,7 @@ impl fmt::Display for LexError {
|
|||||||
Self::MalformedEscapeSequence(s) => write!(f, "Invalid escape sequence: '{}'", s),
|
Self::MalformedEscapeSequence(s) => write!(f, "Invalid escape sequence: '{}'", s),
|
||||||
Self::MalformedNumber(s) => write!(f, "Invalid number: '{}'", s),
|
Self::MalformedNumber(s) => write!(f, "Invalid number: '{}'", s),
|
||||||
Self::MalformedChar(s) => write!(f, "Invalid character: '{}'", s),
|
Self::MalformedChar(s) => write!(f, "Invalid character: '{}'", s),
|
||||||
Self::MalformedIdentifier(s) => {
|
Self::MalformedIdentifier(s) => write!(f, "Variable name is not proper: '{}'", s),
|
||||||
write!(f, "Variable name is not in a legal format: '{}'", s)
|
|
||||||
}
|
|
||||||
Self::UnterminatedString => write!(f, "Open string is not terminated"),
|
Self::UnterminatedString => write!(f, "Open string is not terminated"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -47,37 +45,51 @@ pub enum ParseErrorType {
|
|||||||
UnexpectedEOF,
|
UnexpectedEOF,
|
||||||
/// An unknown operator is encountered. Wrapped value is the operator.
|
/// An unknown operator is encountered. Wrapped value is the operator.
|
||||||
UnknownOperator(String),
|
UnknownOperator(String),
|
||||||
/// Expecting a particular token but not finding one. Wrapped values are the token and usage.
|
/// Expecting a particular token but not finding one. Wrapped values are the token and description.
|
||||||
MissingToken(String, String),
|
MissingToken(String, String),
|
||||||
/// An expression in function call arguments `()` has syntax error.
|
/// An expression in function call arguments `()` has syntax error. Wrapped value is the error description (if any).
|
||||||
MalformedCallExpr(String),
|
MalformedCallExpr(String),
|
||||||
/// An expression in indexing brackets `[]` has syntax error.
|
/// An expression in indexing brackets `[]` has syntax error. Wrapped value is the error description (if any).
|
||||||
|
///
|
||||||
|
/// Not available under the `no_index` feature.
|
||||||
#[cfg(not(feature = "no_index"))]
|
#[cfg(not(feature = "no_index"))]
|
||||||
MalformedIndexExpr(String),
|
MalformedIndexExpr(String),
|
||||||
/// A map definition has duplicated property names. Wrapped is the property name.
|
/// A map definition has duplicated property names. Wrapped value is the property name.
|
||||||
|
///
|
||||||
|
/// Not available under the `no_object` feature.
|
||||||
#[cfg(not(feature = "no_object"))]
|
#[cfg(not(feature = "no_object"))]
|
||||||
DuplicatedProperty(String),
|
DuplicatedProperty(String),
|
||||||
/// Invalid expression assigned to constant.
|
/// Invalid expression assigned to constant. Wrapped value is the name of the constant.
|
||||||
ForbiddenConstantExpr(String),
|
ForbiddenConstantExpr(String),
|
||||||
/// Missing a property name for custom types and maps.
|
/// Missing a property name for custom types and maps.
|
||||||
PropertyExpected,
|
PropertyExpected,
|
||||||
/// Missing a variable name after the `let`, `const` or `for` keywords.
|
/// Missing a variable name after the `let`, `const` or `for` keywords.
|
||||||
VariableExpected,
|
VariableExpected,
|
||||||
/// Missing an expression.
|
/// Missing an expression. Wrapped value is the expression type.
|
||||||
ExprExpected(String),
|
ExprExpected(String),
|
||||||
/// Defining a function `fn` in an appropriate place (e.g. inside another function).
|
/// Defining a function `fn` in an appropriate place (e.g. inside another function).
|
||||||
|
///
|
||||||
|
/// Not available under the `no_function` feature.
|
||||||
#[cfg(not(feature = "no_function"))]
|
#[cfg(not(feature = "no_function"))]
|
||||||
WrongFnDefinition,
|
WrongFnDefinition,
|
||||||
/// Missing a function name after the `fn` keyword.
|
/// Missing a function name after the `fn` keyword.
|
||||||
|
///
|
||||||
|
/// Not available under the `no_function` feature.
|
||||||
#[cfg(not(feature = "no_function"))]
|
#[cfg(not(feature = "no_function"))]
|
||||||
FnMissingName,
|
FnMissingName,
|
||||||
/// A function definition is missing the parameters list. Wrapped value is the function name.
|
/// A function definition is missing the parameters list. Wrapped value is the function name.
|
||||||
|
///
|
||||||
|
/// Not available under the `no_function` feature.
|
||||||
#[cfg(not(feature = "no_function"))]
|
#[cfg(not(feature = "no_function"))]
|
||||||
FnMissingParams(String),
|
FnMissingParams(String),
|
||||||
/// A function definition has duplicated parameters. Wrapped values are the function name and parameter name.
|
/// A function definition has duplicated parameters. Wrapped values are the function name and parameter name.
|
||||||
|
///
|
||||||
|
/// Not available under the `no_function` feature.
|
||||||
#[cfg(not(feature = "no_function"))]
|
#[cfg(not(feature = "no_function"))]
|
||||||
FnDuplicatedParam(String, String),
|
FnDuplicatedParam(String, String),
|
||||||
/// A function definition is missing the body. Wrapped value is the function name.
|
/// A function definition is missing the body. Wrapped value is the function name.
|
||||||
|
///
|
||||||
|
/// Not available under the `no_function` feature.
|
||||||
#[cfg(not(feature = "no_function"))]
|
#[cfg(not(feature = "no_function"))]
|
||||||
FnMissingBody(String),
|
FnMissingBody(String),
|
||||||
/// Assignment to an inappropriate LHS (left-hand-side) expression.
|
/// Assignment to an inappropriate LHS (left-hand-side) expression.
|
||||||
|
18
src/lib.rs
18
src/lib.rs
@ -36,7 +36,23 @@
|
|||||||
//! }
|
//! }
|
||||||
//! ```
|
//! ```
|
||||||
//!
|
//!
|
||||||
//! [Check out the README on GitHub for more information!](https://github.com/jonathandturner/rhai)
|
//! ## Optional features
|
||||||
|
//!
|
||||||
|
//! | Feature | Description |
|
||||||
|
//! | ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||||
|
//! | `no_stdlib` | Exclude the standard library of utility functions in the build, and only include the minimum necessary functionalities. Standard types are not affected. |
|
||||||
|
//! | `unchecked` | Exclude arithmetic checking (such as overflows and division by zero). Beware that a bad script may panic the entire system! |
|
||||||
|
//! | `no_function` | Disable script-defined functions if not needed. |
|
||||||
|
//! | `no_index` | Disable arrays and indexing features if not needed. |
|
||||||
|
//! | `no_object` | Disable support for custom types and objects. |
|
||||||
|
//! | `no_float` | Disable floating-point numbers and math if not needed. |
|
||||||
|
//! | `no_optimize` | Disable the script optimizer. |
|
||||||
|
//! | `only_i32` | Set the system integer type to `i32` and disable all other integer types. `INT` is set to `i32`. |
|
||||||
|
//! | `only_i64` | Set the system integer type to `i64` and disable all other integer types. `INT` is set to `i64`. |
|
||||||
|
//! | `no_std` | Build for `no-std`. Notice that additional dependencies will be pulled in to replace `std` features. |
|
||||||
|
//! | `sync` | Restrict all values types to those that are `Send + Sync`. Under this feature, `Engine`, `Scope` and `AST` are all `Send + Sync`. |
|
||||||
|
//!
|
||||||
|
//! [Check out the README on GitHub for details on the Rhai language!](https://github.com/jonathandturner/rhai)
|
||||||
|
|
||||||
#![cfg_attr(feature = "no_std", no_std)]
|
#![cfg_attr(feature = "no_std", no_std)]
|
||||||
|
|
||||||
|
@ -16,6 +16,8 @@ use crate::stdlib::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
/// Level of optimization performed.
|
/// Level of optimization performed.
|
||||||
|
///
|
||||||
|
/// Not available under the `no_optimize` feature.
|
||||||
#[derive(Debug, Eq, PartialEq, Hash, Clone, Copy)]
|
#[derive(Debug, Eq, PartialEq, Hash, Clone, Copy)]
|
||||||
pub enum OptimizationLevel {
|
pub enum OptimizationLevel {
|
||||||
/// No optimization performed.
|
/// No optimization performed.
|
||||||
|
@ -37,6 +37,8 @@ pub type INT = i64;
|
|||||||
pub type INT = i32;
|
pub type INT = i32;
|
||||||
|
|
||||||
/// The system floating-point type.
|
/// The system floating-point type.
|
||||||
|
///
|
||||||
|
/// Not available under the `no_float` feature.
|
||||||
#[cfg(not(feature = "no_float"))]
|
#[cfg(not(feature = "no_float"))]
|
||||||
pub type FLOAT = f64;
|
pub type FLOAT = f64;
|
||||||
|
|
||||||
@ -160,6 +162,8 @@ impl fmt::Debug for Position {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Compiled AST (abstract syntax tree) of a Rhai script.
|
/// Compiled AST (abstract syntax tree) of a Rhai script.
|
||||||
|
///
|
||||||
|
/// Currently, `AST` is neither `Send` nor `Sync`. Turn on the `sync` feature to make it `Send + Sync`.
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct AST(pub(crate) Vec<Stmt>, pub(crate) Vec<Arc<FnDef>>);
|
pub struct AST(pub(crate) Vec<Stmt>, pub(crate) Vec<Arc<FnDef>>);
|
||||||
|
|
||||||
|
@ -22,6 +22,8 @@ pub enum EvalAltResult {
|
|||||||
ErrorParsing(ParseError),
|
ErrorParsing(ParseError),
|
||||||
|
|
||||||
/// Error reading from a script file. Wrapped value is the path of the script file.
|
/// Error reading from a script file. Wrapped value is the path of the script file.
|
||||||
|
///
|
||||||
|
/// Not available under the `no_std` feature.
|
||||||
#[cfg(not(feature = "no_std"))]
|
#[cfg(not(feature = "no_std"))]
|
||||||
ErrorReadingScriptFile(PathBuf, std::io::Error),
|
ErrorReadingScriptFile(PathBuf, std::io::Error),
|
||||||
|
|
||||||
|
@ -61,6 +61,8 @@ pub(crate) struct EntryRef<'a> {
|
|||||||
///
|
///
|
||||||
/// When searching for entries, newly-added entries are found before similarly-named but older entries,
|
/// When searching for entries, newly-added entries are found before similarly-named but older entries,
|
||||||
/// allowing for automatic _shadowing_.
|
/// allowing for automatic _shadowing_.
|
||||||
|
///
|
||||||
|
/// Currently, `Scope` is neither `Send` nor `Sync`. Turn on the `sync` feature to make it `Send + Sync`.
|
||||||
pub struct Scope<'a>(Vec<Entry<'a>>);
|
pub struct Scope<'a>(Vec<Entry<'a>>);
|
||||||
|
|
||||||
impl<'a> Scope<'a> {
|
impl<'a> Scope<'a> {
|
||||||
|
Loading…
Reference in New Issue
Block a user