Table of Contents

Class StObj

Namespace
ICSharpCode.Decompiler.IL
Assembly
ICSharpCode.Decompiler.dll

Indirect store (store to ref/pointer). Evaluates to the value that was stored (when using type byte/short: evaluates to the truncated value, sign/zero extended back to I4 based on type.GetSign())

public sealed class StObj : ILInstruction
Inheritance
StObj
Inherited Members

Constructors

StObj(ILInstruction, ILInstruction, IType)

public StObj(ILInstruction target, ILInstruction value, IType type)

Parameters

target ILInstruction
value ILInstruction
type IType

Fields

TargetSlot

public static readonly SlotInfo TargetSlot

Field Value

SlotInfo

ValueSlot

public static readonly SlotInfo ValueSlot

Field Value

SlotInfo

Properties

DirectFlags

Gets the flags for this instruction only, without considering the child instructions.

public override InstructionFlags DirectFlags { get; }

Property Value

InstructionFlags

IsVolatile

Gets/Sets whether the memory access is volatile.

public bool IsVolatile { get; set; }

Property Value

bool

ResultType

Gets the stack type of the value produced by this instruction.

public override StackType ResultType { get; }

Property Value

StackType

Target

public ILInstruction Target { get; set; }

Property Value

ILInstruction

Type

Returns the type operand.

public IType Type { get; set; }

Property Value

IType

UnalignedPrefix

Returns the alignment specified by the 'unaligned' prefix; or 0 if there was no 'unaligned' prefix.

public byte UnalignedPrefix { get; set; }

Property Value

byte

Value

public ILInstruction Value { get; set; }

Property Value

ILInstruction

Methods

AcceptVisitor(ILVisitor)

Calls the Visit*-method on the visitor corresponding to the concrete type of this instruction.

public override void AcceptVisitor(ILVisitor visitor)

Parameters

visitor ILVisitor

AcceptVisitor<T>(ILVisitor<T>)

Calls the Visit*-method on the visitor corresponding to the concrete type of this instruction.

public override T AcceptVisitor<T>(ILVisitor<T> visitor)

Parameters

visitor ILVisitor<T>

Returns

T

Type Parameters

T

AcceptVisitor<C, T>(ILVisitor<C, T>, C)

Calls the Visit*-method on the visitor corresponding to the concrete type of this instruction.

public override T AcceptVisitor<C, T>(ILVisitor<C, T> visitor, C context)

Parameters

visitor ILVisitor<C, T>
context C

Returns

T

Type Parameters

C
T

CanInlineIntoTargetSlot(ILInstruction)

For a store to a field or array element, C# will only throw NullReferenceException/IndexOfBoundsException after the value-to-be-stored has been computed. This means a LdFlda/LdElema used as target for StObj must have DelayExceptions==true to allow a translation to C# without changing the program semantics. See https://github.com/icsharpcode/ILSpy/issues/2050

public bool CanInlineIntoTargetSlot(ILInstruction inst)

Parameters

inst ILInstruction

Returns

bool

Clone()

public override sealed ILInstruction Clone()

Returns

ILInstruction

ComputeFlags()

protected override InstructionFlags ComputeFlags()

Returns

InstructionFlags

GetChild(int)

protected override sealed ILInstruction GetChild(int index)

Parameters

index int

Returns

ILInstruction

GetChildCount()

protected override sealed int GetChildCount()

Returns

int

GetChildSlot(int)

protected override sealed SlotInfo GetChildSlot(int index)

Parameters

index int

Returns

SlotInfo

PerformMatch(ILInstruction?, ref Match)

protected override bool PerformMatch(ILInstruction? other, ref Match match)

Parameters

other ILInstruction
match Match

Returns

bool

SetChild(int, ILInstruction)

protected override sealed void SetChild(int index, ILInstruction value)

Parameters

index int
value ILInstruction

WriteTo(ITextOutput, ILAstWritingOptions)

Writes the ILAst to the text output.

public override void WriteTo(ITextOutput output, ILAstWritingOptions options)

Parameters

output ITextOutput
options ILAstWritingOptions