Boo.Lang.Compiler.Steps.ProcessMethodBodies.BindReferenceEquality C# (CSharp) Метод

BindReferenceEquality() приватный Метод

private BindReferenceEquality ( Boo.Lang.Compiler.Ast.BinaryExpression node, bool inequality ) : void
node Boo.Lang.Compiler.Ast.BinaryExpression
inequality bool
Результат void
        void BindReferenceEquality(BinaryExpression node, bool inequality)
        {
            if (BindNullableOperation(node))
            {
                return;
            }

            //BOO-1174: accept `booleanExpression is true|false`
            BoolLiteralExpression isBool = node.Right as BoolLiteralExpression;
            if (null != isBool)
            {
                if (GetExpressionType(node.Left) == TypeSystemServices.BoolType)
                {
                    Node replacement = (isBool.Value ^ inequality)
                                       ? node.Left
                                       : new UnaryExpression(UnaryOperatorType.LogicalNot, node.Left);
                    node.ParentNode.Replace(node, replacement);
                    Visit(replacement);
                    return;
                }
            }

            if (CheckIsNotValueType(node, node.Left) &&
                CheckIsNotValueType(node, node.Right))
            {
                BindExpressionType(node, TypeSystemServices.BoolType);
            }
            else
            {
                Error(node);
            }
        }

Same methods

ProcessMethodBodies::BindReferenceEquality ( Boo.Lang.Compiler.Ast.BinaryExpression node ) : void
ProcessMethodBodies