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

47 lines
1.0 KiB
JavaScript

import resolve, { toString, traverse } from '../resolve.js';
import constant from './constant.js';
const unaryOperator = {
create({operator, right}) {
return {
parseType: 'unaryOperator',
operator,
right,
};
},
resolve(fn, node, scope, context){
const {result: rightNode} = resolve(fn, node.right, scope, context);
if (rightNode.parseType !== 'number'){
return {
result: unaryOperator.create({
operator: node.operator,
right: rightNode,
}),
context,
};
}
let right = rightNode.value;
let result;
switch(node.operator){
case '-': result = -right; break;
case '+': result = +right; break;
}
return {
result: constant.create({
value: result,
parseType: typeof result,
}),
context,
};
},
toString(node){
return `${node.operator}${toString(node.right)}`;
},
traverse(node, fn){
fn(node);
traverse(node.right, fn);
},
};
export default unaryOperator;