import ParseNode from '/imports/parser/parseTree/ParseNode.js'; import ConstantNode from '/imports/parser/parseTree/ConstantNode.js'; export default class IfNode extends ParseNode { constructor({condition, consequent, alternative}){ super(...arguments); this.condition = condition; this.consequent = consequent; this.alternative = alternative; } toString(){ let {condition, consequent, alternative} = this; return `${condition.toString()} ? ${consequent.toString()} : ${alternative.toString()}` } resolve(fn, scope, context){ let condition = this.condition[fn](scope, context); if (condition instanceof ConstantNode){ if (condition.value){ return this.consequent[fn](scope, context); } else { return this.alternative[fn](scope, context); } } else { return new IfNode({ condition: condition, consequent: this.consequent, alternative: this.alternative, }); } } traverse(fn){ fn(this); this.condition.traverse(fn); this.consequent.traverse(fn); this.alternative.traverse(fn); } replaceChildren(fn){ this.condition = this.condition.replaceNodes(fn); this.consequent = this.consequent.replaceNodes(fn); this.alternative = this.alternative.replaceNodes(fn); } }