Skip to main content

ExpressionChecker

Struct ExpressionChecker 

Source
pub struct ExpressionChecker<'a, 'ctx> { /* private fields */ }
Expand description

Expression type checker that operates on the shared context.

This is a stateless checker that borrows the context mutably. All type inference for expressions goes through this checker.

Implementations§

Source§

impl<'a, 'ctx> ExpressionChecker<'a, 'ctx>

Source

pub const fn new(ctx: &'a mut CheckerContext<'ctx>) -> Self

Create a new expression checker with a mutable context reference.

Source

pub fn check(&mut self, idx: NodeIndex) -> TypeId

Check an expression and return its type.

This is the main entry point for expression type checking. It handles caching and dispatches to specific expression handlers.

Source

pub fn check_with_context( &mut self, idx: NodeIndex, context_type: Option<TypeId>, ) -> TypeId

Check an expression with a contextual type hint.

Contextual types enable downward inference where the expected type influences the inferred type. For example:

  • const x: string = expr - expr is checked with context string
  • const f: (x: number) => void = (x) => {} - x is inferred as number
§Caching Behavior

When context_type is Some, the cache is bypassed to avoid incorrect results. The same expression can have different types depending on the context, so caching by NodeIndex alone is unsound.

Source

pub fn compute_type_uncached(&mut self, idx: NodeIndex) -> TypeId

Compute the type of an expression without caching.

This is called by CheckerState::compute_type_of_node to get an initial type for expressions. Returns TypeId::DELEGATE if the expression needs full CheckerState context for proper type resolution.

Simple expressions that don’t need contextual typing or symbol resolution are handled directly here. Complex expressions delegate to CheckerState.

Source

pub const fn context(&self) -> &CheckerContext<'ctx>

Get the context reference (for read-only access).

Auto Trait Implementations§

§

impl<'a, 'ctx> Freeze for ExpressionChecker<'a, 'ctx>

§

impl<'a, 'ctx> !RefUnwindSafe for ExpressionChecker<'a, 'ctx>

§

impl<'a, 'ctx> !Send for ExpressionChecker<'a, 'ctx>

§

impl<'a, 'ctx> !Sync for ExpressionChecker<'a, 'ctx>

§

impl<'a, 'ctx> Unpin for ExpressionChecker<'a, 'ctx>

§

impl<'a, 'ctx> UnsafeUnpin for ExpressionChecker<'a, 'ctx>

§

impl<'a, 'ctx> !UnwindSafe for ExpressionChecker<'a, 'ctx>

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> 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, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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<S, T> Upcast<T> for S
where T: UpcastFrom<S> + ?Sized, S: ?Sized,

Source§

fn upcast(&self) -> &T
where Self: ErasableGeneric, T: ErasableGeneric<Repr = Self::Repr>,

Perform a zero-cost type-safe upcast to a wider ref type within the Wasm bindgen generics type system. Read more
Source§

fn upcast_into(self) -> T
where Self: Sized + ErasableGeneric, T: ErasableGeneric<Repr = Self::Repr>,

Perform a zero-cost type-safe upcast to a wider type within the Wasm bindgen generics type system. Read more
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