#[non_exhaustive]pub enum LowerError {
Show 25 variants
NotYetImplemented {
what: String,
},
LiteralOutOfRange {
payload: String,
target: PrimitiveType,
},
LiteralTypeMismatch {
kind: String,
ty: ResolvedType,
},
UnknownBinding(BindingId),
UnresolvedReference,
UnsupportedOperator {
op: String,
operand: PrimitiveType,
},
TypeMap(TypeMapError),
ZeroSizedLetBinding {
name: String,
ty: ResolvedType,
},
UnknownFunction(FunctionId),
UnresolvedFunctionCall {
path: Vec<String>,
},
MissingContext {
what: &'static str,
},
ExternalStructInst,
Layout(LayoutError),
FieldIndexOutOfRange {
struct_name: String,
field_count: usize,
field_idx: u32,
},
FieldAccessOnNonAggregate {
ty: ResolvedType,
},
UnknownStruct(StructId),
ExternalEnumInst,
UnknownEnum(EnumId),
UnknownVariant {
enum_name: String,
variant: String,
},
MissingSelfStruct,
UnknownMethod {
impl_id: ImplId,
method_idx: MethodIdx,
},
VirtualMethodCall,
UnknownVtable {
trait_id: TraitId,
target: ImplTargetKey,
},
UnknownVirtualMethodType {
trait_id: TraitId,
method_idx: MethodIdx,
},
UnsupportedVirtualReceiver {
ty: ResolvedType,
},
}Expand description
Errors produced by the expression-lowering helpers.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
NotYetImplemented
The expression variant or operand shape is in scope for the backend but not yet implemented in this phase.
LiteralOutOfRange
A numeric literal whose payload is incompatible with its
declared type — e.g. an I32-typed literal whose value is out
of range or carries a float-syntax payload. Semantic analysis
should catch these upstream; the variant exists so we never
silently emit a wrong constant.
Fields
target: PrimitiveTypeThe declared target primitive type.
LiteralTypeMismatch
A literal whose type doesn’t match its kind, e.g. a String
literal carrying a non-Primitive(String) ty.
Fields
ty: ResolvedTypeThe declared resolved type.
UnknownBinding(BindingId)
A reference / LetRef carries a BindingId that the caller’s
BindingMap does not know about. Indicates a lowering pass
failed to register the binding before walking expressions that
reference it.
UnresolvedReference
A reference’s ReferenceTarget is Unresolved. Means
ResolveReferencesPass did not run before the backend.
UnsupportedOperator
A binary or unary operator was applied to operand type(s) the
backend does not support — either a fundamentally invalid combo
(e.g. And on I32) or a deferred case (e.g. arithmetic on
String, which lives in Phase 2).
Fields
operand: PrimitiveTypeOperand primitive type at the offending site.
TypeMap(TypeMapError)
A type appearing on a parameter or let binding could not be
mapped to a wasm value type — typically because the lowering
for that type lives in a later phase.
ZeroSizedLetBinding
A let-binding inside a block has a unit/Never type that
can’t be assigned to a wasm local. Indicates an upstream
invariant violation.
Fields
ty: ResolvedTypeThe declared resolved type.
UnknownFunction(FunctionId)
A FunctionCall carries a FunctionId that the caller’s
FunctionMap does not know about. Indicates the module-
level lowering pass failed to register this function before
walking call sites.
UnresolvedFunctionCall
A FunctionCall carries function_id = None. Either the
resolution pass failed, or the call targets an external
(cross-module) function which won’t be supported until
Phase 4.
MissingContext
A lowering needs an LowerContext field that is not set —
typically the IrModule reference (for struct/enum lookups)
or the bump-allocator function index. Surfaced when an
aggregate lowering runs through a context built for the
expression-only test path.
ExternalStructInst
A StructInst carries struct_id = None, which means it
instantiates an external (cross-module) struct. External
references land in Phase 4.
Layout(LayoutError)
A struct’s layout could not be planned — see the wrapped
LayoutError for the underlying cause.
FieldIndexOutOfRange
A FieldAccess references a field index past the end of its
containing struct’s fields vector. Indicates an upstream
invariant violation.
Fields
FieldAccessOnNonAggregate
A FieldAccess’s object expression has a non-aggregate type
(e.g. a primitive). This means the type-checker accepted a
field access on something that has no fields.
Fields
ty: ResolvedTypeThe offending object’s resolved type.
UnknownStruct(StructId)
A StructInst was given a struct_id that the module’s
structs vector does not contain. Indicates corrupt IR.
ExternalEnumInst
An EnumInst carries enum_id = None, which means it
instantiates an external (cross-module) enum. External
references land in Phase 4.
UnknownEnum(EnumId)
An EnumInst was given an enum_id that the module’s
enums vector does not contain. Indicates corrupt IR.
UnknownVariant
An EnumInst references a variant that the resolved enum
definition does not contain. Indicates an upstream invariant
violation.
MissingSelfStruct
A SelfFieldRef was lowered without a LowerContext::self_struct_id
set. Means the function is not a method of any struct, but its
body uses self.field — an upstream invariant violation.
UnknownMethod
A MethodCall with DispatchKind::Static { impl_id } and
method_idx whose pair is not present in the module’s
MethodMap. Indicates the impl was never walked or the
indices are inconsistent.
Fields
VirtualMethodCall
A MethodCall with DispatchKind::Virtual { .. } was
encountered. Virtual dispatch lands in Phase 3.
UnknownVtable
A virtual MethodCall whose (trait_id, impl_target) pair
has no vtable registered. Indicates the module-level pre-walk
missed the impl, or the receiver type is one the layout
planner doesn’t recognise as a vtable target.
Fields
target: ImplTargetKeyThe impl-target key the lookup was keyed on.
UnknownVirtualMethodType
A virtual MethodCall whose (trait_id, method_idx) pair has
no call_indirect type-index registered. Indicates the module-
level pre-walk missed the trait method.
Fields
UnsupportedVirtualReceiver
A virtual MethodCall whose receiver type cannot be resolved
to an ImplTarget. Phase 3 supports concrete struct / enum
receivers; trait-object receivers stay rejected (semantic
analysis bans Trait as a value).
Fields
ty: ResolvedTypeThe offending receiver’s resolved type.
Trait Implementations§
Source§impl Debug for LowerError
impl Debug for LowerError
Source§impl Display for LowerError
impl Display for LowerError
Source§impl Error for LowerError
impl Error for LowerError
Source§fn source(&self) -> Option<&(dyn Error + 'static)>
fn source(&self) -> Option<&(dyn Error + 'static)>
1.0.0 · Source§fn description(&self) -> &str
fn description(&self) -> &str
use the Display impl or to_string()
Source§impl From<LayoutError> for LowerError
impl From<LayoutError> for LowerError
Source§fn from(source: LayoutError) -> Self
fn from(source: LayoutError) -> Self
Source§impl From<LowerError> for ModuleLowerError
impl From<LowerError> for ModuleLowerError
Source§fn from(source: LowerError) -> Self
fn from(source: LowerError) -> Self
Source§impl From<TypeMapError> for LowerError
impl From<TypeMapError> for LowerError
Source§fn from(source: TypeMapError) -> Self
fn from(source: TypeMapError) -> Self
Auto Trait Implementations§
impl Freeze for LowerError
impl RefUnwindSafe for LowerError
impl Send for LowerError
impl Sync for LowerError
impl Unpin for LowerError
impl UnsafeUnpin for LowerError
impl UnwindSafe for LowerError
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);