| File: System\Linq\Expressions\Interpreter\StackOperations.cs | Web Access |
| Project: src\runtime\src\libraries\System.Linq.Expressions\src\System.Linq.Expressions.csproj (System.Linq.Expressions) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Collections.Generic; using System.Globalization; namespace System.Linq.Expressions.Interpreter { internal sealed class LoadObjectInstruction : Instruction { private readonly object? _value; internal LoadObjectInstruction(object? value) { _value = value; } public override int ProducedStack => 1; public override string InstructionName => "LoadObject"; public override int Run(InterpretedFrame frame) { frame.Data[frame.StackIndex++] = _value; return 1; } public override string ToString() => "LoadObject(" + (_value ?? "null") + ")"; } internal sealed class LoadCachedObjectInstruction : Instruction { private readonly uint _index; internal LoadCachedObjectInstruction(uint index) { _index = index; } public override int ProducedStack => 1; public override string InstructionName => "LoadCachedObject"; public override int Run(InterpretedFrame frame) { frame.Data[frame.StackIndex++] = frame.Interpreter._objects![_index]; return 1; } public override string ToDebugString(int instructionIndex, object? cookie, Func<int, int> labelIndexer, IReadOnlyList<object>? objects) => string.Create(CultureInfo.InvariantCulture, $"LoadCached({_index}: {objects![(int)_index]})"); public override string ToString() => "LoadCached(" + _index + ")"; } internal sealed class PopInstruction : Instruction { internal static readonly PopInstruction Instance = new PopInstruction(); private PopInstruction() { } public override int ConsumedStack => 1; public override string InstructionName => "Pop"; public override int Run(InterpretedFrame frame) { frame.Pop(); return 1; } } internal sealed class DupInstruction : Instruction { internal static readonly DupInstruction Instance = new DupInstruction(); private DupInstruction() { } public override int ProducedStack => 1; public override string InstructionName => "Dup"; public override int Run(InterpretedFrame frame) { frame.Dup(); return 1; } } }