Skip to main content

StmtKind

Enum StmtKind 

Source
pub enum StmtKind {
Show 32 variants Let { name: Ident, ty: Option<TypeAnnotation>, value: ExprId, doc: Option<DocComment>, }, Const { name: Ident, ty: Option<TypeAnnotation>, value: ExprId, doc: Option<DocComment>, }, LetPattern { binding: Binding, ty: Option<TypeAnnotation>, value: ExprId, doc: Option<DocComment>, }, ConstPattern { binding: Binding, ty: Option<TypeAnnotation>, value: ExprId, doc: Option<DocComment>, }, ObjectRest { is_const: bool, name: Ident, source: ExprId, exclude: Vec<Ident>, ty: Option<TypeAnnotation>, doc: Option<DocComment>, }, Function { name: Ident, generics: Vec<Ident>, params: Vec<ParamDecl>, return_type: Option<TypeAnnotation>, type_predicate: Option<TypePredicateAnnotation>, body: StmtId, doc: Option<DocComment>, }, If { condition: ExprId, then_block: StmtId, else_block: Option<StmtId>, }, While { condition: ExprId, body: StmtId, }, For { init: Option<StmtId>, condition: Option<ExprId>, update: Option<StmtId>, body: StmtId, }, ForOf { binding_kind: BindingKind, name: Ident, ty: Option<TypeAnnotation>, iter: ExprId, body: StmtId, }, ForOfPattern { binding_kind: BindingKind, binding: Binding, ty: Option<TypeAnnotation>, iter: ExprId, body: StmtId, }, DoWhile { body: StmtId, condition: ExprId, }, Switch { discriminant: ExprId, cases: Vec<SwitchCase>, default: Option<SwitchDefault>, }, Break, Continue, Return(Option<ExprId>), Throw { value: ExprId, }, Try { body: StmtId, catches: Vec<CatchClause>, finally: Option<StmtId>, }, Expr(ExprId), Block(Vec<StmtId>), Assign { target: Ident, value: ExprId, }, AssignField { receiver: ExprId, field_name: Ident, value: ExprId, }, AssignIndex { receiver: ExprId, index: ExprId, value: ExprId, }, CompoundAssign { target: Ident, op: BinOp, op_span: Span, value: ExprId, }, CompoundAssignField { receiver: ExprId, field_name: Ident, op: BinOp, op_span: Span, value: ExprId, }, CompoundAssignIndex { receiver: ExprId, index: ExprId, op: BinOp, op_span: Span, value: ExprId, }, InterfaceDecl { name: Ident, generics: Vec<Ident>, extends: Vec<TypeAnnotation>, members: Vec<InterfaceMember>, doc: Option<DocComment>, }, ClassDecl { name: Ident, generics: Vec<Ident>, extends: Option<TypeAnnotation>, implements: Vec<TypeAnnotation>, members: Vec<ClassMember>, doc: Option<DocComment>, }, EnumDecl { name: Ident, members: Vec<EnumMember>, doc: Option<DocComment>, }, TypeAliasDecl { name: Ident, generics: Vec<Ident>, ty: TypeAnnotation, doc: Option<DocComment>, }, Import { module: String, module_span: Span, kind: ImportKind, doc: Option<DocComment>, }, ExportFrom { specs: Vec<ImportSpecifier>, source: Option<(String, Span)>, doc: Option<DocComment>, },
}

Variants§

§

Let

§

Const

§

LetPattern

Destructuring let. Eliminated by lower_patterns into plain Let stmts; never reaches the typechecker.

§

ConstPattern

§

ObjectRest

Rest binding from const { a, ...rest } = obj or its let form. name gets a narrowed type with exclude fields removed; codegen treats it like Const or Let.

Fields

§is_const: bool
§name: Ident
§source: ExprId
§exclude: Vec<Ident>
§

Function

Fields

§name: Ident
§generics: Vec<Ident>
§params: Vec<ParamDecl>
§return_type: Option<TypeAnnotation>

None when a type predicate is declared; exactly one of return_type / type_predicate is Some after parse.

§body: StmtId
§

If

Fields

§condition: ExprId
§then_block: StmtId
§else_block: Option<StmtId>
§

While

Fields

§condition: ExprId
§body: StmtId
§

For

C-style for loop. update is a StmtId so an assignment there is an assignment statement.

Fields

§condition: Option<ExprId>
§update: Option<StmtId>
§body: StmtId

Always a Block — parser requires { … }.

§

ForOf

Fields

§binding_kind: BindingKind
§name: Ident
§iter: ExprId
§body: StmtId

Always a Block — parser requires { … }.

§

ForOfPattern

Destructuring for-of head. Eliminated by lower_patterns; never reaches the typechecker.

Fields

§binding_kind: BindingKind
§binding: Binding
§iter: ExprId
§body: StmtId

Always a Block — parser requires { … }.

§

DoWhile

Fields

§body: StmtId

Always a Block — parser requires { … }.

§condition: ExprId
§

Switch

No fallthrough — typechecker rejects a case body that doesn’t end in break or return.

Fields

§discriminant: ExprId
§

Break

§

Continue

§

Return(Option<ExprId>)

§

Throw

Fields

§value: ExprId
§

Try

catches may be empty and finally optional, but at least one must appear. Multiple catch clauses dispatch in declaration order on the thrown value’s nominal class; the typechecker rejects unreachable arms.

Fields

§body: StmtId
§catches: Vec<CatchClause>
§finally: Option<StmtId>
§

Expr(ExprId)

§

Block(Vec<StmtId>)

§

Assign

Fields

§target: Ident
§value: ExprId
§

AssignField

Fields

§receiver: ExprId
§field_name: Ident
§value: ExprId
§

AssignIndex

Fields

§receiver: ExprId
§index: ExprId
§value: ExprId
§

CompoundAssign

target += value; etc. Lowered to Assign with a synthesized Binary; op_span anchors infer diagnostics.

Fields

§target: Ident
§op_span: Span
§value: ExprId
§

CompoundAssignField

Fields

§receiver: ExprId
§field_name: Ident
§op_span: Span
§value: ExprId
§

CompoundAssignIndex

Fields

§receiver: ExprId
§index: ExprId
§op_span: Span
§value: ExprId
§

InterfaceDecl

Interface declaration. Single declaration site per name; no reopening.

Fields

§name: Ident
§generics: Vec<Ident>
§

ClassDecl

Class declaration. Single inheritance via extends, structural implements. generics is parsed and stored for forward-compat; generic classes are not yet consumed downstream (classes.md non-goals).

Fields

§name: Ident
§generics: Vec<Ident>
§implements: Vec<TypeAnnotation>
§members: Vec<ClassMember>
§

EnumDecl

Enum declaration. No const enums, no computed members. value: None means auto-numbered at typecheck time.

Fields

§name: Ident
§members: Vec<EnumMember>
§

TypeAliasDecl

Fields

§name: Ident
§generics: Vec<Ident>
§

Import

Top-level only; nested imports are a parse error.

Fields

§module: String
§module_span: Span
§

ExportFrom

Re-export (export { a, b as c } from "./util"; or export { x };). Top-level only. Parses in single-file but the typechecker gates it until cross-module packages land. source is the from "…" module path + span, or None for the bare export { x }; form.

Trait Implementations§

Source§

impl Clone for StmtKind

Source§

fn clone(&self) -> Self

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 StmtKind

Source§

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

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

impl PartialEq for StmtKind

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for StmtKind

Auto Trait Implementations§

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<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> 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> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. 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> Same for T

Source§

type Output = T

Should always be Self
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<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