ParseBook

Struct ParseBook 

Source
pub struct ParseBook {
    pub fun_defs: IndexMap<Name, Definition>,
    pub imp_defs: IndexMap<Name, Definition>,
    pub hvm_defs: HvmDefinitions,
    pub adts: Adts,
    pub ctrs: Constructors,
    pub import_ctx: ImportCtx,
    pub source: Name,
}
Expand description

Intermediate representation of a program.

Fields§

§fun_defs: IndexMap<Name, Definition>

The functional function definitions.

§imp_defs: IndexMap<Name, Definition>

The imperative function definitions.

§hvm_defs: HvmDefinitions

HVM native function definitions.

§adts: Adts

The algebraic datatypes defined by the program

§ctrs: Constructors

To which type does each constructor belong to.

§import_ctx: ImportCtx

Imported packages to be loaded in the program

§source: Name

File path that the book was loaded from.

Implementations§

Source§

impl ParseBook

Source

pub fn builtins() -> Self

Source§

impl ParseBook

Source

pub fn contains_def(&self, name: &Name) -> bool

Source

pub fn contains_builtin_def(&self, name: &Name) -> Option<bool>

Source§

impl ParseBook

Source§

impl ParseBook

Source

pub fn load_imports( self, loader: impl PackageLoader, diag_config: DiagnosticsConfig, ) -> Result<Book, Diagnostics>

Loads and applies imports recursively to a ParseBook, transforming definitions and ADTs to a canonical name, and adding use binds so that names are accessible by their alias.

§Details

The process involves:

  1. Loading imports recursively using the provided loader.
  2. Transforming definitions and ADTs with naming transformations.
  3. Adding binds for aliases and old names in their respective definitions.
  4. Converting the ParseBook into its functional form.
  5. Perform any necessary post-processing.
Source§

impl ParseBook

Helper functions

Source

pub fn top_level_names(&self) -> impl Iterator<Item = &Name>

Trait Implementations§

Source§

impl Clone for ParseBook

Source§

fn clone(&self) -> ParseBook

Returns a duplicate 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 ParseBook

Source§

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

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

impl Default for ParseBook

Source§

fn default() -> ParseBook

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§

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, 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, T> Place<'t, T> for T

Source§

fn place(loaned: LoanedMut<'t, T>, place: &'t mut T)

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 = 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.