@tsukiroku/tiny
Version:
Tiny interpreter
69 lines (68 loc) • 1.97 kB
TypeScript
import * as Tiny from '../../index';
export declare type LangObject = NumberObject | StringObject | BooleanObject | ArrayObject | ObjectObject | FunctionObject | BuiltinFunction | ReturnValue | ErrorObject | Null | Undefined | null;
export declare const enum ObjectKind {
NUMBER = 300,
STRING = 301,
BOOLEAN = 302,
ARRAY = 303,
OBJECT = 304,
FUNCTION = 305,
BUILTIN = 306,
RETURN_VALUE = 307,
ERROR = 308,
NULL = 309,
UNDEFINED = 310,
DECORATOR = 311
}
export declare const objectStringify: (obj: LangObject, strW?: boolean) => string;
export declare const objectKindStringify: (kind: ObjectKind) => string;
export interface NumberObject {
value: number;
kind: ObjectKind.NUMBER;
}
export interface BooleanObject {
value: boolean;
kind: ObjectKind.BOOLEAN;
}
export interface StringObject {
value: string;
kind: ObjectKind.STRING;
}
export interface ArrayObject {
value: Array<LangObject>;
kind: ObjectKind.ARRAY;
}
export interface ObjectObject {
pairs: Map<NumberObject | StringObject, LangObject>;
kind: ObjectKind.OBJECT;
}
export interface FunctionObject {
function: Tiny.Expression;
parameters: Array<Tiny.Expression>;
decorator?: ObjectObject;
body: Tiny.Expression;
enviroment: Tiny.Enviroment;
option: Tiny.Options;
kind: ObjectKind.FUNCTION;
}
export interface BuiltinFunction {
func: BuiltinFunctionType;
kind: ObjectKind.BUILTIN;
}
export declare type BuiltinFunctionType = (parameters: Array<LangObject>, enviroment: Tiny.Enviroment, evaluator: Tiny.Evaluator, position: Tiny.Position) => LangObject;
export interface ReturnValue {
value: LangObject;
kind: ObjectKind.RETURN_VALUE;
}
export interface ErrorObject {
message: string;
kind: ObjectKind.ERROR;
line: number;
column: number;
}
export interface Null {
kind: ObjectKind.NULL;
}
export interface Undefined {
kind: ObjectKind.UNDEFINED;
}