Skip to main content

Stmt

Enum Stmt 

Source
#[non_exhaustive]
pub enum Stmt {
Show 17 variants Noop(Position), If(Box<FlowControl>, Position), Switch(Box<(Expr, SwitchCasesCollection)>, Position), While(Box<FlowControl>, Position), Do(Box<FlowControl>, ASTFlags, Position), For(Box<(Ident, Option<Ident>, FlowControl)>, Position), Var(Box<(Ident, Expr, Option<NonZero<usize>>)>, ASTFlags, Position), Assignment(Box<(OpAssignment, BinaryExpr)>), FnCall(Box<FnCallExpr>, Position), Block(Box<StmtBlock>), TryCatch(Box<FlowControl>, Position), Expr(Box<Expr>), BreakLoop(Option<Box<Expr>>, ASTFlags, Position), Return(Option<Box<Expr>>, ASTFlags, Position), Import(Box<(Expr, Ident)>, Position), Export(Box<(Ident, Ident)>, Position), Share(Box<SmallVec<[(Ident, Option<NonZero<usize>>); 5]>>),
}
Available on crate feature rhai only.
Expand description

(internals) A statement. Exported under the internals feature only.

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

Noop(Position)

No-op.

§

If(Box<FlowControl>, Position)

if expr { stmt } else { stmt }

§

Switch(Box<(Expr, SwitchCasesCollection)>, Position)

switch expr { literal or range or _ if condition => stmt ,}

§Data Structure
  1. Hash table for (condition, block)
  2. Default block
  3. List of ranges: (start, end, inclusive, condition, statement)
§

While(Box<FlowControl>, Position)

while expr { stmt } | loop { stmt }

If the guard expression is UNIT, then it is a loop statement.

§

Do(Box<FlowControl>, ASTFlags, Position)

do { stmt } while|until expr

§Flags
§

For(Box<(Ident, Option<Ident>, FlowControl)>, Position)

for ( id , counter ) in expr { stmt }

§

Var(Box<(Ident, Expr, Option<NonZero<usize>>)>, ASTFlags, Position)

[export] let|const id = expr

§Flags
§

Assignment(Box<(OpAssignment, BinaryExpr)>)

expr op= expr

§

FnCall(Box<FnCallExpr>, Position)

func ( expr ,)

This is a duplicate of Expr::FnCall to cover the very common pattern of a single function call forming one statement.

§

Block(Box<StmtBlock>)

{ stmt;}

§

TryCatch(Box<FlowControl>, Position)

try { stmt; … } catch ( var ) { stmt; … }

§

Expr(Box<Expr>)

§

BreakLoop(Option<Box<Expr>>, ASTFlags, Position)

continue/break expr

§Flags
§

Return(Option<Box<Expr>>, ASTFlags, Position)

return/throw expr

§Flags
§

Import(Box<(Expr, Ident)>, Position)

Available on non-crate feature no_module only.

import expr as alias

Not available under no_module.

§

Export(Box<(Ident, Ident)>, Position)

Available on non-crate feature no_module only.

export var as alias

Not available under no_module.

§

Share(Box<SmallVec<[(Ident, Option<NonZero<usize>>); 5]>>)

Available on non-crate feature no_closure only.

Convert a list of variables to shared.

Not available under no_closure.

§Notes

This variant does not map to any language structure. It is currently only used only to convert normal variables into shared variables when they are captured by a closure.

Implementations§

Source§

impl Stmt

Source

pub const fn is_noop(&self) -> bool

Is this statement Noop?

Source

pub const fn options(&self) -> ASTFlags

Get the options of this statement.

Source

pub fn position(&self) -> Position

Get the position of this statement.

Source

pub fn set_position(&mut self, new_pos: Position) -> &mut Stmt

Override the position of this statement.

Source

pub const fn returns_value(&self) -> bool

Does this statement return a value?

Source

pub const fn is_self_terminated(&self) -> bool

Is this statement self-terminated (i.e. no need for a semicolon terminator)?

Source

pub fn is_pure(&self) -> bool

Is this statement pure?

A pure statement has no side effects.

Source

pub fn is_block_dependent(&self) -> bool

Does this statement’s behavior depend on its containing block?

A statement that depends on its containing block behaves differently when promoted to an upper block.

Currently only variable definitions (i.e. let and const), import/export statements, and eval calls (which may in turn define variables) fall under this category.

Source

pub fn is_internally_pure(&self) -> bool

Is this statement pure within the containing block?

An internally pure statement only has side effects that disappear outside the block.

Currently only variable definitions (i.e. let and const) and import/export statements are internally pure, other than pure expressions.

Source

pub const fn is_control_flow_break(&self) -> bool

Does this statement break the current control flow through the containing block?

Currently this is only true for return, throw, break and continue.

All statements following this statement will essentially be dead code.

Source

pub fn take(&mut self) -> Stmt

Return this Stmt, replacing it with Stmt::Noop.

Source

pub fn walk<'a>( &'a self, path: &mut Vec<ASTNode<'a>>, on_node: &mut (impl FnMut(&[ASTNode<'_>]) -> bool + ?Sized), ) -> bool

Recursively walk this statement. Return false from the callback to terminate the walk.

Trait Implementations§

Source§

impl Clone for Stmt

Source§

fn clone(&self) -> Stmt

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Stmt

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
Source§

impl Default for Stmt

Source§

fn default() -> Stmt

Returns the “default value” for a type. Read more
Source§

impl<'a> From<&'a Stmt> for ASTNode<'a>

Source§

fn from(stmt: &'a Stmt) -> ASTNode<'a>

Converts to this type from the input type.
Source§

impl Hash for Stmt

Source§

fn hash<__H>(&self, state: &mut __H)
where __H: Hasher,

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more

Auto Trait Implementations§

§

impl !RefUnwindSafe for Stmt

§

impl !UnwindSafe for Stmt

§

impl Freeze for Stmt

§

impl Send for Stmt

§

impl Sync for Stmt

§

impl Unpin for Stmt

§

impl UnsafeUnpin for Stmt

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ServiceExt for T

Source§

fn map_response_body<F>(self, f: F) -> MapResponseBody<Self, F>
where Self: Sized,

Available on crate feature map-response-body only.
Apply a transformation to the response body. Read more
Source§

fn trace_for_http(self) -> Trace<Self, SharedClassifier<ServerErrorsAsFailures>>
where Self: Sized,

Available on crate feature trace only.
High level tracing that classifies responses using HTTP status codes. Read more
Source§

fn trace_for_grpc(self) -> Trace<Self, SharedClassifier<GrpcErrorsAsFailures>>
where Self: Sized,

Available on crate feature trace only.
High level tracing that classifies responses using gRPC headers. Read more
Source§

fn follow_redirects(self) -> FollowRedirect<Self>
where Self: Sized,

Available on crate feature follow-redirect only.
Follow redirect resposes using the Standard policy. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> Variant for T
where T: Any + Clone + SendSync,

Source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert this Variant trait object to &dyn Any.
Source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert this Variant trait object to &mut dyn Any.
Source§

fn as_boxed_any(self: Box<T>) -> Box<dyn Any>

Convert this Variant trait object to Box<dyn Any>.
Source§

fn type_name(&self) -> &'static str

Get the name of this type.
Source§

fn clone_object(&self) -> Box<dyn Variant>

Clone this Variant trait object.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more