import ParseNode from '/imports/parser/parseTree/ParseNode.js'; import ConstantNode from '/imports/parser/parseTree/ConstantNode.js'; export default class NotOperatorNode extends ParseNode { constructor({right}) { super(...arguments); this.right = right; } resolve(fn, scope, context){ let rightNode = this.right[fn](scope, context); if (!(rightNode instanceof ConstantNode)){ return new NotOperatorNode({ right: rightNode, }); } let right = rightNode.value; let result = !right; return new ConstantNode({ value: result, type: typeof result, }); } toString(){ let {right} = this; return `!${right.toString()}`; } traverse(fn){ fn(this); this.right.traverse(fn); } replaceChildren(fn){ this.right = this.right.replaceNodes(fn); } }