Skip to main content

PirOperation

Enum PirOperation 

Source
#[non_exhaustive]
pub enum PirOperation {
Show 13 variants LexicalRead { name: LexicalName, }, LexicalWrite { name: LexicalName, }, StashRead { symbol: SymbolName, }, StashWrite { symbol: SymbolName, }, Modify { name: LexicalName, op: String, }, StashModify { symbol: SymbolName, op: String, }, Assign, Call { callee: PirCallee, arg_count: usize, }, MethodCall { receiver: PirReceiver, method: PirMethod, arg_count: usize, }, Branch { condition: Option<PirId>, }, Loop { condition: Option<PirId>, }, Return, DynamicBoundary { kind: PirDynamicBoundaryKind, reason: String, },
}
Expand description

A modeled PIR operation.

Operations model data access, calls, and control flow without executing Perl. Families that the current HIR substrate cannot prove (for example branch and loop conditions, or explicit returns) are part of the contract but are populated by later lowering passes; receipts make the gap visible.

Variants (Non-exhaustive)§

This enum is marked as non-exhaustive
Non-exhaustive enums could have additional variants added in future. Therefore, when matching against variants of non-exhaustive enums, an extra wildcard arm must be added to account for any future variants.
§

LexicalRead

Read a lexical variable.

Fields

§name: LexicalName

The lexical being read.

§

LexicalWrite

Write (declare or assign) a lexical variable.

Fields

§name: LexicalName

The lexical being written.

§

StashRead

Read a package/stash symbol.

Fields

§symbol: SymbolName

The symbol being read.

§

StashWrite

Write a package/stash symbol.

Fields

§symbol: SymbolName

The symbol being written.

§

Modify

Compound read-modify-write on a lexical variable (+=, -=, ++, etc.).

The place is evaluated exactly once. The compound operator is preserved in op so downstream analyses can distinguish += from ++ without re-parsing.

Fields

§name: LexicalName

The lexical variable being modified.

§op: String

The compound operator text ("+=", "-=", "*=", "++", "--", etc.).

§

StashModify

Compound read-modify-write on a package/stash symbol.

Mirrors Modify for package slots.

Fields

§symbol: SymbolName

The package symbol being modified.

§op: String

The compound operator text.

§

Assign

An assignment expression.

§

Call

A subroutine or function call.

Fields

§callee: PirCallee

The callee.

§arg_count: usize

Number of parsed arguments.

§

MethodCall

A method call.

Fields

§receiver: PirReceiver

The receiver.

§method: PirMethod

The method.

§arg_count: usize

Number of parsed arguments.

§

Branch

A branch (condition is populated by later control-flow lowering).

Fields

§condition: Option<PirId>

PIR node computing the branch condition, when modeled.

§

Loop

A loop (condition is populated by later control-flow lowering).

Fields

§condition: Option<PirId>

PIR node computing the loop condition, when modeled.

§

Return

A return from the enclosing subroutine.

§

DynamicBoundary

A preserved dynamic boundary.

Fields

§kind: PirDynamicBoundaryKind

Boundary category.

§reason: String

Short human-readable reason for the boundary.

Implementations§

Source§

impl PirOperation

Source

pub const ALL_OPERATION_NAMES: &[&'static str]

All operation-family names PIR v0 models.

Receipts and status generators should use this list instead of keeping a separate copy of the current PIR operation surface.

Source

pub const fn name(&self) -> &'static str

Stable operation-family name used in receipts and snapshots.

Trait Implementations§

Source§

impl Clone for PirOperation

Source§

fn clone(&self) -> PirOperation

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 PirOperation

Source§

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

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

impl Eq for PirOperation

Source§

impl PartialEq for PirOperation

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · Source§

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

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl StructuralPartialEq for PirOperation

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