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

Function createCheckBinaryExpression

test/fixtures/snapshot/typescript.js:78885–78991  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

78883 return (target.flags & 98304 /* TypeFlags.Nullable */) !== 0 || isTypeComparableTo(source, target);
78884 }
78885 function createCheckBinaryExpression() {
78886 var trampoline = ts.createBinaryExpressionTrampoline(onEnter, onLeft, onOperator, onRight, onExit, foldState);
78887 return function (node, checkMode) {
78888 var result = trampoline(node, checkMode);
78889 ts.Debug.assertIsDefined(result);
78890 return result;
78891 };
78892 function onEnter(node, state, checkMode) {
78893 if (state) {
78894 state.stackIndex++;
78895 state.skip = false;
78896 setLeftType(state, /*type*/ undefined);
78897 setLastResult(state, /*type*/ undefined);
78898 }
78899 else {
78900 state = {
78901 checkMode: checkMode,
78902 skip: false,
78903 stackIndex: 0,
78904 typeStack: [undefined, undefined],
78905 };
78906 }
78907 if (ts.isInJSFile(node) && ts.getAssignedExpandoInitializer(node)) {
78908 state.skip = true;
78909 setLastResult(state, checkExpression(node.right, checkMode));
78910 return state;
78911 }
78912 checkGrammarNullishCoalesceWithLogicalExpression(node);
78913 var operator = node.operatorToken.kind;
78914 if (operator === 63 /* SyntaxKind.EqualsToken */ && (node.left.kind === 205 /* SyntaxKind.ObjectLiteralExpression */ || node.left.kind === 204 /* SyntaxKind.ArrayLiteralExpression */)) {
78915 state.skip = true;
78916 setLastResult(state, checkDestructuringAssignment(node.left, checkExpression(node.right, checkMode), checkMode, node.right.kind === 108 /* SyntaxKind.ThisKeyword */));
78917 return state;
78918 }
78919 return state;
78920 }
78921 function onLeft(left, state, _node) {
78922 if (!state.skip) {
78923 return maybeCheckExpression(state, left);
78924 }
78925 }
78926 function onOperator(operatorToken, state, node) {
78927 if (!state.skip) {
78928 var leftType = getLastResult(state);
78929 ts.Debug.assertIsDefined(leftType);
78930 setLeftType(state, leftType);
78931 setLastResult(state, /*type*/ undefined);
78932 var operator = operatorToken.kind;
78933 if (operator === 55 /* SyntaxKind.AmpersandAmpersandToken */ || operator === 56 /* SyntaxKind.BarBarToken */ || operator === 60 /* SyntaxKind.QuestionQuestionToken */) {
78934 if (operator === 55 /* SyntaxKind.AmpersandAmpersandToken */) {
78935 var parent = ts.walkUpParenthesizedExpressions(node.parent);
78936 checkTestingKnownTruthyCallableOrAwaitableType(node.left, ts.isIfStatement(parent) ? parent.thenStatement : undefined);
78937 }
78938 checkTruthinessOfType(leftType, node.left);
78939 }
78940 }
78941 }
78942 function onRight(right, state, _node) {

Callers 1

createTypeCheckerFunction · 0.85

Calls 1

trampolineFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…