Skip to main content

ResolvedProgramView

Struct ResolvedProgramView 

Source
pub struct ResolvedProgramView {
    pub entry_items: Vec<ResolvedTopLevel>,
    pub modules: Vec<ResolvedModuleFns>,
    /* private fields */
}
Expand description

Canonical resolved-program view consumed by codegen.

Holds the entry-scope items (post-pipeline, post-NameResolve) plus each dep module’s resolved fn defs, with an FnId index so identity-keyed lookups don’t walk linearly.

Fields§

§entry_items: Vec<ResolvedTopLevel>

Entry-scope resolved items, exactly as the pipeline produced them. Includes FnDef, Module markers, and Passthrough variants (verify/decision/typedef nodes that haven’t been promoted to resolved form yet — see ResolvedTopLevel).

§modules: Vec<ResolvedModuleFns>

Per-dep-module resolved fn defs. Order matches the input Vec<ModuleInfo> so existing position-keyed consumers still work during migration.

Implementations§

Source§

impl ResolvedProgramView

Source

pub fn build( entry_items: Vec<ResolvedTopLevel>, modules: &[ModuleInfo], symbol_table: &SymbolTable, ) -> Self

Build the view from a pipeline-produced entry slice and the Vec<ModuleInfo> carrying dep modules’ AST fn defs. The caller has already run pipeline::run (or equivalent) and is passing through the canonical resolved_items — we do not re-resolve the entry side. Module fn defs are resolved here (the pipeline doesn’t walk them), pinning ResolveCtx.current_module to each module’s prefix so a dotted reference inside one module’s body resolves through that module’s import set first.

Source

pub fn entry_fns(&self) -> impl Iterator<Item = &ResolvedFnDef> + '_

Resolved entry-scope fn defs in source order — the same set CodegenContext.resolved_fn_defs projected today, just reached through the canonical view.

Source

pub fn module_fns( &self, prefix: &str, ) -> impl Iterator<Item = &ResolvedFnDef> + '_

Resolved fn defs from one dep module, in source order. Returns an empty iterator when no module with that prefix is present — callers that need an existence check should use Self::module instead.

Source

pub fn module(&self, prefix: &str) -> Option<&ResolvedModuleFns>

Whole module slice (prefix + resolved fns) for callsites that need the prefix alongside.

Source

pub fn fn_by_id(&self, id: FnId) -> Option<&ResolvedFnDef>

FnId-keyed lookup. Returns the resolved fn def regardless of scope — identity-sensitive consumers (proof emitter, inliner, monomorph) reach this rather than walking entry + modules manually.

Source

pub fn fn_by_name(&self, name: &str) -> Option<&ResolvedFnDef>

First fn (entry first, then dep modules in declaration order) whose source-level name matches. Stage 5+ of #232 uses this to bridge ad-hoc detectors that historically searched by string name (is_directly_recursive in dafny codegen) into the typed FnId-keyed ProgramShape. Returns None if no such fn exists in the resolved view.

Note: bare-name lookup is ambiguous when the same name lives in two dep modules. Entry-first ordering matches what the legacy string-name detectors already assumed.

Trait Implementations§

Source§

impl Clone for ResolvedProgramView

Source§

fn clone(&self) -> ResolvedProgramView

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 ResolvedProgramView

Source§

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

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

impl Default for ResolvedProgramView

Source§

fn default() -> ResolvedProgramView

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> 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.
Source§

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

Source§

fn vzip(self) -> V