Files
DiceCloud/app/imports/parser/parseTree/IfNode.js
2020-09-10 11:38:28 +02:00

36 lines
1.0 KiB
JavaScript

import ParseNode from '/imports/parser/parseTree/ParseNode.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()}`
}
compile(scope){
return this.resolve('compile', scope);
}
roll(scope){
return this.resolve('roll', scope);
}
reduce(scope){
return this.resolve('reduce', scope);
}
resolve(fn, scope){
let condition = this.condition[fn](scope);
if (condition.value){
let consequent = this.consequent[fn](scope);
consequent.inheritDetails([condition, this]);
return this.consequent[fn](scope);
} else {
let alternative = this.alternative[fn](scope);
alternative.inheritDetails([condition, this]);
return alternative;
}
}
}