MCPcopy Index your code
hub / github.com/nodejs/node / evaluate

Function evaluate

test/fixtures/snapshot/typescript.js:84749–84816  ·  view source on GitHub ↗
(expr)

Source from the content-addressed store, hash-verified

84747 }
84748 return value;
84749 function evaluate(expr) {
84750 switch (expr.kind) {
84751 case 219 /* SyntaxKind.PrefixUnaryExpression */:
84752 var value_2 = evaluate(expr.operand);
84753 if (typeof value_2 === "number") {
84754 switch (expr.operator) {
84755 case 39 /* SyntaxKind.PlusToken */: return value_2;
84756 case 40 /* SyntaxKind.MinusToken */: return -value_2;
84757 case 54 /* SyntaxKind.TildeToken */: return ~value_2;
84758 }
84759 }
84760 break;
84761 case 221 /* SyntaxKind.BinaryExpression */:
84762 var left = evaluate(expr.left);
84763 var right = evaluate(expr.right);
84764 if (typeof left === "number" && typeof right === "number") {
84765 switch (expr.operatorToken.kind) {
84766 case 51 /* SyntaxKind.BarToken */: return left | right;
84767 case 50 /* SyntaxKind.AmpersandToken */: return left & right;
84768 case 48 /* SyntaxKind.GreaterThanGreaterThanToken */: return left >> right;
84769 case 49 /* SyntaxKind.GreaterThanGreaterThanGreaterThanToken */: return left >>> right;
84770 case 47 /* SyntaxKind.LessThanLessThanToken */: return left << right;
84771 case 52 /* SyntaxKind.CaretToken */: return left ^ right;
84772 case 41 /* SyntaxKind.AsteriskToken */: return left * right;
84773 case 43 /* SyntaxKind.SlashToken */: return left / right;
84774 case 39 /* SyntaxKind.PlusToken */: return left + right;
84775 case 40 /* SyntaxKind.MinusToken */: return left - right;
84776 case 44 /* SyntaxKind.PercentToken */: return left % right;
84777 case 42 /* SyntaxKind.AsteriskAsteriskToken */: return Math.pow(left, right);
84778 }
84779 }
84780 else if (typeof left === "string" && typeof right === "string" && expr.operatorToken.kind === 39 /* SyntaxKind.PlusToken */) {
84781 return left + right;
84782 }
84783 break;
84784 case 10 /* SyntaxKind.StringLiteral */:
84785 case 14 /* SyntaxKind.NoSubstitutionTemplateLiteral */:
84786 return expr.text;
84787 case 8 /* SyntaxKind.NumericLiteral */:
84788 checkGrammarNumericLiteral(expr);
84789 return +expr.text;
84790 case 212 /* SyntaxKind.ParenthesizedExpression */:
84791 return evaluate(expr.expression);
84792 case 79 /* SyntaxKind.Identifier */:
84793 var identifier = expr;
84794 if (ts.isInfinityOrNaNString(identifier.escapedText)) {
84795 return +(identifier.escapedText);
84796 }
84797 return ts.nodeIsMissing(expr) ? 0 : evaluateEnumMember(expr, getSymbolOfNode(member.parent), identifier.escapedText);
84798 case 207 /* SyntaxKind.ElementAccessExpression */:
84799 case 206 /* SyntaxKind.PropertyAccessExpression */:
84800 if (isConstantMemberAccess(expr)) {
84801 var type = getTypeOfExpression(expr.expression);
84802 if (type.symbol && type.symbol.flags & 384 /* SymbolFlags.Enum */) {
84803 var name = void 0;
84804 if (expr.kind === 206 /* SyntaxKind.PropertyAccessExpression */) {
84805 name = expr.name.escapedText;
84806 }

Callers 2

computeConstantValueFunction · 0.70
createDynamicModuleFunction · 0.50

Calls 5

evaluateEnumMemberFunction · 0.85
getSymbolOfNodeFunction · 0.85
isConstantMemberAccessFunction · 0.85
getTypeOfExpressionFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…