cairo_lang_semantic::substitution

Trait SemanticObject

Source
pub trait SemanticObject<TRewriter, Error>: Sized {
    // Required method
    fn default_rewrite(
        &mut self,
        rewriter: &mut TRewriter,
    ) -> Result<RewriteResult, Error>;
}

Required Methods§

Source

fn default_rewrite( &mut self, rewriter: &mut TRewriter, ) -> Result<RewriteResult, Error>

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl<'a, Error, TRewriter: HasDb<&'a dyn SemanticGroup> + SemanticRewriter<ConstValue, Error>> SemanticObject<TRewriter, Error> for ConstValueId

Source§

impl<'a, Error, TRewriter: HasDb<&'a dyn SemanticGroup> + SemanticRewriter<ImplLongId, Error>> SemanticObject<TRewriter, Error> for ImplId

Source§

impl<'a, Error, TRewriter: HasDb<&'a dyn SemanticGroup> + SemanticRewriter<TypeLongId, Error>> SemanticObject<TRewriter, Error> for TypeId

Source§

impl<'a, Error, TRewriter: HasDb<&'a dyn SemanticGroup> + SemanticRewriter<ImplVar, Error>> SemanticObject<TRewriter, Error> for ImplVarId

Source§

impl<'a, Error, TRewriter: HasDb<&'a dyn SemanticGroup> + SemanticRewriter<ConcreteFunctionWithBody, Error>> SemanticObject<TRewriter, Error> for ConcreteFunctionWithBodyId

Source§

impl<'a, Error, TRewriter: HasDb<&'a dyn SemanticGroup> + SemanticRewriter<FunctionLongId, Error>> SemanticObject<TRewriter, Error> for FunctionId

Source§

impl<'a, Error, TRewriter: HasDb<&'a dyn SemanticGroup> + SemanticRewriter<ConcreteImplLongId, Error>> SemanticObject<TRewriter, Error> for ConcreteImplId

Source§

impl<'a, Error, TRewriter: HasDb<&'a dyn SemanticGroup> + SemanticRewriter<GeneratedImplLongId, Error>> SemanticObject<TRewriter, Error> for GeneratedImplId

Source§

impl<'a, Error, TRewriter: HasDb<&'a dyn SemanticGroup> + SemanticRewriter<UninferredGeneratedImplLongId, Error>> SemanticObject<TRewriter, Error> for UninferredGeneratedImplId

Source§

impl<'a, Error, TRewriter: HasDb<&'a dyn SemanticGroup> + SemanticRewriter<ConcreteTraitConstantLongId, Error>> SemanticObject<TRewriter, Error> for ConcreteTraitConstantId

Source§

impl<'a, Error, TRewriter: HasDb<&'a dyn SemanticGroup> + SemanticRewriter<ConcreteTraitGenericFunctionLongId, Error>> SemanticObject<TRewriter, Error> for ConcreteTraitGenericFunctionId

Source§

impl<'a, Error, TRewriter: HasDb<&'a dyn SemanticGroup> + SemanticRewriter<ConcreteTraitImplLongId, Error>> SemanticObject<TRewriter, Error> for ConcreteTraitImplId

Source§

impl<'a, Error, TRewriter: HasDb<&'a dyn SemanticGroup> + SemanticRewriter<ConcreteTraitLongId, Error>> SemanticObject<TRewriter, Error> for ConcreteTraitId

Source§

impl<'a, Error, TRewriter: HasDb<&'a dyn SemanticGroup> + SemanticRewriter<ConcreteTraitTypeLongId, Error>> SemanticObject<TRewriter, Error> for ConcreteTraitTypeId

Source§

impl<'a, Error, TRewriter: HasDb<&'a dyn SemanticGroup> + SemanticRewriter<ConcreteEnumLongId, Error>> SemanticObject<TRewriter, Error> for ConcreteEnumId

Source§

impl<'a, Error, TRewriter: HasDb<&'a dyn SemanticGroup> + SemanticRewriter<ConcreteExternTypeLongId, Error>> SemanticObject<TRewriter, Error> for ConcreteExternTypeId

Source§

impl<'a, Error, TRewriter: HasDb<&'a dyn SemanticGroup> + SemanticRewriter<ConcreteStructLongId, Error>> SemanticObject<TRewriter, Error> for ConcreteStructId

