Struct phoenix_lang::resolver::Resolver

source ·
pub struct Resolver { /* private fields */ }
Expand description

Manages the declaration and definition of local variables

One ResolverNode is created and pushed onto the stack for each function definition. It then gets popped off once its definition ends, so the value on top of each ResolverNode on the stack will always be its parent

Normal resolution is handled by the current ResolverNode. Resolution that involves closures (upvalues) is done by the Resolver (since it will potentially involve many ResolverNodes)

Implementations§

source§

impl Resolver

source

pub fn begin_scope(&mut self)

Calls this function on the current ResolverNode

source

pub fn end_scope(&mut self) -> usize

Calls this function on the current ResolverNode

source

pub fn is_global(&mut self) -> bool

Calls this function on the current ResolverNode

source

pub fn mark_initialized(&mut self)

Calls this function on the current ResolverNode

source

pub fn declare_variable(&mut self, x: String) -> bool

Calls this function on the current ResolverNode

source

pub fn resolve_local(&mut self, x: &str) -> Option<Option<usize>>

Calls this function on the current ResolverNode

source

pub fn resolve_upvalue(&mut self, name: &str) -> Option<usize>

Calls Resolver::recursive_resolve to handle the flattening of upvalues

Returns the index of the UpValue in the upvalues Vec

source

pub fn push(&mut self, fn_type: FunctionType)

Push a new ResolverNode for the new function scope

source

pub fn pop(&mut self) -> Vec<UpValue>

Remove the latest ResolverNode and return the UpValues resolved in that scope

source

pub fn new() -> Resolver

Trait Implementations§

source§

impl Clone for Resolver

source§

fn clone(&self) -> Resolver

Returns a copy of the value. Read more
1.0.0 · source§

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

Performs copy-assignment from source. Read more
source§

impl Debug for Resolver

source§

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

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

impl Default for Resolver

source§

fn default() -> Self

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

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§

default unsafe fn clone_to_uninit(&self, dst: *mut T)

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

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

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> ToOwned for T
where T: Clone,

§

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>,

§

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>,

§

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