import BinarySerializer from '../BinarySerializer'; import ILineState from '../LineState/ILineState'; import ExprType from '../Linker/ExprType'; import PatchType from '../Linker/PatchType'; import Logger from '../Logger'; import EvaluatorContext from './EvaluatorContext'; import LineContext from './LineContext'; import Node from './Node'; import Token from './Token'; declare type EvaluatorRule = (state: ILineState, op: Node, label: Node | null, ctx: EvaluatorContext) => void | Promise; declare type ConstExprRule = (op: Node, ctx: EvaluatorContext) => number | string; declare type PredefineRule = (op: Node, ctx: EvaluatorContext) => number | string; declare type DirectiveRule = (ctx: EvaluatorContext, args: string[]) => void; export default class Evaluator { logger: Logger; keywordRules: { [key: string]: EvaluatorRule; }; evalRules: { [key: number]: EvaluatorRule; }; directiveRules: { [key: string]: DirectiveRule; }; functionRules: { [key: string]: ConstExprRule; }; constExprRules: { [key: string]: ConstExprRule; }; predefineRules: { [key: string]: PredefineRule; }; linkExprBinaryRules: { [key: string]: ExprType; }; linkExprUnaryRules: { [key: string]: ExprType; }; constructor(logger: Logger); evaluate(ctx: EvaluatorContext): Promise; evaluateLine(state: ILineState, line: LineContext, ctx: EvaluatorContext): Promise; calcConstExprOrPatch(type: PatchType, byteOffset: number, op: Node, expected: 'number', ctx: EvaluatorContext): number; calcConstExprOrPatch(type: PatchType, byteOffset: number, op: Node, expected: 'string', ctx: EvaluatorContext): string; calcConstExprOrPatch(type: PatchType, byteOffset: number, op: Node, expected: 'either', ctx: EvaluatorContext): number | string; calcConstExpr(op: Node, expected: 'number', ctx: EvaluatorContext): number; calcConstExpr(op: Node, expected: 'string', ctx: EvaluatorContext): string; calcConstExpr(op: Node, expected: 'either', ctx: EvaluatorContext): number | string; isExpr(op: Node): boolean; isConstExpr(op: Node, ctx: EvaluatorContext): boolean; getConstExprType(op: Node): 'number' | 'string'; buildLinkExpr(bs: BinarySerializer, op: Node, ctx: EvaluatorContext): number[]; defineLabel(state: ILineState, label: Node, ctx: EvaluatorContext): void; applySourceReplace(source: string, regex: RegExp, value: string): string; isFeatureEnabled(feature: string, token: Token | undefined, ctx: EvaluatorContext): boolean; error(msg: string, token: Token | undefined, ctx: EvaluatorContext): void; warn(msg: string, token: Token | undefined, ctx: EvaluatorContext): void; } export {};