Source§

impl<T, Error> SemanticObject<T, Error> for StatementContinue

Source§

impl<T, Error> SemanticObject<T, Error> for ValueSelectorArm

Source§

impl<T: SemanticRewriter<VarId, Error> + SemanticRewriter<TypeId, Error>, Error> SemanticObject<T, Error> for ExprVar

Source§

impl<T: SemanticRewriter<InferenceId, Error> + SemanticRewriter<ConcreteTraitId, Error>, Error> SemanticObject<T, Error> for ImplVar

Source§

impl<T: SemanticRewriter<Condition, Error> + SemanticRewriter<ExprId, Error> + SemanticRewriter<Option<ExprId>, Error> + SemanticRewriter<TypeId, Error>, Error> SemanticObject<T, Error> for ExprIf

Source§

impl<T: SemanticRewriter<Condition, Error> + SemanticRewriter<ExprId, Error> + SemanticRewriter<TypeId, Error>, Error> SemanticObject<T, Error> for ExprWhile

Source§

impl<T: SemanticRewriter<ExprVarMemberPath, Error> + SemanticRewriter<ExprId, Error> + SemanticRewriter<TypeId, Error>, Error> SemanticObject<T, Error> for ExprAssignment

Source§

impl<T: SemanticRewriter<ExprVarMemberPath, Error> + SemanticRewriter<ExprId, Error>, Error> SemanticObject<T, Error> for ExprFunctionCallArg

Source§

impl<T: SemanticRewriter<FixedSizeArrayItems, Error> + SemanticRewriter<TypeId, Error>, Error> SemanticObject<T, Error> for ExprFixedSizeArray

Source§

impl<T: SemanticRewriter<GenericFunctionId, Error> + SemanticRewriter<Vec<GenericArgumentId>, Error>, Error> SemanticObject<T, Error> for ConcreteFunction

Source§

impl<T: SemanticRewriter<GenericFunctionWithBodyId, Error> + SemanticRewriter<Vec<GenericArgumentId>, Error>, Error> SemanticObject<T, Error> for ConcreteFunctionWithBody

Source§

impl<T: SemanticRewriter<ConcreteTypeId, Error> + SemanticRewriter<Vec<TypeId>, Error> + SemanticRewriter<TypeId, Error> + SemanticRewriter<GenericParamId, Error> + SemanticRewriter<TypeVar, Error> + SemanticRewriter<FunctionId, Error> + SemanticRewriter<ConstValueId, Error> + SemanticRewriter<ImplTypeId, Error> + SemanticRewriter<TraitTypeId, Error> + SemanticRewriter<ClosureTypeLongId, Error>, Error> SemanticObject<T, Error> for TypeLongId

Source§

impl<T: SemanticRewriter<Option<ExprId>, Error>, Error> SemanticObject<T, Error> for StatementBreak

Source§

impl<T: SemanticRewriter<Option<ExprId>, Error>, Error> SemanticObject<T, Error> for StatementReturn

Source§

impl<T: SemanticRewriter<LookupItemId, Error> + SemanticRewriter<ImplDefId, Error> + SemanticRewriter<ImplAliasId, Error> + SemanticRewriter<GenericParamId, Error>, Error> SemanticObject<T, Error> for InferenceId

Source§

impl<T: SemanticRewriter<usize, Error>, Error> SemanticObject<T, Error> for LocalConstVarId

Source§

impl<T: SemanticRewriter<usize, Error>, Error> SemanticObject<T, Error> for LocalImplVarId

Source§

impl<T: SemanticRewriter<usize, Error>, Error> SemanticObject<T, Error> for LocalTypeVarId

Source§

impl<T: SemanticRewriter<LocalTypeVarId, Error> + SemanticRewriter<LocalConstVarId, Error> + SemanticRewriter<LocalImplVarId, Error>, Error> SemanticObject<T, Error> for InferenceVar

Source§

impl<T: SemanticRewriter<ExprLiteral, Error>, Error> SemanticObject<T, Error> for PatternLiteral

Source§

impl<T: SemanticRewriter<ExprStringLiteral, Error>, Error> SemanticObject<T, Error> for PatternStringLiteral

Source§

