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 {};
