@ibyar/expressions
Version:
Aurora expression, an template expression and evaluation, An 100% spec compliant ES2022 JavaScript toolchain,
39 lines • 1.18 kB
JavaScript
import { expressionTypes } from '../api/deserialize/type-store.js';
;
class AbortException extends Error {
}
export class ExpressionVisitor {
getType(node) {
return node.constructor.type;
}
visit(node, visitorCallback) {
const control = {
abort() {
throw new AbortException('terminate');
}
};
const visitNode = (expression) => {
visitorCallback(expression, this.getType(expression), control);
this.visitExpressionNode(expression, visitNode);
};
try {
visitorCallback(node, this.getType(node), control);
this.visitExpressionNode(node, visitNode);
}
catch (abort) {
if (!(abort instanceof AbortException)) {
throw abort;
}
}
}
visitExpressionNode(node, visitNode) {
const classType = expressionTypes.get(this.getType(node));
const visit = classType.visit;
if (!visit) {
return;
}
visit(node, visitNode);
}
}
export const expressionVisitor = new ExpressionVisitor();
//# sourceMappingURL=visitor.js.map