@marioslab/ulang-vm
Version:
Virtual machine & assembler for recreational programming like it's 1992.
141 lines (140 loc) • 4.34 kB
TypeScript
export declare function loadUlang(): Promise<any>;
export declare let getInt8: (ptr: number) => number;
export declare let getInt16: (ptr: number) => number;
export declare let getUint32: (ptr: number) => number;
export declare let setUint32: (ptr: any, val: any) => void;
export declare let getInt32: (ptr: number) => number;
export declare let getFloat32: (ptr: number) => number;
export declare let argbToRgba: (argb: number, rgba: number, numPixels: number) => void;
export declare let addFunction: (func: any, descriptor: string) => number;
export declare let UTF8ArrayToString: (heap: Uint8Array, ptr: number) => string;
export declare let HEAPU8: () => Uint8Array;
export declare function createWrappers(): void;
export interface UlangString {
ptr: number;
data(): number;
length(): number;
toString(): string;
}
export declare function ptrToUlangString(stringPtr: number): UlangString;
export interface UlangSpan {
ptr: number;
data(): UlangString;
startLine(): number;
endLine(): number;
}
export declare function ptrToUlangSpan(spanPtr: number): UlangSpan;
export interface UlangLine {
ptr: number;
data(): UlangString;
lineNumber(): number;
}
export declare function ptrToUlangLine(linePtr: number): UlangLine;
export interface UlangFile {
ptr: number;
fileName(): UlangString;
data(): UlangString;
lines(): UlangLine[];
free(): void;
}
export declare function ptrToUlangFile(filePtr: number): UlangFile;
export interface UlangError {
ptr: number;
file(): UlangFile;
span(): UlangSpan;
message(): UlangString;
isSet(): boolean;
print(): void;
free(): void;
}
export declare function ptrToUlangError(errorPtr: number): UlangError;
export declare enum UlangLabelTarget {
UL_LT_UNINITIALIZED = 0,
UL_LT_CODE = 1,
UL_LT_DATA = 2,
UL_LT_RESERVED_DATA = 3
}
export interface UlangLabel {
ptr: number;
label(): UlangSpan;
target(): UlangLabelTarget;
address(): number;
}
export declare function ptrToUlangLabel(labelPtr: number): UlangLabel;
export declare enum UlangValueType {
UL_INTEGER = 0,
UL_FLOAT = 1
}
export interface UlangConstant {
ptr: number;
type(): UlangValueType;
name(): UlangSpan;
i(): number;
f(): number;
}
export declare function ptrToUlangConstant(labelPtr: number): UlangConstant;
export interface UlangProgram {
ptr: number;
code(): DataView;
data(): DataView;
reservedBytes(): number;
labels(): UlangLabel[];
constants(): UlangConstant[];
file(): UlangFile;
addressToLine(): number[];
free(): void;
}
export declare function ptrToUlangProgram(progPtr: number): UlangProgram;
export interface UlangValue {
ptr: number;
b(): number;
s(): number;
i(): number;
ui(): number;
f(): number;
}
export declare function ptrToUlangValue(valPtr: any): UlangValue;
export interface UlangVm {
ptr: number;
registers(): UlangValue[];
memory(): DataView;
memoryPtr(): number;
error(): UlangError;
program(): UlangProgram;
setSyscall(num: number, callPtr: number): void;
step(): boolean;
stepN(n: number): boolean;
stepNBP(n: number, bpPtr: number, numBp: number): number;
print(): void;
popInt(): number;
popUint(): number;
popFloat(): number;
pushInt(val: number): any;
pushUint(val: number): any;
pushFloat(val: number): any;
free(): void;
}
export declare function ptrToUlangVm(vmPtr: number): UlangVm;
declare enum UlangType {
UL_TYPE_FILE = 0,
UL_TYPE_ERROR = 1,
UL_TYPE_PROGRAM = 2,
UL_TYPE_VM = 3
}
export declare function alloc(numBytes: number): number;
export declare function allocType(type: UlangType): number;
export declare function free(ptr: number): void;
export declare function printMemory(): void;
export declare function newFile(sourceName: string, sourceData: string): UlangFile;
export declare function newError(): UlangError;
export declare function newProgram(): UlangProgram;
export interface UlangCompilationResult {
error: UlangError;
file: UlangFile;
program: UlangProgram;
free(): void;
}
export declare function compile(source: any): UlangCompilationResult;
export declare function newVm(program: UlangProgram): UlangVm;
export declare const UL_VM_MEMORY_SIZE: number;
export {};