UNPKG

@akala/core

Version:
48 lines 1.97 kB
import { ExpressionType } from "../expression-type.js"; import { MemberExpression } from "../member-expression.js"; import { NewExpression } from "../new-expression.js"; import { ExpressionVisitor } from "./expression-visitor.js"; import { ExpressionComparer } from "./expression-comparer.js"; /** * Simplifies an expression. * @param {any} expression - The expression to simplify. * @returns {any} The simplified expression. */ export class ExpressionSimplifyer extends ExpressionVisitor { source; /** * Creates a new instance with the provided source expression. * @param source - The original expression to simplify */ constructor(source) { super(); this.source = source; // const identifier = new OriginIdentifier(); // identifier.visit(source); // identifier.origins; this.contexttualSource = source; } contexttualSource; visitMember(arg0) { if (arg0.source == undefined) { if (this.contexttualSource.type == ExpressionType.MemberExpression) return new MemberExpression(this.contexttualSource, arg0.member, arg0.optional); if (this.contexttualSource.type == ExpressionType.NewExpression) { const sub = this.contexttualSource.init.find(e => ExpressionComparer.equals(e.member, arg0.member)); if (sub) return sub.source; } return new MemberExpression(this.contexttualSource, arg0.member, arg0.optional); } return super.visitMember(arg0); } visitNew(expression) { // var members: MemberExpression<any, any, any>[] = null; const members = this.visitArray(expression.init, (exp, i) => { this.contexttualSource = this.source; }); if (members !== expression.init) { return new NewExpression(...members); } return expression; } } //# sourceMappingURL=expression-simplifyer.js.map