Files
DiceCloud/app/imports/parser/parseTree/if.js

45 lines
1.1 KiB
JavaScript

import resolve, { traverse, toString } from '../resolve';
const ifNode = {
create({condition, consequent, alternative}){
return {
parseType: 'if',
condition,
consequent,
alternative,
};
},
toString(node){
let {condition, consequent, alternative} = node;
return `${toString(condition)} ? ${toString(consequent)} : ${toString(alternative)}`
},
resolve(fn, node, scope, context){
let {result: condition} = resolve(fn, node.condition, scope, context);
if (condition.parseType === 'constant'){
if (condition.value){
return resolve(fn, node.consequent, scope, context);
} else {
return resolve(fn, node.alternative, scope, context);
}
} else {
return {
result: ifNode.create({
condition: condition,
consequent: node.consequent,
alternative: node.alternative,
}),
context,
};
}
},
traverse(node, fn){
fn(node);
traverse(node.condition, fn);
traverse(node.consequent, fn);
traverse(node.alternative, fn);
},
}
export default ifNode;