@glimmer/runtime
Version:
Minimal runtime needed to render Glimmer templates
48 lines • 1.8 kB
TypeScript
import { Option, RuntimeHeap, RuntimeProgram, RuntimeOp } from '@glimmer/interfaces';
import VM from './append';
import { MachineRegister } from '@glimmer/vm';
export interface LowLevelRegisters {
[MachineRegister.pc]: number;
[MachineRegister.ra]: number;
[MachineRegister.sp]: number;
[MachineRegister.fp]: number;
}
export declare function initializeRegisters(): LowLevelRegisters;
export declare function initializeRegistersWithSP(sp: number): LowLevelRegisters;
export declare function initializeRegistersWithPC(pc: number): LowLevelRegisters;
export interface Stack {
push(value: unknown): void;
get(position: number): number;
pop<T>(): T;
}
export interface Externs {
debugBefore(opcode: RuntimeOp): unknown;
debugAfter(state: unknown): void;
}
export default class LowLevelVM {
stack: Stack;
heap: RuntimeHeap;
program: RuntimeProgram;
externs: Externs;
readonly registers: LowLevelRegisters;
currentOpSize: number;
constructor(stack: Stack, heap: RuntimeHeap, program: RuntimeProgram, externs: Externs, registers: LowLevelRegisters);
fetchRegister(register: MachineRegister): number;
loadRegister(register: MachineRegister, value: number): void;
setPc(pc: number): void;
pushFrame(): void;
popFrame(): void;
pushSmallFrame(): void;
popSmallFrame(): void;
goto(offset: number): void;
target(offset: number): number;
call(handle: number): void;
returnTo(offset: number): void;
return(): void;
nextStatement(): Option<RuntimeOp>;
evaluateOuter(opcode: RuntimeOp, vm: VM): void;
evaluateInner(opcode: RuntimeOp, vm: VM): void;
evaluateMachine(opcode: RuntimeOp): void;
evaluateSyscall(opcode: RuntimeOp, vm: VM): void;
}
//# sourceMappingURL=low-level.d.ts.map