impl<T: SemanticRewriter<ExprTuple, Error> + SemanticRewriter<ExprSnapshot, Error> + SemanticRewriter<ExprDesnap, Error> + SemanticRewriter<ExprAssignment, Error> + SemanticRewriter<ExprLogicalOperator, Error> + SemanticRewriter<ExprBlock, Error> + SemanticRewriter<ExprLoop, Error> + SemanticRewriter<ExprWhile, Error> + SemanticRewriter<ExprFor, Error> + SemanticRewriter<ExprFunctionCall, Error> + SemanticRewriter<ExprMatch, Error> + SemanticRewriter<ExprIf, Error> + SemanticRewriter<ExprVar, Error> + SemanticRewriter<ExprLiteral, Error> + SemanticRewriter<ExprStringLiteral, Error> + SemanticRewriter<ExprMemberAccess, Error> + SemanticRewriter<ExprStructCtor, Error> + SemanticRewriter<ExprEnumVariantCtor, Error> + SemanticRewriter<ExprPropagateError, Error> + SemanticRewriter<ExprConstant, Error> + SemanticRewriter<ExprFixedSizeArray, Error> + SemanticRewriter<ExprClosure, Error> + SemanticRewriter<ExprMissing, Error>, Error> SemanticObject<T, Error> for Expr

Source§

impl<T: SemanticRewriter<ExprVar, Error> + SemanticRewriter<Box<ExprVarMemberPath>, Error> + SemanticRewriter<MemberId, Error> + SemanticRewriter<ConcreteStructId, Error> + SemanticRewriter<TypeId, Error>, Error> SemanticObject<T, Error> for ExprVarMemberPath

Source§

impl<T: SemanticRewriter<StatementExpr, Error> + SemanticRewriter<StatementLet, Error> + SemanticRewriter<StatementContinue, Error> + SemanticRewriter<StatementReturn, Error> + SemanticRewriter<StatementBreak, Error>, Error> SemanticObject<T, Error> for Statement

Source§

impl<T: SemanticRewriter<PatternLiteral, Error> + SemanticRewriter<PatternStringLiteral, Error> + SemanticRewriter<PatternVariable, Error> + SemanticRewriter<PatternStruct, Error> + SemanticRewriter<PatternTuple, Error> + SemanticRewriter<PatternFixedSizeArray, Error> + SemanticRewriter<PatternEnumVariant, Error> + SemanticRewriter<PatternOtherwise, Error> + SemanticRewriter<PatternMissing, Error>, Error> SemanticObject<T, Error> for Pattern

Source§

impl<T: SemanticRewriter<ConstValueId, Error> + SemanticRewriter<TypeId, Error>, Error> SemanticObject<T, Error> for ExprConstant

Source§

impl<T: SemanticRewriter<ConcreteVariant, Error> + SemanticRewriter<Option<PatternId>, Error> + SemanticRewriter<TypeId, Error>, Error> SemanticObject<T, Error> for PatternEnumVariant

Source§

impl<T: SemanticRewriter<ConcreteVariant, Error> + SemanticRewriter<ValueSelectorArm, Error>, Error> SemanticObject<T, Error> for MatchArmSelector

Source§

impl<T: SemanticRewriter<ConcreteVariant, Error> + SemanticRewriter<ExprId, Error> + SemanticRewriter<TypeId, Error>, Error> SemanticObject<T, Error> for ExprEnumVariantCtor

Source§

impl<T: SemanticRewriter<ConcreteFunction, Error>, Error> SemanticObject<T, Error> for FunctionLongId

Source§

impl<T: SemanticRewriter<FunctionId, Error> + SemanticRewriter<ExprVarMemberPath, Error> + SemanticRewriter<ExprId, Error> + SemanticRewriter<PatternId, Error> + SemanticRewriter<TypeId, Error>, Error> SemanticObject<T, Error> for ExprFor

Source§

impl<T: SemanticRewriter<FunctionId, Error> + SemanticRewriter<Vec<ExprFunctionCallArg>, Error> + SemanticRewriter<Option<ExprId>, Error> + SemanticRewriter<TypeId, Error>, Error> SemanticObject<T, Error> for ExprFunctionCall

Source§

impl<T: SemanticRewriter<GenericParamType, Error> + SemanticRewriter<GenericParamConst, Error> + SemanticRewriter<GenericParamImpl, Error>, Error> SemanticObject<T, Error> for GenericParam

Source§

