Class VirtualMachine
Executes PL/0 P-Code instructions on a stack-based virtual machine.
public sealed class VirtualMachine
- Inheritance
-
VirtualMachine
- Inherited Members
Fields
DivisionByZeroExitCode
Exit code for division-by-zero.
private const int DivisionByZeroExitCode = 206
Field Value
InputEofExitCode
Exit code for end-of-input during read.
private const int InputEofExitCode = 98
Field Value
InputFormatExitCode
Exit code for input format errors.
private const int InputFormatExitCode = 97
Field Value
RuntimeErrorExitCode
Exit code for generic runtime errors.
private const int RuntimeErrorExitCode = 99
Field Value
_culture
Zielsprache für Fehlertexte; wird in Run() gesetzt.
private CultureInfo _culture
Field Value
_rm
ResourceManager für lokalisierte Fehlertexte; wird in Run() gesetzt.
private ResourceManager _rm
Field Value
Methods
BinaryOp(ref int, int[], IList<VmDiagnostic>, Func<int, int, int>)
Executes a binary operation on the stack.
private bool BinaryOp(ref int t, int[] stack, IList<VmDiagnostic> diagnostics, Func<int, int, int> op)
Parameters
tintTop-of-stack pointer.
stackint[]Stack storage.
diagnosticsIList<VmDiagnostic>Diagnostics collection.
opFunc<int, int, int>Operation to execute.
Returns
- bool
True if execution should continue.
BuildResult(int[], int, IReadOnlyList<VmDiagnostic>)
Builds an execution result with a safe stack snapshot.
private static VmExecutionResult BuildResult(int[] stack, int top, IReadOnlyList<VmDiagnostic> diagnostics)
Parameters
stackint[]Stack storage.
topintTop-of-stack pointer.
diagnosticsIReadOnlyList<VmDiagnostic>Diagnostics collection.
Returns
- VmExecutionResult
The execution result.
ExecuteOpr(int, ref int, ref int, ref int, int[], IPl0Io, VirtualMachineOptions, IList<VmDiagnostic>)
Executes an OPR instruction.
private bool ExecuteOpr(int code, ref int p, ref int b, ref int t, int[] stack, IPl0Io io, VirtualMachineOptions options, IList<VmDiagnostic> diagnostics)
Parameters
codeintOPR subcode.
pintProgram counter.
bintBase pointer.
tintTop-of-stack pointer.
stackint[]Stack storage.
ioIPl0IoI/O implementation.
optionsVirtualMachineOptionsVM options.
diagnosticsIList<VmDiagnostic>Diagnostics collection.
Returns
- bool
True if execution should continue.
IsValidStackIndex(int, int)
Validates a stack index against bounds.
private static bool IsValidStackIndex(int index, int stackSize)
Parameters
Returns
- bool
True if the index is within bounds.
ResolveBase(int, int, int[], IList<VmDiagnostic>)
Resolves the base pointer for a given lexical level.
private int ResolveBase(int level, int currentBase, int[] stack, IList<VmDiagnostic> diagnostics)
Parameters
levelintLexical level to resolve.
currentBaseintCurrent base pointer.
stackint[]Stack storage.
diagnosticsIList<VmDiagnostic>Diagnostics collection.
Returns
- int
Resolved base address.
Run(IReadOnlyList<Instruction>, IPl0Io?, VirtualMachineOptions?)
Runs a program and returns the execution result.
public VmExecutionResult Run(IReadOnlyList<Instruction> program, IPl0Io? io = null, VirtualMachineOptions? options = null)
Parameters
programIReadOnlyList<Instruction>P-Code instructions to execute.
ioIPl0IoOptional I/O implementation.
optionsVirtualMachineOptionsOptional VM options.
Returns
- VmExecutionResult
The execution result.
TryPeek(int, IList<VmDiagnostic>)
Ensures a stack index is valid for reading.
private bool TryPeek(int index, IList<VmDiagnostic> diagnostics)
Parameters
indexintStack index.
diagnosticsIList<VmDiagnostic>Diagnostics collection.
Returns
- bool
True if the index is valid.
TryPush(ref int, int, IList<VmDiagnostic>)
Attempts to push a value onto the stack.
private bool TryPush(ref int t, int stackSize, IList<VmDiagnostic> diagnostics)
Parameters
tintTop-of-stack pointer.
stackSizeintMaximum stack size.
diagnosticsIList<VmDiagnostic>Diagnostics collection.
Returns
- bool
True if push is possible.