import { Ast } from "./ast"; export interface Slot { readonly name: string; getIndex(): number; finalizedAst(): Ast; } export interface BaseExpr { load?: Slot[]; exprs?: Expr[]; } export interface LoadExpr extends BaseExpr { type: "load"; } export interface ConstantExpr extends BaseExpr { type: "constant"; value: any; } export interface ValueExpr extends BaseExpr { type: "value"; slot: Slot; } export interface IteratorExpr extends BaseExpr { type: "iterator"; name: string; } export interface StateExpr extends BaseExpr { type: "state"; } export interface IfExpr extends BaseExpr { type: "if"; } export interface CallExpr extends BaseExpr { type: "call"; func: string; } export interface ListExpr extends BaseExpr { type: "list"; } export interface InputExpr extends BaseExpr { type: "input"; } export interface ListComprehensionExpr extends BaseExpr { type: "listComprehension"; iterator: string; } export declare type Expr = InputExpr | LoadExpr | ConstantExpr | ValueExpr | IteratorExpr | StateExpr | IfExpr | CallExpr | ListExpr | ListComprehensionExpr; interface SerializedExpr { load: number[]; exprs: SerializedExpr[]; [key: string]: any; } export declare function serializeExpr(expr: Expr): SerializedExpr; export {};