impl<T: SemanticRewriter<ConcreteImplId, Error> + SemanticRewriter<ImplFunctionBodyId, Error>, Error> SemanticObject<T, Error> for ImplGenericFunctionWithBodyId

Source§

impl<T: SemanticRewriter<ConcreteImplId, Error> + SemanticRewriter<GenericParamId, Error> + SemanticRewriter<ImplVarId, Error> + SemanticRewriter<ImplImplId, Error> + SemanticRewriter<TraitImplId, Error> + SemanticRewriter<GeneratedImplId, Error>, Error> SemanticObject<T, Error> for ImplLongId

Source§

impl<T: SemanticRewriter<ImplId, Error> + SemanticRewriter<TraitConstantId, Error>, Error> SemanticObject<T, Error> for ImplConstantId

Source§

impl<T: SemanticRewriter<ImplId, Error> + SemanticRewriter<TraitFunctionId, Error>, Error> SemanticObject<T, Error> for ImplGenericFunctionId

Source§

impl<T: SemanticRewriter<ImplId, Error> + SemanticRewriter<TraitImplId, Error>, Error> SemanticObject<T, Error> for ImplImplId

Source§

impl<T: SemanticRewriter<ImplId, Error> + SemanticRewriter<TraitTypeId, Error>, Error> SemanticObject<T, Error> for ImplTypeId

Source§

impl<T: SemanticRewriter<ConcreteTraitId, Error> + SemanticRewriter<Vec<GenericArgumentId>, Error> + SemanticRewriter<GeneratedImplItems, Error>, Error> SemanticObject<T, Error> for GeneratedImplLongId

Source§

impl<T: SemanticRewriter<ConcreteTraitId, Error> + SemanticRewriter<Vec<GenericParam>, Error> + SemanticRewriter<GeneratedImplItems, Error>, Error> SemanticObject<T, Error> for UninferredGeneratedImplLongId

Source§

impl<T: SemanticRewriter<ConcreteTraitId, Error> + SemanticRewriter<Vec<ImplId>, Error> + SemanticRewriter<ImplId, Error> + SemanticRewriter<TypeId, Error>, Error> SemanticObject<T, Error> for Ambiguity

Source§

impl<T: SemanticRewriter<ConcreteTraitId, Error> + SemanticRewriter<TraitConstantId, Error>, Error> SemanticObject<T, Error> for ConcreteTraitConstantLongId

Source§

impl<T: SemanticRewriter<ConcreteTraitId, Error> + SemanticRewriter<TraitFunctionId, Error>, Error> SemanticObject<T, Error> for ConcreteTraitGenericFunctionLongId

Source§

impl<T: SemanticRewriter<ConcreteTraitId, Error> + SemanticRewriter<TraitImplId, Error>, Error> SemanticObject<T, Error> for ConcreteTraitImplLongId

Source§

impl<T: SemanticRewriter<ConcreteTraitId, Error> + SemanticRewriter<TraitTypeId, Error>, Error> SemanticObject<T, Error> for ConcreteTraitTypeLongId

Source§

impl<T: SemanticRewriter<LocalVariable, Error>, Error> SemanticObject<T, Error> for PatternVariable

Source§

impl<T: SemanticRewriter<ParamId, Error> + SemanticRewriter<TypeId, Error>, Error> SemanticObject<T, Error> for Parameter

Source§

impl<T: SemanticRewriter<ConcreteEnumId, Error> + SemanticRewriter<VariantId, Error> + SemanticRewriter<TypeId, Error>, Error> SemanticObject<T, Error> for ConcreteVariant

Source§

impl<T: SemanticRewriter<ConcreteStructId, Error> + SemanticRewriter<ConcreteEnumId, Error> + SemanticRewriter<ConcreteExternTypeId, Error>, Error> SemanticObject<T, Error> for ConcreteTypeId

Source§

impl<T: SemanticRewriter<ConcreteStructId, Error> + SemanticRewriter<Vec<(Member, PatternId)>, Error> + SemanticRewriter<TypeId, Error>, Error> SemanticObject<T, Error> for PatternStruct

Source§

impl<T: SemanticRewriter<ConcreteStructId, Error> + SemanticRewriter<Vec<(MemberId, ExprId)>, Error> + SemanticRewriter<Option<ExprId>, Error> + SemanticRewriter<TypeId, Error>, Error> SemanticObject<T, Error> for ExprStructCtor

