Skip to content

Instantly share code, notes, and snippets.

@nchanged
Created October 1, 2019 13:33
Show Gist options
  • Save nchanged/e7088a3c2206e3619284593b89846998 to your computer and use it in GitHub Desktop.
Save nchanged/e7088a3c2206e3619284593b89846998 to your computer and use it in GitHub Desktop.
function calcExpression(left, operator, right) {
let result;
switch (operator) {
case '+':
result = +new Big(left).plus(right);
break;
case '-':
result = +new Big(left).minus(right);
break;
case '*':
result = +new Big(left).times(right);
break;
case '/':
result = +new Big(left).div(right);
break;
case '%':
result = +new Big(left).mod(right);
break;
case '>>':
result = left >> right;
break;
case '>>>':
result = left >>> right;
break;
case '<<':
result = left << right;
break;
case '|':
result = left | right;
break;
case '&':
result = left & right;
break;
case '^':
result = left ^ right;
break;
case '**':
let i = right;
while (--i) {
result = result || left;
result = +new Big(result).times(left);
}
break;
default:
}
return result;
}
function computeNode(node: ASTNode) {
let left;
let right;
if (node.left.value) left = node.left.value;
else if (node.left.type === 'BinaryExpression') {
left = computeNode(node.left);
}
if (node.right.value) right = node.right.value;
else if (node.right.type === 'BinaryExpression') {
right = computeNode(node.right);
}
return calcExpression(left, node.operator, right);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment