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

Function checkBinaryLikeExpressionWorker

test/fixtures/snapshot/typescript.js:79020–79369  ·  view source on GitHub ↗
(left, operatorToken, right, leftType, rightType, errorNode)

Source from the content-addressed store, hash-verified

79018 return checkBinaryLikeExpressionWorker(left, operatorToken, right, leftType, rightType, errorNode);
79019 }
79020 function checkBinaryLikeExpressionWorker(left, operatorToken, right, leftType, rightType, errorNode) {
79021 var operator = operatorToken.kind;
79022 switch (operator) {
79023 case 41 /* SyntaxKind.AsteriskToken */:
79024 case 42 /* SyntaxKind.AsteriskAsteriskToken */:
79025 case 66 /* SyntaxKind.AsteriskEqualsToken */:
79026 case 67 /* SyntaxKind.AsteriskAsteriskEqualsToken */:
79027 case 43 /* SyntaxKind.SlashToken */:
79028 case 68 /* SyntaxKind.SlashEqualsToken */:
79029 case 44 /* SyntaxKind.PercentToken */:
79030 case 69 /* SyntaxKind.PercentEqualsToken */:
79031 case 40 /* SyntaxKind.MinusToken */:
79032 case 65 /* SyntaxKind.MinusEqualsToken */:
79033 case 47 /* SyntaxKind.LessThanLessThanToken */:
79034 case 70 /* SyntaxKind.LessThanLessThanEqualsToken */:
79035 case 48 /* SyntaxKind.GreaterThanGreaterThanToken */:
79036 case 71 /* SyntaxKind.GreaterThanGreaterThanEqualsToken */:
79037 case 49 /* SyntaxKind.GreaterThanGreaterThanGreaterThanToken */:
79038 case 72 /* SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken */:
79039 case 51 /* SyntaxKind.BarToken */:
79040 case 74 /* SyntaxKind.BarEqualsToken */:
79041 case 52 /* SyntaxKind.CaretToken */:
79042 case 78 /* SyntaxKind.CaretEqualsToken */:
79043 case 50 /* SyntaxKind.AmpersandToken */:
79044 case 73 /* SyntaxKind.AmpersandEqualsToken */:
79045 if (leftType === silentNeverType || rightType === silentNeverType) {
79046 return silentNeverType;
79047 }
79048 leftType = checkNonNullType(leftType, left);
79049 rightType = checkNonNullType(rightType, right);
79050 var suggestedOperator = void 0;
79051 // if a user tries to apply a bitwise operator to 2 boolean operands
79052 // try and return them a helpful suggestion
79053 if ((leftType.flags & 528 /* TypeFlags.BooleanLike */) &&
79054 (rightType.flags & 528 /* TypeFlags.BooleanLike */) &&
79055 (suggestedOperator = getSuggestedBooleanOperator(operatorToken.kind)) !== undefined) {
79056 error(errorNode || operatorToken, ts.Diagnostics.The_0_operator_is_not_allowed_for_boolean_types_Consider_using_1_instead, ts.tokenToString(operatorToken.kind), ts.tokenToString(suggestedOperator));
79057 return numberType;
79058 }
79059 else {
79060 // otherwise just check each operand separately and report errors as normal
79061 var leftOk = checkArithmeticOperandType(left, leftType, ts.Diagnostics.The_left_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type, /*isAwaitValid*/ true);
79062 var rightOk = checkArithmeticOperandType(right, rightType, ts.Diagnostics.The_right_hand_side_of_an_arithmetic_operation_must_be_of_type_any_number_bigint_or_an_enum_type, /*isAwaitValid*/ true);
79063 var resultType_1;
79064 // If both are any or unknown, allow operation; assume it will resolve to number
79065 if ((isTypeAssignableToKind(leftType, 3 /* TypeFlags.AnyOrUnknown */) && isTypeAssignableToKind(rightType, 3 /* TypeFlags.AnyOrUnknown */)) ||
79066 // Or, if neither could be bigint, implicit coercion results in a number result
79067 !(maybeTypeOfKind(leftType, 2112 /* TypeFlags.BigIntLike */) || maybeTypeOfKind(rightType, 2112 /* TypeFlags.BigIntLike */))) {
79068 resultType_1 = numberType;
79069 }
79070 // At least one is assignable to bigint, so check that both are
79071 else if (bothAreBigIntLike(leftType, rightType)) {
79072 switch (operator) {
79073 case 49 /* SyntaxKind.GreaterThanGreaterThanGreaterThanToken */:
79074 case 72 /* SyntaxKind.GreaterThanGreaterThanGreaterThanEqualsToken */:
79075 reportOperatorError();
79076 break;
79077 case 42 /* SyntaxKind.AsteriskAsteriskToken */:

Callers 2

onExitFunction · 0.85

Calls 15

checkNonNullTypeFunction · 0.85
isTypeAssignableToKindFunction · 0.85
maybeTypeOfKindFunction · 0.85
bothAreBigIntLikeFunction · 0.85
reportOperatorErrorFunction · 0.85
checkAssignmentOperatorFunction · 0.85
isTypeAnyFunction · 0.85
isErrorTypeFunction · 0.85
getBaseTypeOfLiteralTypeFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…