Source§

impl<T: SemanticRewriter<TypeId, Error> + SemanticRewriter<ConstValueId, Error> + SemanticRewriter<ImplId, Error>, Error> SemanticObject<T, Error> for GenericArgumentId

Source§

impl<T: SemanticRewriter<TypeId, Error> + SemanticRewriter<Vec<ConstValue>, Error> + SemanticRewriter<ConcreteVariant, Error> + SemanticRewriter<Box<ConstValue>, Error> + SemanticRewriter<ImplConstantId, Error> + SemanticRewriter<TraitConstantId, Error> + SemanticRewriter<ConstVar, Error>, Error> SemanticObject<T, Error> for ConstValue

Source§

impl<T: SemanticRewriter<TypeId, Error>, Error> SemanticObject<T, Error> for ExprLiteral

Source§

impl<T: SemanticRewriter<TypeId, Error>, Error> SemanticObject<T, Error> for ExprMissing

Source§

impl<T: SemanticRewriter<TypeId, Error>, Error> SemanticObject<T, Error> for ExprStringLiteral

Source§

impl<T: SemanticRewriter<TypeId, Error>, Error> SemanticObject<T, Error> for PatternMissing

Source§

impl<T: SemanticRewriter<TypeId, Error>, Error> SemanticObject<T, Error> for PatternOtherwise

Source§

impl<T: SemanticRewriter<Vec<Parameter>, Error> + SemanticRewriter<TypeId, Error> + SemanticRewriter<Vec<TypeId>, Error>, Error> SemanticObject<T, Error> for Signature

Source§

impl<T: SemanticRewriter<Vec<TypeId>, Error> + SemanticRewriter<TypeId, Error> + SemanticRewriter<Maybe<FunctionId>, Error>, Error> SemanticObject<T, Error> for ClosureTypeLongId

Source§

impl<T: SemanticRewriter<Vec<ExprId>, Error> + SemanticRewriter<TypeId, Error>, Error> SemanticObject<T, Error> for ExprTuple

Source§

impl<T: SemanticRewriter<Vec<ExprId>, Error> + SemanticRewriter<ExprId, Error> + SemanticRewriter<ConstValueId, Error>, Error> SemanticObject<T, Error> for FixedSizeArrayItems

Source§

impl<T: SemanticRewriter<Vec<PatternId>, Error> + SemanticRewriter<TypeId, Error>, Error> SemanticObject<T, Error> for PatternFixedSizeArray

Source§

impl<T: SemanticRewriter<Vec<PatternId>, Error> + SemanticRewriter<TypeId, Error>, Error> SemanticObject<T, Error> for PatternTuple

Source§

impl<T: SemanticRewriter<Vec<PatternId>, Error> + SemanticRewriter<ExprId, Error>, Error> SemanticObject<T, Error> for MatchArm

Source§

impl<T: SemanticRewriter<Vec<StatementId>, Error> + SemanticRewriter<Option<ExprId>, Error> + SemanticRewriter<TypeId, Error>, Error> SemanticObject<T, Error> for ExprBlock

Source§

impl<T: SemanticRewriter<EnumId, Error> + SemanticRewriter<Vec<GenericArgumentId>, Error>, Error> SemanticObject<T, Error> for ConcreteEnumLongId

Source§

impl<T: SemanticRewriter<ExternTypeId, Error> + SemanticRewriter<Vec<GenericArgumentId>, Error>, Error> SemanticObject<T, Error> for ConcreteExternTypeLongId

Source§

impl<T: SemanticRewriter<FreeFunctionId, Error> + SemanticRewriter<ImplGenericFunctionWithBodyId, Error> + SemanticRewriter<ConcreteTraitGenericFunctionId, Error>, Error> SemanticObject<T, Error> for GenericFunctionWithBodyId

Source§

impl<T: SemanticRewriter<FreeFunctionId, Error> + SemanticRewriter<ExternFunctionId, Error> + SemanticRewriter<ImplGenericFunctionId, Error> + SemanticRewriter<ConcreteTraitGenericFunctionId, Error>, Error> SemanticObject<T, Error> for GenericFunctionId

Source§

impl<T: SemanticRewriter<GenericParamId, Error> + SemanticRewriter<TypeId, Error>, Error> SemanticObject<T, Error> for GenericParamConst

Source§

impl<T: SemanticRewriter<GenericParamId, Error> + SemanticRewriter<Maybe<ConcreteTraitId>, Error>, Error> SemanticObject<T, Error> for GenericParamImpl

Source§

impl<T: SemanticRewriter<GenericParamId, Error>, Error> SemanticObject<T, Error> for GenericParamType

Source§

impl<T: SemanticRewriter<ImplDefId, Error> + SemanticRewriter<Vec<GenericArgumentId>, Error>, Error> SemanticObject<T, Error> for ConcreteImplLongId

Source§

impl<T: SemanticRewriter<ImplDefId, Error> + SemanticRewriter<ImplAliasId, Error> + SemanticRewriter<GenericParamId, Error> + SemanticRewriter<ImplImplId, Error> + SemanticRewriter<UninferredGeneratedImplId, Error>, Error> SemanticObject<T, Error> for UninferredImpl

Source§

impl<T: SemanticRewriter<ImplFunctionId, Error> + SemanticRewriter<TraitFunctionId, Error>, Error> SemanticObject<T, Error> for ImplFunctionBodyId

Source§

impl<T: SemanticRewriter<LocalVarId, Error> + SemanticRewriter<TypeId, Error>, Error> SemanticObject<T, Error> for LocalVariable

Source§

impl<T: SemanticRewriter<MemberId, Error> + SemanticRewriter<TypeId, Error>, Error> SemanticObject<T, Error> for Member

Source§

impl<T: SemanticRewriter<StructId, Error> + SemanticRewriter<Vec<GenericArgumentId>, Error>, Error> SemanticObject<T, Error> for ConcreteStructLongId

Source§

impl<T: SemanticRewriter<TraitId, Error> + SemanticRewriter<Vec<GenericArgumentId>, Error>, Error> SemanticObject<T, Error> for ConcreteTraitLongId

Source§

impl<T: SemanticRewriter<OrderedHashMap<TraitTypeId, TypeId>, Error>, Error> SemanticObject<T, Error> for GeneratedImplItems

Source§

impl<T: SemanticRewriter<ExprId, Error> + SemanticRewriter<ConcreteVariant, Error>, Error> SemanticObject<T, Error> for ExprPropagateError

Source§

impl<T: SemanticRewriter<ExprId, Error> + SemanticRewriter<ConcreteStructId, Error> + SemanticRewriter<MemberId, Error> + SemanticRewriter<TypeId, Error> + SemanticRewriter<Option<ExprVarMemberPath>, Error>, Error> SemanticObject<T, Error> for ExprMemberAccess

Source§

impl<T: SemanticRewriter<ExprId, Error> + SemanticRewriter<TypeId, Error>, Error> SemanticObject<T, Error> for ExprDesnap

Source§

impl<T: SemanticRewriter<ExprId, Error> + SemanticRewriter<TypeId, Error>, Error> SemanticObject<T, Error> for ExprLogicalOperator

Source§

impl<T: SemanticRewriter<ExprId, Error> + SemanticRewriter<TypeId, Error>, Error> SemanticObject<T, Error> for ExprLoop

Source§

impl<T: SemanticRewriter<ExprId, Error> + SemanticRewriter<TypeId, Error>, Error> SemanticObject<T, Error> for ExprSnapshot

Source§

impl<T: SemanticRewriter<ExprId, Error> + SemanticRewriter<Vec<MatchArm>, Error> + SemanticRewriter<TypeId, Error>, Error> SemanticObject<T, Error> for ExprMatch

Source§

impl<T: SemanticRewriter<ExprId, Error> + SemanticRewriter<Vec<ParamId>, Error> + SemanticRewriter<TypeId, Error>, Error> SemanticObject<T, Error> for ExprClosure

Source§

impl<T: SemanticRewriter<ExprId, Error> + SemanticRewriter<Vec<PatternId>, Error>, Error> SemanticObject<T, Error> for Condition

Source§

impl<T: SemanticRewriter<ExprId, Error>, Error> SemanticObject<T, Error> for StatementExpr

Source§

impl<T: SemanticRewriter<PatternId, Error> + SemanticRewriter<ExprId, Error>, Error> SemanticObject<T, Error> for StatementLet