Files
2026-08-27 10:56:38 -06:00

9986 lines
385 KiB
C#

using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Diagnostics;
using System.Linq;
using Microsoft.Cci;
using Microsoft.CodeAnalysis.CSharp.Symbols;
using Microsoft.CodeAnalysis.PooledObjects;
using Microsoft.CodeAnalysis.Shared.Collections;
using Microsoft.CodeAnalysis.Symbols;
using Roslyn.Utilities;
namespace Microsoft.CodeAnalysis.CSharp;
internal sealed class OverloadResolution
{
internal static class BinopEasyOut
{
private const BinaryOperatorKind ERR = BinaryOperatorKind.Error;
private const BinaryOperatorKind OBJ = BinaryOperatorKind.Object;
private const BinaryOperatorKind STR = BinaryOperatorKind.String;
private const BinaryOperatorKind OSC = BinaryOperatorKind.ObjectAndString;
private const BinaryOperatorKind SOC = BinaryOperatorKind.StringAndObject;
private const BinaryOperatorKind INT = BinaryOperatorKind.Int;
private const BinaryOperatorKind UIN = BinaryOperatorKind.UInt;
private const BinaryOperatorKind LNG = BinaryOperatorKind.Long;
private const BinaryOperatorKind ULG = BinaryOperatorKind.ULong;
private const BinaryOperatorKind NIN = BinaryOperatorKind.NInt;
private const BinaryOperatorKind NUI = BinaryOperatorKind.NUInt;
private const BinaryOperatorKind FLT = BinaryOperatorKind.Float;
private const BinaryOperatorKind DBL = BinaryOperatorKind.Double;
private const BinaryOperatorKind DEC = BinaryOperatorKind.Decimal;
private const BinaryOperatorKind BOL = BinaryOperatorKind.Bool;
private const BinaryOperatorKind LIN = BinaryOperatorKind.Int | BinaryOperatorKind.Lifted;
private const BinaryOperatorKind LUN = BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted;
private const BinaryOperatorKind LLG = BinaryOperatorKind.Long | BinaryOperatorKind.Lifted;
private const BinaryOperatorKind LUL = BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted;
private const BinaryOperatorKind LNI = BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted;
private const BinaryOperatorKind LNU = BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted;
private const BinaryOperatorKind LFL = BinaryOperatorKind.Float | BinaryOperatorKind.Lifted;
private const BinaryOperatorKind LDB = BinaryOperatorKind.Double | BinaryOperatorKind.Lifted;
private const BinaryOperatorKind LDC = BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted;
private const BinaryOperatorKind LBL = BinaryOperatorKind.Bool | BinaryOperatorKind.Lifted;
private static readonly BinaryOperatorKind[,] s_arithmetic = new BinaryOperatorKind[32, 32]
{
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Long,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.UInt,
BinaryOperatorKind.ULong,
BinaryOperatorKind.NInt,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.Float,
BinaryOperatorKind.Double,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Long,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Long,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float,
BinaryOperatorKind.Double,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Long,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Long,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float,
BinaryOperatorKind.Double,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Long,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Long,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float,
BinaryOperatorKind.Double,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Error,
BinaryOperatorKind.Long,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float,
BinaryOperatorKind.Double,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Error,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Long,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.UInt,
BinaryOperatorKind.ULong,
BinaryOperatorKind.NInt,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.Float,
BinaryOperatorKind.Double,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Long,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.UInt,
BinaryOperatorKind.ULong,
BinaryOperatorKind.NInt,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.Float,
BinaryOperatorKind.Double,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.UInt,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.UInt,
BinaryOperatorKind.UInt,
BinaryOperatorKind.UInt,
BinaryOperatorKind.ULong,
BinaryOperatorKind.Long,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.Float,
BinaryOperatorKind.Double,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Error,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong,
BinaryOperatorKind.ULong,
BinaryOperatorKind.ULong,
BinaryOperatorKind.ULong,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong,
BinaryOperatorKind.Float,
BinaryOperatorKind.Double,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt,
BinaryOperatorKind.NInt,
BinaryOperatorKind.NInt,
BinaryOperatorKind.NInt,
BinaryOperatorKind.Long,
BinaryOperatorKind.NInt,
BinaryOperatorKind.NInt,
BinaryOperatorKind.Long,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float,
BinaryOperatorKind.Double,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.ULong,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.Float,
BinaryOperatorKind.Double,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float,
BinaryOperatorKind.Float,
BinaryOperatorKind.Float,
BinaryOperatorKind.Float,
BinaryOperatorKind.Float,
BinaryOperatorKind.Float,
BinaryOperatorKind.Float,
BinaryOperatorKind.Float,
BinaryOperatorKind.Float,
BinaryOperatorKind.Float,
BinaryOperatorKind.Float,
BinaryOperatorKind.Float,
BinaryOperatorKind.Double,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Double,
BinaryOperatorKind.Double,
BinaryOperatorKind.Double,
BinaryOperatorKind.Double,
BinaryOperatorKind.Double,
BinaryOperatorKind.Double,
BinaryOperatorKind.Double,
BinaryOperatorKind.Double,
BinaryOperatorKind.Double,
BinaryOperatorKind.Double,
BinaryOperatorKind.Double,
BinaryOperatorKind.Double,
BinaryOperatorKind.Double,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Error,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
}
};
private static readonly BinaryOperatorKind[,] s_addition = new BinaryOperatorKind[32, 32]
{
{
BinaryOperatorKind.Error,
BinaryOperatorKind.ObjectAndString,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.StringAndObject,
BinaryOperatorKind.String,
BinaryOperatorKind.StringAndObject,
BinaryOperatorKind.StringAndObject,
BinaryOperatorKind.StringAndObject,
BinaryOperatorKind.StringAndObject,
BinaryOperatorKind.StringAndObject,
BinaryOperatorKind.StringAndObject,
BinaryOperatorKind.StringAndObject,
BinaryOperatorKind.StringAndObject,
BinaryOperatorKind.StringAndObject,
BinaryOperatorKind.StringAndObject,
BinaryOperatorKind.StringAndObject,
BinaryOperatorKind.StringAndObject,
BinaryOperatorKind.StringAndObject,
BinaryOperatorKind.StringAndObject,
BinaryOperatorKind.StringAndObject,
BinaryOperatorKind.StringAndObject,
BinaryOperatorKind.StringAndObject,
BinaryOperatorKind.StringAndObject,
BinaryOperatorKind.StringAndObject,
BinaryOperatorKind.StringAndObject,
BinaryOperatorKind.StringAndObject,
BinaryOperatorKind.StringAndObject,
BinaryOperatorKind.StringAndObject,
BinaryOperatorKind.StringAndObject,
BinaryOperatorKind.StringAndObject,
BinaryOperatorKind.StringAndObject,
BinaryOperatorKind.StringAndObject,
BinaryOperatorKind.StringAndObject,
BinaryOperatorKind.StringAndObject,
BinaryOperatorKind.StringAndObject
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.ObjectAndString,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.ObjectAndString,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Long,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.UInt,
BinaryOperatorKind.ULong,
BinaryOperatorKind.NInt,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.Float,
BinaryOperatorKind.Double,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.ObjectAndString,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Long,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Long,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float,
BinaryOperatorKind.Double,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.ObjectAndString,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Long,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Long,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float,
BinaryOperatorKind.Double,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.ObjectAndString,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Long,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Long,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float,
BinaryOperatorKind.Double,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.ObjectAndString,
BinaryOperatorKind.Error,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Error,
BinaryOperatorKind.Long,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float,
BinaryOperatorKind.Double,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Error,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.ObjectAndString,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Long,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.UInt,
BinaryOperatorKind.ULong,
BinaryOperatorKind.NInt,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.Float,
BinaryOperatorKind.Double,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.ObjectAndString,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Long,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.UInt,
BinaryOperatorKind.ULong,
BinaryOperatorKind.NInt,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.Float,
BinaryOperatorKind.Double,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.ObjectAndString,
BinaryOperatorKind.Error,
BinaryOperatorKind.UInt,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.UInt,
BinaryOperatorKind.UInt,
BinaryOperatorKind.UInt,
BinaryOperatorKind.ULong,
BinaryOperatorKind.Long,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.Float,
BinaryOperatorKind.Double,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Error,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.ObjectAndString,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong,
BinaryOperatorKind.ULong,
BinaryOperatorKind.ULong,
BinaryOperatorKind.ULong,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong,
BinaryOperatorKind.Float,
BinaryOperatorKind.Double,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.ObjectAndString,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt,
BinaryOperatorKind.NInt,
BinaryOperatorKind.NInt,
BinaryOperatorKind.NInt,
BinaryOperatorKind.Long,
BinaryOperatorKind.NInt,
BinaryOperatorKind.NInt,
BinaryOperatorKind.Long,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float,
BinaryOperatorKind.Double,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.ObjectAndString,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.ULong,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.Float,
BinaryOperatorKind.Double,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.ObjectAndString,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float,
BinaryOperatorKind.Float,
BinaryOperatorKind.Float,
BinaryOperatorKind.Float,
BinaryOperatorKind.Float,
BinaryOperatorKind.Float,
BinaryOperatorKind.Float,
BinaryOperatorKind.Float,
BinaryOperatorKind.Float,
BinaryOperatorKind.Float,
BinaryOperatorKind.Float,
BinaryOperatorKind.Float,
BinaryOperatorKind.Double,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.ObjectAndString,
BinaryOperatorKind.Error,
BinaryOperatorKind.Double,
BinaryOperatorKind.Double,
BinaryOperatorKind.Double,
BinaryOperatorKind.Double,
BinaryOperatorKind.Double,
BinaryOperatorKind.Double,
BinaryOperatorKind.Double,
BinaryOperatorKind.Double,
BinaryOperatorKind.Double,
BinaryOperatorKind.Double,
BinaryOperatorKind.Double,
BinaryOperatorKind.Double,
BinaryOperatorKind.Double,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.ObjectAndString,
BinaryOperatorKind.Error,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Error,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.ObjectAndString,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.ObjectAndString,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.ObjectAndString,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.ObjectAndString,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.ObjectAndString,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.ObjectAndString,
BinaryOperatorKind.Error,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.ObjectAndString,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.ObjectAndString,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.ObjectAndString,
BinaryOperatorKind.Error,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.ObjectAndString,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.ObjectAndString,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.ObjectAndString,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.ObjectAndString,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.ObjectAndString,
BinaryOperatorKind.Error,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.ObjectAndString,
BinaryOperatorKind.Error,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
}
};
private static readonly BinaryOperatorKind[,] s_shift = new BinaryOperatorKind[32, 32]
{
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Error,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.UInt,
BinaryOperatorKind.UInt,
BinaryOperatorKind.UInt,
BinaryOperatorKind.UInt,
BinaryOperatorKind.Error,
BinaryOperatorKind.UInt,
BinaryOperatorKind.UInt,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong,
BinaryOperatorKind.ULong,
BinaryOperatorKind.ULong,
BinaryOperatorKind.ULong,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong,
BinaryOperatorKind.ULong,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt,
BinaryOperatorKind.NInt,
BinaryOperatorKind.NInt,
BinaryOperatorKind.NInt,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt,
BinaryOperatorKind.NInt,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
}
};
private static readonly BinaryOperatorKind[,] s_equality = new BinaryOperatorKind[32, 32]
{
{
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object
},
{
BinaryOperatorKind.Object,
BinaryOperatorKind.String,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object
},
{
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Bool,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Bool | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object
},
{
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Long,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.UInt,
BinaryOperatorKind.ULong,
BinaryOperatorKind.NInt,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.Float,
BinaryOperatorKind.Double,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Object,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Long,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Long,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float,
BinaryOperatorKind.Double,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Object,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Long,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Long,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float,
BinaryOperatorKind.Double,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Object,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Long,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Long,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float,
BinaryOperatorKind.Double,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Object,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Error,
BinaryOperatorKind.Long,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float,
BinaryOperatorKind.Double,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Object,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Long,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.UInt,
BinaryOperatorKind.ULong,
BinaryOperatorKind.NInt,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.Float,
BinaryOperatorKind.Double,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Object,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Long,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.UInt,
BinaryOperatorKind.ULong,
BinaryOperatorKind.NInt,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.Float,
BinaryOperatorKind.Double,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Object,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.UInt,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.UInt,
BinaryOperatorKind.UInt,
BinaryOperatorKind.UInt,
BinaryOperatorKind.ULong,
BinaryOperatorKind.Long,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.Float,
BinaryOperatorKind.Double,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Object,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.ULong,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong,
BinaryOperatorKind.ULong,
BinaryOperatorKind.ULong,
BinaryOperatorKind.ULong,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong,
BinaryOperatorKind.Float,
BinaryOperatorKind.Double,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Object,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.NInt,
BinaryOperatorKind.NInt,
BinaryOperatorKind.NInt,
BinaryOperatorKind.NInt,
BinaryOperatorKind.Long,
BinaryOperatorKind.NInt,
BinaryOperatorKind.NInt,
BinaryOperatorKind.Long,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float,
BinaryOperatorKind.Double,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Object,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.ULong,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.Float,
BinaryOperatorKind.Double,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Object,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Float,
BinaryOperatorKind.Float,
BinaryOperatorKind.Float,
BinaryOperatorKind.Float,
BinaryOperatorKind.Float,
BinaryOperatorKind.Float,
BinaryOperatorKind.Float,
BinaryOperatorKind.Float,
BinaryOperatorKind.Float,
BinaryOperatorKind.Float,
BinaryOperatorKind.Float,
BinaryOperatorKind.Float,
BinaryOperatorKind.Double,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Object
},
{
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Double,
BinaryOperatorKind.Double,
BinaryOperatorKind.Double,
BinaryOperatorKind.Double,
BinaryOperatorKind.Double,
BinaryOperatorKind.Double,
BinaryOperatorKind.Double,
BinaryOperatorKind.Double,
BinaryOperatorKind.Double,
BinaryOperatorKind.Double,
BinaryOperatorKind.Double,
BinaryOperatorKind.Double,
BinaryOperatorKind.Double,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Object
},
{
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Decimal,
BinaryOperatorKind.Object,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Bool | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Bool | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object
},
{
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Object,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Object,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Object,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Object,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Object,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Object,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Object,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Object,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Object,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Object,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Object,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
},
{
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Float | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Object
},
{
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Double | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Object
},
{
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Object,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Object,
BinaryOperatorKind.Object,
BinaryOperatorKind.Decimal | BinaryOperatorKind.Lifted
}
};
private static readonly BinaryOperatorKind[,] s_logical = new BinaryOperatorKind[32, 32]
{
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Bool,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Bool | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Long,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.UInt,
BinaryOperatorKind.ULong,
BinaryOperatorKind.NInt,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Long,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Long,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Long,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Long,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Long,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Long,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Error,
BinaryOperatorKind.Long,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Long,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.UInt,
BinaryOperatorKind.ULong,
BinaryOperatorKind.NInt,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.Long,
BinaryOperatorKind.Int,
BinaryOperatorKind.Int,
BinaryOperatorKind.UInt,
BinaryOperatorKind.ULong,
BinaryOperatorKind.NInt,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.UInt,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.Long,
BinaryOperatorKind.UInt,
BinaryOperatorKind.UInt,
BinaryOperatorKind.UInt,
BinaryOperatorKind.ULong,
BinaryOperatorKind.Long,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong,
BinaryOperatorKind.ULong,
BinaryOperatorKind.ULong,
BinaryOperatorKind.ULong,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt,
BinaryOperatorKind.NInt,
BinaryOperatorKind.NInt,
BinaryOperatorKind.NInt,
BinaryOperatorKind.Long,
BinaryOperatorKind.NInt,
BinaryOperatorKind.NInt,
BinaryOperatorKind.Long,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.ULong,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Bool | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Bool | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Int | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.UInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Long | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.ULong | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.NUInt | BinaryOperatorKind.Lifted,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
},
{
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error,
BinaryOperatorKind.Error
}
};
private static readonly BinaryOperatorKind[][,] s_opkind = new BinaryOperatorKind[17][,]
{
s_arithmetic, s_addition, s_arithmetic, s_arithmetic, s_arithmetic, s_shift, s_shift, s_equality, s_equality, s_arithmetic,
s_arithmetic, s_arithmetic, s_arithmetic, s_logical, s_logical, s_logical, s_shift
};
public static BinaryOperatorKind OpKind(BinaryOperatorKind kind, TypeSymbol left, TypeSymbol right)
{
int num = left.TypeToIndex();
if (num < 0)
{
return BinaryOperatorKind.Error;
}
int num2 = right.TypeToIndex();
if (num2 < 0)
{
return BinaryOperatorKind.Error;
}
BinaryOperatorKind binaryOperatorKind = BinaryOperatorKind.Error;
if (!kind.IsLogical() || (num == 15 && num2 == 15))
{
binaryOperatorKind = s_opkind[kind.OperatorIndex()][num, num2];
}
if (binaryOperatorKind != BinaryOperatorKind.Error)
{
return binaryOperatorKind | kind;
}
return binaryOperatorKind;
}
}
private enum LiftingResult
{
NotLifted,
LiftOperandsAndResult,
LiftOperandsButNotResult
}
internal static class UnopEasyOut
{
private const UnaryOperatorKind ERR = UnaryOperatorKind.Error;
private const UnaryOperatorKind BOL = UnaryOperatorKind.Bool;
private const UnaryOperatorKind CHR = UnaryOperatorKind.Char;
private const UnaryOperatorKind I08 = UnaryOperatorKind.SByte;
private const UnaryOperatorKind U08 = UnaryOperatorKind.Byte;
private const UnaryOperatorKind I16 = UnaryOperatorKind.Short;
private const UnaryOperatorKind U16 = UnaryOperatorKind.UShort;
private const UnaryOperatorKind I32 = UnaryOperatorKind.Int;
private const UnaryOperatorKind U32 = UnaryOperatorKind.UInt;
private const UnaryOperatorKind I64 = UnaryOperatorKind.Long;
private const UnaryOperatorKind U64 = UnaryOperatorKind.ULong;
private const UnaryOperatorKind NIN = UnaryOperatorKind.NInt;
private const UnaryOperatorKind NUI = UnaryOperatorKind.NUInt;
private const UnaryOperatorKind R32 = UnaryOperatorKind.Float;
private const UnaryOperatorKind R64 = UnaryOperatorKind.Double;
private const UnaryOperatorKind DEC = UnaryOperatorKind.Decimal;
private const UnaryOperatorKind LBOL = UnaryOperatorKind.Bool | UnaryOperatorKind.Lifted;
private const UnaryOperatorKind LCHR = UnaryOperatorKind.Char | UnaryOperatorKind.Lifted;
private const UnaryOperatorKind LI08 = UnaryOperatorKind.SByte | UnaryOperatorKind.Lifted;
private const UnaryOperatorKind LU08 = UnaryOperatorKind.Byte | UnaryOperatorKind.Lifted;
private const UnaryOperatorKind LI16 = UnaryOperatorKind.Short | UnaryOperatorKind.Lifted;
private const UnaryOperatorKind LU16 = UnaryOperatorKind.UShort | UnaryOperatorKind.Lifted;
private const UnaryOperatorKind LI32 = UnaryOperatorKind.Int | UnaryOperatorKind.Lifted;
private const UnaryOperatorKind LU32 = UnaryOperatorKind.UInt | UnaryOperatorKind.Lifted;
private const UnaryOperatorKind LI64 = UnaryOperatorKind.Long | UnaryOperatorKind.Lifted;
private const UnaryOperatorKind LU64 = UnaryOperatorKind.ULong | UnaryOperatorKind.Lifted;
private const UnaryOperatorKind LNI = UnaryOperatorKind.NInt | UnaryOperatorKind.Lifted;
private const UnaryOperatorKind LNU = UnaryOperatorKind.NUInt | UnaryOperatorKind.Lifted;
private const UnaryOperatorKind LR32 = UnaryOperatorKind.Float | UnaryOperatorKind.Lifted;
private const UnaryOperatorKind LR64 = UnaryOperatorKind.Double | UnaryOperatorKind.Lifted;
private const UnaryOperatorKind LDEC = UnaryOperatorKind.Decimal | UnaryOperatorKind.Lifted;
private static readonly UnaryOperatorKind[] s_increment = new UnaryOperatorKind[32]
{
UnaryOperatorKind.Error,
UnaryOperatorKind.Error,
UnaryOperatorKind.Error,
UnaryOperatorKind.Char,
UnaryOperatorKind.SByte,
UnaryOperatorKind.Short,
UnaryOperatorKind.Int,
UnaryOperatorKind.Long,
UnaryOperatorKind.Byte,
UnaryOperatorKind.UShort,
UnaryOperatorKind.UInt,
UnaryOperatorKind.ULong,
UnaryOperatorKind.NInt,
UnaryOperatorKind.NUInt,
UnaryOperatorKind.Float,
UnaryOperatorKind.Double,
UnaryOperatorKind.Decimal,
UnaryOperatorKind.Error,
UnaryOperatorKind.Char | UnaryOperatorKind.Lifted,
UnaryOperatorKind.SByte | UnaryOperatorKind.Lifted,
UnaryOperatorKind.Short | UnaryOperatorKind.Lifted,
UnaryOperatorKind.Int | UnaryOperatorKind.Lifted,
UnaryOperatorKind.Long | UnaryOperatorKind.Lifted,
UnaryOperatorKind.Byte | UnaryOperatorKind.Lifted,
UnaryOperatorKind.UShort | UnaryOperatorKind.Lifted,
UnaryOperatorKind.UInt | UnaryOperatorKind.Lifted,
UnaryOperatorKind.ULong | UnaryOperatorKind.Lifted,
UnaryOperatorKind.NInt | UnaryOperatorKind.Lifted,
UnaryOperatorKind.NUInt | UnaryOperatorKind.Lifted,
UnaryOperatorKind.Float | UnaryOperatorKind.Lifted,
UnaryOperatorKind.Double | UnaryOperatorKind.Lifted,
UnaryOperatorKind.Decimal | UnaryOperatorKind.Lifted
};
private static readonly UnaryOperatorKind[] s_plus = new UnaryOperatorKind[32]
{
UnaryOperatorKind.Error,
UnaryOperatorKind.Error,
UnaryOperatorKind.Error,
UnaryOperatorKind.Int,
UnaryOperatorKind.Int,
UnaryOperatorKind.Int,
UnaryOperatorKind.Int,
UnaryOperatorKind.Long,
UnaryOperatorKind.Int,
UnaryOperatorKind.Int,
UnaryOperatorKind.UInt,
UnaryOperatorKind.ULong,
UnaryOperatorKind.NInt,
UnaryOperatorKind.NUInt,
UnaryOperatorKind.Float,
UnaryOperatorKind.Double,
UnaryOperatorKind.Decimal,
UnaryOperatorKind.Error,
UnaryOperatorKind.Int | UnaryOperatorKind.Lifted,
UnaryOperatorKind.Int | UnaryOperatorKind.Lifted,
UnaryOperatorKind.Int | UnaryOperatorKind.Lifted,
UnaryOperatorKind.Int | UnaryOperatorKind.Lifted,
UnaryOperatorKind.Long | UnaryOperatorKind.Lifted,
UnaryOperatorKind.Int | UnaryOperatorKind.Lifted,
UnaryOperatorKind.Int | UnaryOperatorKind.Lifted,
UnaryOperatorKind.UInt | UnaryOperatorKind.Lifted,
UnaryOperatorKind.ULong | UnaryOperatorKind.Lifted,
UnaryOperatorKind.NInt | UnaryOperatorKind.Lifted,
UnaryOperatorKind.NUInt | UnaryOperatorKind.Lifted,
UnaryOperatorKind.Float | UnaryOperatorKind.Lifted,
UnaryOperatorKind.Double | UnaryOperatorKind.Lifted,
UnaryOperatorKind.Decimal | UnaryOperatorKind.Lifted
};
private static readonly UnaryOperatorKind[] s_minus = new UnaryOperatorKind[32]
{
UnaryOperatorKind.Error,
UnaryOperatorKind.Error,
UnaryOperatorKind.Error,
UnaryOperatorKind.Int,
UnaryOperatorKind.Int,
UnaryOperatorKind.Int,
UnaryOperatorKind.Int,
UnaryOperatorKind.Long,
UnaryOperatorKind.Int,
UnaryOperatorKind.Int,
UnaryOperatorKind.Long,
UnaryOperatorKind.Error,
UnaryOperatorKind.NInt,
UnaryOperatorKind.Error,
UnaryOperatorKind.Float,
UnaryOperatorKind.Double,
UnaryOperatorKind.Decimal,
UnaryOperatorKind.Error,
UnaryOperatorKind.Int | UnaryOperatorKind.Lifted,
UnaryOperatorKind.Int | UnaryOperatorKind.Lifted,
UnaryOperatorKind.Int | UnaryOperatorKind.Lifted,
UnaryOperatorKind.Int | UnaryOperatorKind.Lifted,
UnaryOperatorKind.Long | UnaryOperatorKind.Lifted,
UnaryOperatorKind.Int | UnaryOperatorKind.Lifted,
UnaryOperatorKind.Int | UnaryOperatorKind.Lifted,
UnaryOperatorKind.Long | UnaryOperatorKind.Lifted,
UnaryOperatorKind.Error,
UnaryOperatorKind.NInt | UnaryOperatorKind.Lifted,
UnaryOperatorKind.Error,
UnaryOperatorKind.Float | UnaryOperatorKind.Lifted,
UnaryOperatorKind.Double | UnaryOperatorKind.Lifted,
UnaryOperatorKind.Decimal | UnaryOperatorKind.Lifted
};
private static readonly UnaryOperatorKind[] s_logicalNegation;
private static readonly UnaryOperatorKind[] s_bitwiseComplement;
private static readonly UnaryOperatorKind[][] s_opkind;
public static UnaryOperatorKind OpKind(UnaryOperatorKind kind, TypeSymbol operand)
{
int num = operand.TypeToIndex();
if (num < 0)
{
return UnaryOperatorKind.Error;
}
int num2 = kind.OperatorIndex();
UnaryOperatorKind unaryOperatorKind = ((num2 < s_opkind.Length) ? s_opkind[num2][num] : UnaryOperatorKind.Error);
if (unaryOperatorKind != UnaryOperatorKind.Error)
{
return unaryOperatorKind | kind;
}
return unaryOperatorKind;
}
static UnopEasyOut()
{
UnaryOperatorKind[] array = new UnaryOperatorKind[32];
array[2] = UnaryOperatorKind.Bool;
array[17] = UnaryOperatorKind.Bool | UnaryOperatorKind.Lifted;
s_logicalNegation = array;
s_bitwiseComplement = new UnaryOperatorKind[32]
{
UnaryOperatorKind.Error,
UnaryOperatorKind.Error,
UnaryOperatorKind.Error,
UnaryOperatorKind.Int,
UnaryOperatorKind.Int,
UnaryOperatorKind.Int,
UnaryOperatorKind.Int,
UnaryOperatorKind.Long,
UnaryOperatorKind.Int,
UnaryOperatorKind.Int,
UnaryOperatorKind.UInt,
UnaryOperatorKind.ULong,
UnaryOperatorKind.NInt,
UnaryOperatorKind.NUInt,
UnaryOperatorKind.Error,
UnaryOperatorKind.Error,
UnaryOperatorKind.Error,
UnaryOperatorKind.Error,
UnaryOperatorKind.Int | UnaryOperatorKind.Lifted,
UnaryOperatorKind.Int | UnaryOperatorKind.Lifted,
UnaryOperatorKind.Int | UnaryOperatorKind.Lifted,
UnaryOperatorKind.Int | UnaryOperatorKind.Lifted,
UnaryOperatorKind.Long | UnaryOperatorKind.Lifted,
UnaryOperatorKind.Int | UnaryOperatorKind.Lifted,
UnaryOperatorKind.Int | UnaryOperatorKind.Lifted,
UnaryOperatorKind.UInt | UnaryOperatorKind.Lifted,
UnaryOperatorKind.ULong | UnaryOperatorKind.Lifted,
UnaryOperatorKind.NInt | UnaryOperatorKind.Lifted,
UnaryOperatorKind.NUInt | UnaryOperatorKind.Lifted,
UnaryOperatorKind.Error,
UnaryOperatorKind.Error,
UnaryOperatorKind.Error
};
s_opkind = new UnaryOperatorKind[8][] { s_increment, s_increment, s_increment, s_increment, s_plus, s_minus, s_logicalNegation, s_bitwiseComplement };
}
}
private class ReturnStatements : BoundTreeWalker
{
private readonly ArrayBuilder<BoundReturnStatement> _returns;
public ReturnStatements(ArrayBuilder<BoundReturnStatement> returns)
{
_returns = returns;
}
public override BoundNode Visit(BoundNode node)
{
if (!(node is BoundExpression))
{
return base.Visit(node);
}
return null;
}
protected override BoundExpression VisitExpressionWithoutStackGuard(BoundExpression node)
{
throw ExceptionUtilities.Unreachable("/_/src/Compilers/CSharp/Portable/Binder/Semantics/OverloadResolution/OverloadResolution.cs", 2786);
}
public override BoundNode VisitLocalFunctionStatement(BoundLocalFunctionStatement node)
{
return null;
}
public override BoundNode VisitReturnStatement(BoundReturnStatement node)
{
_returns.Add(node);
return null;
}
}
private readonly struct EffectiveParameters
{
internal readonly ImmutableArray<TypeWithAnnotations> ParameterTypes;
internal readonly ImmutableArray<RefKind> ParameterRefKinds;
internal EffectiveParameters(ImmutableArray<TypeWithAnnotations> types, ImmutableArray<RefKind> refKinds)
{
ParameterTypes = types;
ParameterRefKinds = refKinds;
}
}
private readonly struct ParameterMap(int[] parameters, int length)
{
private readonly int[] _parameters = parameters;
private readonly int _length = length;
public bool IsTrivial => _parameters == null;
public int Length => _length;
public int this[int argument]
{
get
{
if (_parameters != null)
{
return _parameters[argument];
}
return argument;
}
}
public ImmutableArray<int> ToImmutableArray()
{
return ImmutableArrayExtensions.AsImmutableOrNull<int>(_parameters);
}
}
private readonly Binder _binder;
private bool? _strict;
private const int BetterConversionTargetRecursionLimit = 100;
private CSharpCompilation Compilation => _binder.Compilation;
private Conversions Conversions => _binder.Conversions;
private bool Strict
{
get
{
if (_strict.HasValue)
{
return _strict.Value;
}
bool featureStrictEnabled = _binder.Compilation.FeatureStrictEnabled;
_strict = featureStrictEnabled;
return featureStrictEnabled;
}
}
private void BinaryOperatorEasyOut(BinaryOperatorKind kind, BoundExpression left, BoundExpression right, BinaryOperatorOverloadResolutionResult result)
{
TypeSymbol type = left.Type;
if ((object)type == null)
{
return;
}
TypeSymbol type2 = right.Type;
if ((object)type2 != null && !PossiblyUnusualConstantOperation(left, right))
{
BinaryOperatorKind binaryOperatorKind = BinopEasyOut.OpKind(kind, type, type2);
if (binaryOperatorKind != BinaryOperatorKind.Error)
{
BinaryOperatorSignature signature = Compilation.builtInOperators.GetSignature(binaryOperatorKind);
Conversion leftConversion = ConversionsBase.FastClassifyConversion(type, signature.LeftType);
Conversion rightConversion = ConversionsBase.FastClassifyConversion(type2, signature.RightType);
result.Results.Add(BinaryOperatorAnalysisResult.Applicable(signature, leftConversion, rightConversion));
}
}
}
private static bool PossiblyUnusualConstantOperation(BoundExpression left, BoundExpression right)
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Invalid comparison between Unknown and I4
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_0053: Invalid comparison between Unknown and I4
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
//IL_0062: Invalid comparison between Unknown and I4
if (left.ConstantValueOpt == (ConstantValue)null && right.ConstantValueOpt == (ConstantValue)null)
{
return false;
}
if (left.Type.SpecialType != right.Type.SpecialType)
{
return true;
}
if ((int)left.Type.SpecialType == 13 || (int)left.Type.SpecialType == 7 || (int)left.Type.SpecialType == 20)
{
return false;
}
return true;
}
public void BinaryOperatorOverloadResolution(BinaryOperatorKind kind, bool isChecked, BoundExpression left, BoundExpression right, BinaryOperatorOverloadResolutionResult result, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
{
BinaryOperatorOverloadResolution_EasyOut(kind, left, right, result);
if (result.Results.Count <= 0)
{
BinaryOperatorOverloadResolution_NoEasyOut(kind, isChecked, left, right, result, ref useSiteInfo);
}
}
internal void BinaryOperatorOverloadResolution_EasyOut(BinaryOperatorKind kind, BoundExpression left, BoundExpression right, BinaryOperatorOverloadResolutionResult result)
{
BinaryOperatorKind kind2 = kind & ~BinaryOperatorKind.Logical;
BinaryOperatorEasyOut(kind2, left, right, result);
}
internal void BinaryOperatorOverloadResolution_NoEasyOut(BinaryOperatorKind kind, bool isChecked, BoundExpression left, BoundExpression right, BinaryOperatorOverloadResolutionResult result, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
{
TypeSymbol typeSymbol = left.Type?.StrippedType();
TypeSymbol typeSymbol2 = right.Type?.StrippedType();
bool flag = typeSymbol?.IsInterfaceType() ?? false;
bool flag2 = typeSymbol2?.IsInterfaceType() ?? false;
bool flag3 = false;
if ((object)typeSymbol != null && !flag)
{
flag3 = GetUserDefinedOperators(kind, isChecked, typeSymbol, left, right, result.Results, ref useSiteInfo);
if (!flag3)
{
result.Results.Clear();
}
}
bool flag4 = kind.IsShift();
if (!flag4 && (object)typeSymbol2 != null && !flag2 && !typeSymbol2.Equals(typeSymbol))
{
ArrayBuilder<BinaryOperatorAnalysisResult> instance = ArrayBuilder<BinaryOperatorAnalysisResult>.GetInstance();
if (GetUserDefinedOperators(kind, isChecked, typeSymbol2, left, right, instance, ref useSiteInfo))
{
flag3 = true;
AddDistinctOperators(result.Results, instance);
}
instance.Free();
}
if (!flag3)
{
result.Results.Clear();
PooledDictionary<TypeSymbol, bool> instance2 = PooledDictionary<TypeSymbol, bool>.GetInstance();
TypeSymbol typeSymbol3;
TypeSymbol typeSymbol4;
bool sourceIsInterface;
bool sourceIsInterface2;
if (!flag4 && ((object)typeSymbol == null || (!(typeSymbol is TypeParameterSymbol) && typeSymbol2 is TypeParameterSymbol)))
{
typeSymbol3 = typeSymbol2;
typeSymbol4 = typeSymbol;
sourceIsInterface = flag2;
sourceIsInterface2 = flag;
}
else
{
typeSymbol3 = typeSymbol;
typeSymbol4 = typeSymbol2;
sourceIsInterface = flag;
sourceIsInterface2 = flag2;
}
flag3 = GetUserDefinedBinaryOperatorsFromInterfaces(kind, isChecked, typeSymbol3, sourceIsInterface, left, right, ref useSiteInfo, (Dictionary<TypeSymbol, bool>)(object)instance2, result.Results);
if (!flag3)
{
result.Results.Clear();
}
if (!flag4 && (object)typeSymbol4 != null && !typeSymbol4.Equals(typeSymbol3))
{
ArrayBuilder<BinaryOperatorAnalysisResult> instance3 = ArrayBuilder<BinaryOperatorAnalysisResult>.GetInstance();
if (GetUserDefinedBinaryOperatorsFromInterfaces(kind, isChecked, typeSymbol4, sourceIsInterface2, left, right, ref useSiteInfo, (Dictionary<TypeSymbol, bool>)(object)instance2, instance3))
{
flag3 = true;
AddDistinctOperators(result.Results, instance3);
}
instance3.Free();
}
instance2.Free();
}
if (!flag3)
{
result.Results.Clear();
GetAllBuiltInOperators(kind, isChecked, left, right, result.Results, ref useSiteInfo);
}
BinaryOperatorOverloadResolution(left, right, result, ref useSiteInfo);
}
private bool GetUserDefinedBinaryOperatorsFromInterfaces(BinaryOperatorKind kind, bool isChecked, TypeSymbol operatorSourceOpt, bool sourceIsInterface, BoundExpression left, BoundExpression right, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, Dictionary<TypeSymbol, bool> lookedInInterfaces, ArrayBuilder<BinaryOperatorAnalysisResult> candidates)
{
if ((object)operatorSourceOpt == null)
{
return false;
}
bool flag = false;
ImmutableArray<NamedTypeSymbol> immutableArray = default(ImmutableArray<NamedTypeSymbol>);
TypeSymbol constrainedToTypeOpt = null;
if (sourceIsInterface)
{
if (!lookedInInterfaces.TryGetValue(operatorSourceOpt, out var _))
{
ArrayBuilder<BinaryOperatorSignature> instance = ArrayBuilder<BinaryOperatorSignature>.GetInstance();
GetUserDefinedBinaryOperatorsFromType(constrainedToTypeOpt, (NamedTypeSymbol)operatorSourceOpt, kind, isChecked, instance);
flag = CandidateOperators(isChecked, instance, left, right, candidates, ref useSiteInfo);
instance.Free();
lookedInInterfaces.Add(operatorSourceOpt, flag);
if (!flag)
{
candidates.Clear();
immutableArray = operatorSourceOpt.AllInterfacesWithDefinitionUseSiteDiagnostics(ref useSiteInfo);
}
}
}
else if (operatorSourceOpt.IsTypeParameter())
{
immutableArray = ((TypeParameterSymbol)operatorSourceOpt).AllEffectiveInterfacesWithDefinitionUseSiteDiagnostics(ref useSiteInfo);
constrainedToTypeOpt = operatorSourceOpt;
}
if (!immutableArray.IsDefaultOrEmpty)
{
ArrayBuilder<BinaryOperatorSignature> instance2 = ArrayBuilder<BinaryOperatorSignature>.GetInstance();
ArrayBuilder<BinaryOperatorAnalysisResult> instance3 = ArrayBuilder<BinaryOperatorAnalysisResult>.GetInstance();
PooledHashSet<NamedTypeSymbol> instance4 = PooledHashSet<NamedTypeSymbol>.GetInstance();
ImmutableArray<NamedTypeSymbol>.Enumerator enumerator = immutableArray.GetEnumerator();
while (enumerator.MoveNext())
{
NamedTypeSymbol current = enumerator.Current;
if (!current.IsInterface || ((HashSet<NamedTypeSymbol>)(object)instance4).Contains(current))
{
continue;
}
if (lookedInInterfaces.TryGetValue(current, out var value2))
{
if (value2)
{
ISetExtensions.AddAll<NamedTypeSymbol>((ISet<NamedTypeSymbol>)instance4, current.AllInterfacesWithDefinitionUseSiteDiagnostics(ref useSiteInfo));
}
continue;
}
instance2.Clear();
instance3.Clear();
GetUserDefinedBinaryOperatorsFromType(constrainedToTypeOpt, current, kind, isChecked, instance2);
value2 = CandidateOperators(isChecked, instance2, left, right, instance3, ref useSiteInfo);
lookedInInterfaces.Add(current, value2);
if (value2)
{
flag = true;
candidates.AddRange(instance3);
ISetExtensions.AddAll<NamedTypeSymbol>((ISet<NamedTypeSymbol>)instance4, current.AllInterfacesWithDefinitionUseSiteDiagnostics(ref useSiteInfo));
}
}
instance2.Free();
instance3.Free();
instance4.Free();
}
return flag;
}
private void AddDelegateOperation(BinaryOperatorKind kind, TypeSymbol delegateType, ArrayBuilder<BinaryOperatorSignature> operators)
{
switch (kind)
{
case BinaryOperatorKind.Equal:
case BinaryOperatorKind.NotEqual:
operators.Add(new BinaryOperatorSignature(kind | BinaryOperatorKind.Delegate, delegateType, delegateType, Compilation.GetSpecialType((SpecialType)7)));
break;
default:
operators.Add(new BinaryOperatorSignature(kind | BinaryOperatorKind.Delegate, delegateType, delegateType, delegateType));
break;
}
}
private void GetDelegateOperations(BinaryOperatorKind kind, BoundExpression left, BoundExpression right, ArrayBuilder<BinaryOperatorSignature> operators, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
{
switch (kind)
{
case BinaryOperatorKind.Multiplication:
case BinaryOperatorKind.Division:
case BinaryOperatorKind.Remainder:
case BinaryOperatorKind.LeftShift:
case BinaryOperatorKind.RightShift:
case BinaryOperatorKind.GreaterThan:
case BinaryOperatorKind.LessThan:
case BinaryOperatorKind.GreaterThanOrEqual:
case BinaryOperatorKind.LessThanOrEqual:
case BinaryOperatorKind.And:
case BinaryOperatorKind.Xor:
case BinaryOperatorKind.Or:
case BinaryOperatorKind.UnsignedRightShift:
case BinaryOperatorKind.LogicalAnd:
case BinaryOperatorKind.LogicalOr:
break;
default:
throw ExceptionUtilities.UnexpectedValue((object)kind);
case BinaryOperatorKind.Addition:
case BinaryOperatorKind.Subtraction:
case BinaryOperatorKind.Equal:
case BinaryOperatorKind.NotEqual:
{
TypeSymbol type = left.Type;
bool flag = type?.IsDelegateType() ?? false;
TypeSymbol type2 = right.Type;
bool flag2 = type2?.IsDelegateType() ?? false;
if (!flag && !flag2)
{
BinaryOperatorKind binaryOperatorKind = kind.Operator();
if (binaryOperatorKind == BinaryOperatorKind.Equal || binaryOperatorKind == BinaryOperatorKind.NotEqual)
{
TypeSymbol specialType = _binder.Compilation.GetSpecialType((SpecialType)4);
specialType.AddUseSiteInfo(ref useSiteInfo);
if (Conversions.ClassifyImplicitConversionFromExpression(left, specialType, ref useSiteInfo).IsValid && Conversions.ClassifyImplicitConversionFromExpression(right, specialType, ref useSiteInfo).IsValid)
{
AddDelegateOperation(kind, specialType, operators);
}
}
}
else if (flag && flag2)
{
AddDelegateOperation(kind, type, operators);
if (!((kind == BinaryOperatorKind.Equal || kind == BinaryOperatorKind.NotEqual) ? ConversionsBase.HasIdentityConversion(type, type2) : type.Equals(type2)))
{
AddDelegateOperation(kind, type2, operators);
}
}
else
{
TypeSymbol delegateType = (flag ? type : type2);
BoundExpression boundExpression = (flag ? right : left);
if ((kind != BinaryOperatorKind.Equal && kind != BinaryOperatorKind.NotEqual) || boundExpression.Kind != BoundKind.UnboundLambda)
{
AddDelegateOperation(kind, delegateType, operators);
}
}
break;
}
}
}
private void GetEnumOperation(BinaryOperatorKind kind, TypeSymbol enumType, BoundExpression right, ArrayBuilder<BinaryOperatorSignature> operators)
{
if (!enumType.IsValidEnumType())
{
return;
}
NamedTypeSymbol enumUnderlyingType = enumType.GetEnumUnderlyingType();
NamedTypeSymbol orCreateNullableType = Compilation.GetOrCreateNullableType(enumType);
NamedTypeSymbol orCreateNullableType2 = Compilation.GetOrCreateNullableType(enumUnderlyingType);
switch (kind)
{
case BinaryOperatorKind.Addition:
operators.Add(new BinaryOperatorSignature(BinaryOperatorKind.EnumAndUnderlyingAddition, enumType, enumUnderlyingType, enumType));
operators.Add(new BinaryOperatorSignature(BinaryOperatorKind.UnderlyingAndEnumAddition, enumUnderlyingType, enumType, enumType));
operators.Add(new BinaryOperatorSignature(BinaryOperatorKind.LiftedEnumAndUnderlyingAddition, orCreateNullableType, orCreateNullableType2, orCreateNullableType));
operators.Add(new BinaryOperatorSignature(BinaryOperatorKind.LiftedUnderlyingAndEnumAddition, orCreateNullableType2, orCreateNullableType, orCreateNullableType));
break;
case BinaryOperatorKind.Subtraction:
{
if (Strict)
{
operators.Add(new BinaryOperatorSignature(BinaryOperatorKind.EnumSubtraction, enumType, enumType, enumUnderlyingType));
operators.Add(new BinaryOperatorSignature(BinaryOperatorKind.EnumAndUnderlyingSubtraction, enumType, enumUnderlyingType, enumType));
operators.Add(new BinaryOperatorSignature(BinaryOperatorKind.LiftedEnumSubtraction, orCreateNullableType, orCreateNullableType, orCreateNullableType2));
operators.Add(new BinaryOperatorSignature(BinaryOperatorKind.LiftedEnumAndUnderlyingSubtraction, orCreateNullableType, orCreateNullableType2, orCreateNullableType));
break;
}
bool flag = TypeSymbol.Equals(right.Type?.StrippedType(), enumUnderlyingType, (TypeCompareKind)0);
operators.Add(new BinaryOperatorSignature(BinaryOperatorKind.EnumSubtraction, enumType, enumType, enumUnderlyingType)
{
Priority = 2
});
operators.Add(new BinaryOperatorSignature(BinaryOperatorKind.EnumAndUnderlyingSubtraction, enumType, enumUnderlyingType, enumType)
{
Priority = (flag ? 1 : 3)
});
operators.Add(new BinaryOperatorSignature(BinaryOperatorKind.LiftedEnumSubtraction, orCreateNullableType, orCreateNullableType, orCreateNullableType2)
{
Priority = 12
});
operators.Add(new BinaryOperatorSignature(BinaryOperatorKind.LiftedEnumAndUnderlyingSubtraction, orCreateNullableType, orCreateNullableType2, orCreateNullableType)
{
Priority = (flag ? 11 : 13)
});
operators.Add(new BinaryOperatorSignature(BinaryOperatorKind.UnderlyingAndEnumSubtraction, enumUnderlyingType, enumType, enumType)
{
Priority = 4
});
operators.Add(new BinaryOperatorSignature(BinaryOperatorKind.LiftedUnderlyingAndEnumSubtraction, orCreateNullableType2, orCreateNullableType, orCreateNullableType)
{
Priority = 14
});
break;
}
case BinaryOperatorKind.Equal:
case BinaryOperatorKind.NotEqual:
case BinaryOperatorKind.GreaterThan:
case BinaryOperatorKind.LessThan:
case BinaryOperatorKind.GreaterThanOrEqual:
case BinaryOperatorKind.LessThanOrEqual:
{
NamedTypeSymbol specialType = Compilation.GetSpecialType((SpecialType)7);
operators.Add(new BinaryOperatorSignature(kind | BinaryOperatorKind.Enum, enumType, enumType, specialType));
operators.Add(new BinaryOperatorSignature(kind | BinaryOperatorKind.Lifted | BinaryOperatorKind.Enum, orCreateNullableType, orCreateNullableType, specialType));
break;
}
case BinaryOperatorKind.And:
case BinaryOperatorKind.Xor:
case BinaryOperatorKind.Or:
operators.Add(new BinaryOperatorSignature(kind | BinaryOperatorKind.Enum, enumType, enumType, enumType));
operators.Add(new BinaryOperatorSignature(kind | BinaryOperatorKind.Lifted | BinaryOperatorKind.Enum, orCreateNullableType, orCreateNullableType, orCreateNullableType));
break;
}
}
private void GetPointerArithmeticOperators(BinaryOperatorKind kind, PointerTypeSymbol pointerType, ArrayBuilder<BinaryOperatorSignature> operators)
{
switch (kind)
{
case BinaryOperatorKind.Addition:
operators.Add(new BinaryOperatorSignature(BinaryOperatorKind.PointerAndIntAddition, pointerType, Compilation.GetSpecialType((SpecialType)13), pointerType));
operators.Add(new BinaryOperatorSignature(BinaryOperatorKind.PointerAndUIntAddition, pointerType, Compilation.GetSpecialType((SpecialType)14), pointerType));
operators.Add(new BinaryOperatorSignature(BinaryOperatorKind.PointerAndLongAddition, pointerType, Compilation.GetSpecialType((SpecialType)15), pointerType));
operators.Add(new BinaryOperatorSignature(BinaryOperatorKind.PointerAndULongAddition, pointerType, Compilation.GetSpecialType((SpecialType)16), pointerType));
operators.Add(new BinaryOperatorSignature(BinaryOperatorKind.IntAndPointerAddition, Compilation.GetSpecialType((SpecialType)13), pointerType, pointerType));
operators.Add(new BinaryOperatorSignature(BinaryOperatorKind.UIntAndPointerAddition, Compilation.GetSpecialType((SpecialType)14), pointerType, pointerType));
operators.Add(new BinaryOperatorSignature(BinaryOperatorKind.LongAndPointerAddition, Compilation.GetSpecialType((SpecialType)15), pointerType, pointerType));
operators.Add(new BinaryOperatorSignature(BinaryOperatorKind.ULongAndPointerAddition, Compilation.GetSpecialType((SpecialType)16), pointerType, pointerType));
break;
case BinaryOperatorKind.Subtraction:
operators.Add(new BinaryOperatorSignature(BinaryOperatorKind.PointerAndIntSubtraction, pointerType, Compilation.GetSpecialType((SpecialType)13), pointerType));
operators.Add(new BinaryOperatorSignature(BinaryOperatorKind.PointerAndUIntSubtraction, pointerType, Compilation.GetSpecialType((SpecialType)14), pointerType));
operators.Add(new BinaryOperatorSignature(BinaryOperatorKind.PointerAndLongSubtraction, pointerType, Compilation.GetSpecialType((SpecialType)15), pointerType));
operators.Add(new BinaryOperatorSignature(BinaryOperatorKind.PointerAndULongSubtraction, pointerType, Compilation.GetSpecialType((SpecialType)16), pointerType));
operators.Add(new BinaryOperatorSignature(BinaryOperatorKind.PointerSubtraction, pointerType, pointerType, Compilation.GetSpecialType((SpecialType)15)));
break;
}
}
private void GetPointerComparisonOperators(BinaryOperatorKind kind, ArrayBuilder<BinaryOperatorSignature> operators)
{
switch (kind)
{
case BinaryOperatorKind.Equal:
case BinaryOperatorKind.NotEqual:
case BinaryOperatorKind.GreaterThan:
case BinaryOperatorKind.LessThan:
case BinaryOperatorKind.GreaterThanOrEqual:
case BinaryOperatorKind.LessThanOrEqual:
{
PointerTypeSymbol pointerTypeSymbol = new PointerTypeSymbol(TypeWithAnnotations.Create(Compilation.GetSpecialType((SpecialType)6)));
operators.Add(new BinaryOperatorSignature(kind | BinaryOperatorKind.Pointer, pointerTypeSymbol, pointerTypeSymbol, Compilation.GetSpecialType((SpecialType)7)));
break;
}
}
}
private void GetEnumOperations(BinaryOperatorKind kind, BoundExpression left, BoundExpression right, ArrayBuilder<BinaryOperatorSignature> results)
{
switch (kind)
{
case BinaryOperatorKind.Multiplication:
case BinaryOperatorKind.Division:
case BinaryOperatorKind.Remainder:
case BinaryOperatorKind.LeftShift:
case BinaryOperatorKind.RightShift:
case BinaryOperatorKind.UnsignedRightShift:
case BinaryOperatorKind.LogicalAnd:
case BinaryOperatorKind.LogicalOr:
return;
}
TypeSymbol typeSymbol = left.Type;
if ((object)typeSymbol != null)
{
typeSymbol = typeSymbol.StrippedType();
}
TypeSymbol typeSymbol2 = right.Type;
if ((object)typeSymbol2 != null)
{
typeSymbol2 = typeSymbol2.StrippedType();
}
bool flag;
switch (kind)
{
case BinaryOperatorKind.And:
case BinaryOperatorKind.Xor:
case BinaryOperatorKind.Or:
flag = false;
break;
case BinaryOperatorKind.Addition:
flag = true;
break;
case BinaryOperatorKind.Subtraction:
flag = true;
break;
case BinaryOperatorKind.Equal:
case BinaryOperatorKind.NotEqual:
case BinaryOperatorKind.GreaterThan:
case BinaryOperatorKind.LessThan:
case BinaryOperatorKind.GreaterThanOrEqual:
case BinaryOperatorKind.LessThanOrEqual:
flag = true;
break;
default:
throw ExceptionUtilities.UnexpectedValue((object)kind);
}
if ((object)typeSymbol != null)
{
GetEnumOperation(kind, typeSymbol, right, results);
}
if ((object)typeSymbol2 != null && ((object)typeSymbol == null || !(flag ? ConversionsBase.HasIdentityConversion(typeSymbol2, typeSymbol) : typeSymbol2.Equals(typeSymbol))))
{
GetEnumOperation(kind, typeSymbol2, right, results);
}
}
private void GetPointerOperators(BinaryOperatorKind kind, BoundExpression left, BoundExpression right, ArrayBuilder<BinaryOperatorSignature> results)
{
PointerTypeSymbol pointerTypeSymbol = left.Type as PointerTypeSymbol;
PointerTypeSymbol pointerTypeSymbol2 = right.Type as PointerTypeSymbol;
if ((object)pointerTypeSymbol != null)
{
GetPointerArithmeticOperators(kind, pointerTypeSymbol, results);
}
if ((object)pointerTypeSymbol2 != null && ((object)pointerTypeSymbol == null || !ConversionsBase.HasIdentityConversion(pointerTypeSymbol2, pointerTypeSymbol)))
{
GetPointerArithmeticOperators(kind, pointerTypeSymbol2, results);
}
if ((object)pointerTypeSymbol != null || (object)pointerTypeSymbol2 != null || left.Type is FunctionPointerTypeSymbol || right.Type is FunctionPointerTypeSymbol)
{
GetPointerComparisonOperators(kind, results);
}
}
private void GetAllBuiltInOperators(BinaryOperatorKind kind, bool isChecked, BoundExpression left, BoundExpression right, ArrayBuilder<BinaryOperatorAnalysisResult> results, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
{
kind = kind.OperatorWithLogical();
ArrayBuilder<BinaryOperatorSignature> instance = ArrayBuilder<BinaryOperatorSignature>.GetInstance();
if ((kind == BinaryOperatorKind.Equal || kind == BinaryOperatorKind.NotEqual) && useOnlyReferenceEquality(Conversions, left, right, ref useSiteInfo))
{
GetReferenceEquality(kind, instance);
}
else
{
Compilation.builtInOperators.GetSimpleBuiltInOperators(kind, instance, !left.Type.IsNativeIntegerOrNullableThereof() && !right.Type.IsNativeIntegerOrNullableThereof());
GetDelegateOperations(kind, left, right, instance, ref useSiteInfo);
GetEnumOperations(kind, left, right, instance);
GetPointerOperators(kind, left, right, instance);
if (kind.Operator() == BinaryOperatorKind.Addition && isUtf8ByteRepresentation(left) && isUtf8ByteRepresentation(right))
{
Compilation.builtInOperators.GetUtf8ConcatenationBuiltInOperator(left.Type, instance);
}
}
CandidateOperators(isChecked, instance, left, right, results, ref useSiteInfo);
instance.Free();
static bool isUtf8ByteRepresentation(BoundExpression value)
{
if (value is BoundUtf8String || value is BoundBinaryOperator { OperatorKind: BinaryOperatorKind.Utf8Addition })
{
return true;
}
return false;
}
static bool useOnlyReferenceEquality(Conversions conversions, BoundExpression boundExpression, BoundExpression boundExpression2, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo2)
{
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Invalid comparison between Unknown and I4
//IL_0070: Unknown result type (might be due to invalid IL or missing references)
//IL_0077: Invalid comparison between Unknown and I4
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_0053: Invalid comparison between Unknown and I4
//IL_007f: Unknown result type (might be due to invalid IL or missing references)
//IL_0085: Invalid comparison between Unknown and I4
if (BuiltInOperators.IsValidObjectEquality(conversions, boundExpression.Type, boundExpression.IsLiteralNull(), leftIsDefault: false, boundExpression2.Type, boundExpression2.IsLiteralNull(), rightIsDefault: false, ref useSiteInfo2) && ((object)boundExpression.Type == null || (!boundExpression.Type.IsDelegateType() && (int)boundExpression.Type.SpecialType != 20 && (int)boundExpression.Type.SpecialType != 4)))
{
if ((object)boundExpression2.Type != null)
{
if (!boundExpression2.Type.IsDelegateType() && (int)boundExpression2.Type.SpecialType != 20)
{
return (int)boundExpression2.Type.SpecialType != 4;
}
return false;
}
return true;
}
return false;
}
}
private void GetReferenceEquality(BinaryOperatorKind kind, ArrayBuilder<BinaryOperatorSignature> operators)
{
NamedTypeSymbol specialType = Compilation.GetSpecialType((SpecialType)1);
operators.Add(new BinaryOperatorSignature(kind | BinaryOperatorKind.Object, specialType, specialType, Compilation.GetSpecialType((SpecialType)7)));
}
private bool CandidateOperators(bool isChecked, ArrayBuilder<BinaryOperatorSignature> operators, BoundExpression left, BoundExpression right, ArrayBuilder<BinaryOperatorAnalysisResult> results, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
bool result = false;
Enumerator<BinaryOperatorSignature> enumerator = operators.GetEnumerator();
while (enumerator.MoveNext())
{
BinaryOperatorSignature current = enumerator.Current;
Conversion leftConversion = Conversions.ClassifyConversionFromExpression(left, current.LeftType, isChecked, ref useSiteInfo);
Conversion rightConversion = Conversions.ClassifyConversionFromExpression(right, current.RightType, isChecked, ref useSiteInfo);
if (leftConversion.IsImplicit && rightConversion.IsImplicit)
{
results.Add(BinaryOperatorAnalysisResult.Applicable(current, leftConversion, rightConversion));
result = true;
}
else
{
results.Add(BinaryOperatorAnalysisResult.Inapplicable(current, leftConversion, rightConversion));
}
}
return result;
}
private static void AddDistinctOperators(ArrayBuilder<BinaryOperatorAnalysisResult> result, ArrayBuilder<BinaryOperatorAnalysisResult> additionalOperators)
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
int count = result.Count;
Enumerator<BinaryOperatorAnalysisResult> enumerator = additionalOperators.GetEnumerator();
while (enumerator.MoveNext())
{
BinaryOperatorAnalysisResult current = enumerator.Current;
bool flag = false;
for (int i = 0; i < count; i++)
{
BinaryOperatorSignature signature = result[i].Signature;
if (current.Signature.Kind == signature.Kind && equalsIgnoringNullable(current.Signature.ReturnType, signature.ReturnType) && equalsIgnoringNullableAndDynamic(current.Signature.LeftType, signature.LeftType) && equalsIgnoringNullableAndDynamic(current.Signature.RightType, signature.RightType) && equalsIgnoringNullableAndDynamic(current.Signature.Method.ContainingType, signature.Method.ContainingType))
{
flag = true;
break;
}
}
if (!flag)
{
result.Add(current);
}
}
static bool equalsIgnoringNullable(TypeSymbol a, TypeSymbol b)
{
return a.Equals(b, (TypeCompareKind)24);
}
static bool equalsIgnoringNullableAndDynamic(TypeSymbol a, TypeSymbol b)
{
return a.Equals(b, (TypeCompareKind)26);
}
}
private bool GetUserDefinedOperators(BinaryOperatorKind kind, bool isChecked, TypeSymbol type0, BoundExpression left, BoundExpression right, ArrayBuilder<BinaryOperatorAnalysisResult> results, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
{
if ((object)type0 == null || OperatorFacts.DefinitelyHasNoUserDefinedOperators(type0))
{
return false;
}
ArrayBuilder<BinaryOperatorSignature> instance = ArrayBuilder<BinaryOperatorSignature>.GetInstance();
bool result = false;
NamedTypeSymbol namedTypeSymbol = type0 as NamedTypeSymbol;
if ((object)namedTypeSymbol == null)
{
namedTypeSymbol = type0.BaseTypeWithDefinitionUseSiteDiagnostics(ref useSiteInfo);
}
if ((object)namedTypeSymbol == null && type0.IsTypeParameter())
{
namedTypeSymbol = ((TypeParameterSymbol)type0).EffectiveBaseClass(ref useSiteInfo);
}
while ((object)namedTypeSymbol != null)
{
instance.Clear();
GetUserDefinedBinaryOperatorsFromType(null, namedTypeSymbol, kind, isChecked, instance);
results.Clear();
if (CandidateOperators(isChecked, instance, left, right, results, ref useSiteInfo))
{
result = true;
break;
}
namedTypeSymbol = namedTypeSymbol.BaseTypeWithDefinitionUseSiteDiagnostics(ref useSiteInfo);
}
instance.Free();
return result;
}
private void GetUserDefinedBinaryOperatorsFromType(TypeSymbol constrainedToTypeOpt, NamedTypeSymbol type, BinaryOperatorKind kind, bool isChecked, ArrayBuilder<BinaryOperatorSignature> operators)
{
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
string text = OperatorFacts.BinaryOperatorNameFromOperatorKind(kind, isChecked);
getDeclaredOperators(constrainedToTypeOpt, type, kind, text, operators);
if (isChecked && SyntaxFacts.IsCheckedOperator(text))
{
string name = OperatorFacts.BinaryOperatorNameFromOperatorKind(kind, isChecked: false);
ArrayBuilder<BinaryOperatorSignature> instance = ArrayBuilder<BinaryOperatorSignature>.GetInstance();
getDeclaredOperators(constrainedToTypeOpt, type, kind, name, instance);
if (operators.Count != 0)
{
for (int num = instance.Count - 1; num >= 0; num--)
{
Enumerator<BinaryOperatorSignature> enumerator = operators.GetEnumerator();
while (enumerator.MoveNext())
{
if (SourceMemberContainerTypeSymbol.DoOperatorsPair(enumerator.Current.Method, instance[num].Method))
{
instance.RemoveAt(num);
break;
}
}
}
}
operators.AddRange(instance);
instance.Free();
}
addLiftedOperators(constrainedToTypeOpt, kind, operators);
void addLiftedOperators(TypeSymbol constrainedToTypeOpt2, BinaryOperatorKind binaryOperatorKind, ArrayBuilder<BinaryOperatorSignature> val)
{
for (int num2 = val.Count - 1; num2 >= 0; num2--)
{
MethodSymbol method = val[num2].Method;
TypeSymbol parameterType = method.GetParameterType(0);
TypeSymbol parameterType2 = method.GetParameterType(1);
TypeSymbol returnType = method.ReturnType;
switch (UserDefinedBinaryOperatorCanBeLifted(parameterType, parameterType2, returnType, binaryOperatorKind))
{
case LiftingResult.LiftOperandsAndResult:
val.Add(new BinaryOperatorSignature(BinaryOperatorKind.UserDefined | BinaryOperatorKind.Lifted | binaryOperatorKind, MakeNullable(parameterType), MakeNullable(parameterType2), MakeNullable(returnType), method, constrainedToTypeOpt2));
break;
case LiftingResult.LiftOperandsButNotResult:
val.Add(new BinaryOperatorSignature(BinaryOperatorKind.UserDefined | BinaryOperatorKind.Lifted | binaryOperatorKind, MakeNullable(parameterType), MakeNullable(parameterType2), returnType, method, constrainedToTypeOpt2));
break;
}
}
}
static void getDeclaredOperators(TypeSymbol constrainedToTypeOpt2, NamedTypeSymbol namedTypeSymbol, BinaryOperatorKind binaryOperatorKind, string name2, ArrayBuilder<BinaryOperatorSignature> val)
{
ImmutableArray<MethodSymbol>.Enumerator enumerator2 = namedTypeSymbol.GetOperators(name2).GetEnumerator();
while (enumerator2.MoveNext())
{
MethodSymbol current = enumerator2.Current;
if (current.ParameterCount == 2 && !current.ReturnsVoid)
{
TypeSymbol parameterType = current.GetParameterType(0);
TypeSymbol parameterType2 = current.GetParameterType(1);
TypeSymbol returnType = current.ReturnType;
val.Add(new BinaryOperatorSignature(BinaryOperatorKind.UserDefined | binaryOperatorKind, parameterType, parameterType2, returnType, current, constrainedToTypeOpt2));
}
}
}
}
private static LiftingResult UserDefinedBinaryOperatorCanBeLifted(TypeSymbol left, TypeSymbol right, TypeSymbol result, BinaryOperatorKind kind)
{
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
//IL_0061: Invalid comparison between Unknown and I4
if (!left.IsValidNullableTypeArgument() || !right.IsValidNullableTypeArgument())
{
return LiftingResult.NotLifted;
}
if (kind <= BinaryOperatorKind.GreaterThan)
{
if (kind != BinaryOperatorKind.Equal && kind != BinaryOperatorKind.NotEqual)
{
if (kind != BinaryOperatorKind.GreaterThan)
{
goto IL_0067;
}
}
else if (!TypeSymbol.Equals(left, right, (TypeCompareKind)0))
{
return LiftingResult.NotLifted;
}
}
else if (kind != BinaryOperatorKind.LessThan && kind != BinaryOperatorKind.GreaterThanOrEqual && kind != BinaryOperatorKind.LessThanOrEqual)
{
goto IL_0067;
}
if ((int)result.SpecialType != 7)
{
return LiftingResult.NotLifted;
}
return LiftingResult.LiftOperandsButNotResult;
IL_0067:
if (!result.IsValidNullableTypeArgument())
{
return LiftingResult.NotLifted;
}
return LiftingResult.LiftOperandsAndResult;
}
private void BinaryOperatorOverloadResolution(BoundExpression left, BoundExpression right, BinaryOperatorOverloadResolutionResult result, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
{
if (result.SingleValid())
{
return;
}
ArrayBuilder<BinaryOperatorAnalysisResult> results = result.Results;
int theBestCandidateIndex = GetTheBestCandidateIndex(left, right, results, ref useSiteInfo);
if (theBestCandidateIndex != -1)
{
for (int i = 0; i < results.Count; i++)
{
if (results[i].Kind != OperatorAnalysisResultKind.Inapplicable && i != theBestCandidateIndex)
{
results[i] = results[i].Worse();
}
}
return;
}
for (int j = 1; j < results.Count; j++)
{
if (results[j].Kind != OperatorAnalysisResultKind.Applicable)
{
continue;
}
for (int k = 0; k < j; k++)
{
if (results[k].Kind != OperatorAnalysisResultKind.Inapplicable)
{
switch (BetterOperator(results[j].Signature, results[k].Signature, left, right, ref useSiteInfo))
{
case BetterResult.Left:
results[k] = results[k].Worse();
break;
case BetterResult.Right:
results[j] = results[j].Worse();
break;
}
}
}
}
}
private int GetTheBestCandidateIndex(BoundExpression left, BoundExpression right, ArrayBuilder<BinaryOperatorAnalysisResult> candidates, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
{
int num = -1;
for (int i = 0; i < candidates.Count; i++)
{
if (candidates[i].Kind != OperatorAnalysisResultKind.Applicable)
{
continue;
}
if (num == -1)
{
num = i;
continue;
}
switch (BetterOperator(candidates[num].Signature, candidates[i].Signature, left, right, ref useSiteInfo))
{
case BetterResult.Right:
num = i;
break;
default:
num = -1;
break;
case BetterResult.Left:
break;
}
}
for (int j = 0; j < num; j++)
{
if (candidates[j].Kind != OperatorAnalysisResultKind.Inapplicable && BetterOperator(candidates[num].Signature, candidates[j].Signature, left, right, ref useSiteInfo) != BetterResult.Left)
{
return -1;
}
}
return num;
}
private BetterResult BetterOperator(BinaryOperatorSignature op1, BinaryOperatorSignature op2, BoundExpression left, BoundExpression right, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
{
//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
//IL_0116: Unknown result type (might be due to invalid IL or missing references)
//IL_0108: Unknown result type (might be due to invalid IL or missing references)
//IL_010e: Invalid comparison between Unknown and I4
//IL_011f: Unknown result type (might be due to invalid IL or missing references)
//IL_0125: Invalid comparison between Unknown and I4
//IL_012f: Unknown result type (might be due to invalid IL or missing references)
//IL_014c: Unknown result type (might be due to invalid IL or missing references)
//IL_0138: Unknown result type (might be due to invalid IL or missing references)
//IL_013e: Invalid comparison between Unknown and I4
//IL_0155: Unknown result type (might be due to invalid IL or missing references)
//IL_015b: Invalid comparison between Unknown and I4
if (op1.Priority.HasValue && op1.Priority.GetValueOrDefault() != op2.Priority.GetValueOrDefault())
{
if (op1.Priority.GetValueOrDefault() >= op2.Priority.GetValueOrDefault())
{
return BetterResult.Right;
}
return BetterResult.Left;
}
BetterResult betterResult = BetterConversionFromExpression(left, op1.LeftType, op2.LeftType, ref useSiteInfo);
BetterResult betterResult2 = BetterConversionFromExpression(right, op1.RightType, op2.RightType, ref useSiteInfo);
if ((betterResult == BetterResult.Left && betterResult2 != BetterResult.Right) || (betterResult != BetterResult.Right && betterResult2 == BetterResult.Left))
{
return BetterResult.Left;
}
if ((betterResult == BetterResult.Right && betterResult2 != BetterResult.Left) || (betterResult != BetterResult.Left && betterResult2 == BetterResult.Right))
{
return BetterResult.Right;
}
if (ConversionsBase.HasIdentityConversion(op1.LeftType, op2.LeftType) && ConversionsBase.HasIdentityConversion(op1.RightType, op2.RightType))
{
BetterResult betterResult3 = MoreSpecificOperator(op1, op2, ref useSiteInfo);
if (betterResult3 == BetterResult.Left || betterResult3 == BetterResult.Right)
{
return betterResult3;
}
bool flag = op1.Kind.IsLifted();
bool flag2 = op2.Kind.IsLifted();
if (flag && !flag2)
{
return BetterResult.Right;
}
if (!flag && flag2)
{
return BetterResult.Left;
}
}
BetterResult betterResult4 = (((int)op1.LeftRefKind != 0 || (int)op2.LeftRefKind != 3) ? (((int)op2.LeftRefKind == 0 && (int)op1.LeftRefKind == 3) ? BetterResult.Right : BetterResult.Neither) : BetterResult.Left);
if ((int)op1.RightRefKind == 0 && (int)op2.RightRefKind == 3)
{
if (betterResult4 == BetterResult.Right)
{
return BetterResult.Neither;
}
betterResult4 = BetterResult.Left;
}
else if ((int)op2.RightRefKind == 0 && (int)op1.RightRefKind == 3)
{
if (betterResult4 == BetterResult.Left)
{
return BetterResult.Neither;
}
betterResult4 = BetterResult.Right;
}
return betterResult4;
}
private BetterResult MoreSpecificOperator(BinaryOperatorSignature op1, BinaryOperatorSignature op2, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
{
//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
TypeSymbol typeSymbol;
TypeSymbol typeSymbol2;
if ((object)op1.Method != null)
{
ImmutableArray<ParameterSymbol> parameters = op1.Method.OriginalDefinition.GetParameters();
typeSymbol = parameters[0].Type;
typeSymbol2 = parameters[1].Type;
if (op1.Kind.IsLifted())
{
typeSymbol = MakeNullable(typeSymbol);
typeSymbol2 = MakeNullable(typeSymbol2);
}
}
else
{
typeSymbol = op1.LeftType;
typeSymbol2 = op1.RightType;
}
TypeSymbol typeSymbol3;
TypeSymbol typeSymbol4;
if ((object)op2.Method != null)
{
ImmutableArray<ParameterSymbol> parameters2 = op2.Method.OriginalDefinition.GetParameters();
typeSymbol3 = parameters2[0].Type;
typeSymbol4 = parameters2[1].Type;
if (op2.Kind.IsLifted())
{
typeSymbol3 = MakeNullable(typeSymbol3);
typeSymbol4 = MakeNullable(typeSymbol4);
}
}
else
{
typeSymbol3 = op2.LeftType;
typeSymbol4 = op2.RightType;
}
TemporaryArray<TypeSymbol> empty = TemporaryArray<TypeSymbol>.Empty;
try
{
TemporaryArray<TypeSymbol> empty2 = TemporaryArray<TypeSymbol>.Empty;
try
{
empty.Add(typeSymbol);
empty.Add(typeSymbol2);
empty2.Add(typeSymbol3);
empty2.Add(typeSymbol4);
return MoreSpecificType(ref TemporaryArrayExtensions.AsRef<TypeSymbol>(ref empty), ref TemporaryArrayExtensions.AsRef<TypeSymbol>(ref empty2), ref useSiteInfo);
}
finally
{
((IDisposable)empty2/*cast due to constrained. prefix*/).Dispose();
}
}
finally
{
((IDisposable)empty/*cast due to constrained. prefix*/).Dispose();
}
}
[Conditional("DEBUG")]
private static void AssertNotChecked(BinaryOperatorKind kind)
{
}
private void UnaryOperatorEasyOut(UnaryOperatorKind kind, BoundExpression operand, UnaryOperatorOverloadResolutionResult result)
{
TypeSymbol type = operand.Type;
if ((object)type != null)
{
UnaryOperatorKind unaryOperatorKind = UnopEasyOut.OpKind(kind, type);
if (unaryOperatorKind != UnaryOperatorKind.Error)
{
UnaryOperatorSignature signature = Compilation.builtInOperators.GetSignature(unaryOperatorKind);
Conversion? conversion = ConversionsBase.FastClassifyConversion(type, signature.OperandType);
result.Results.Add(UnaryOperatorAnalysisResult.Applicable(signature, conversion.Value));
}
}
}
private NamedTypeSymbol MakeNullable(TypeSymbol type)
{
return Compilation.GetSpecialType((SpecialType)32).Construct(type);
}
public void UnaryOperatorOverloadResolution(UnaryOperatorKind kind, bool isChecked, BoundExpression operand, UnaryOperatorOverloadResolutionResult result, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
{
UnaryOperatorEasyOut(kind, operand, result);
if (result.Results.Count <= 0)
{
if (!GetUserDefinedOperators(kind, isChecked, operand, result.Results, ref useSiteInfo))
{
result.Results.Clear();
GetAllBuiltInOperators(kind, isChecked, operand, result.Results, ref useSiteInfo);
}
UnaryOperatorOverloadResolution(operand, result, ref useSiteInfo);
}
}
private void UnaryOperatorOverloadResolution(BoundExpression operand, UnaryOperatorOverloadResolutionResult result, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
{
if (result.SingleValid())
{
return;
}
ArrayBuilder<UnaryOperatorAnalysisResult> results = result.Results;
int theBestCandidateIndex = GetTheBestCandidateIndex(operand, results, ref useSiteInfo);
if (theBestCandidateIndex != -1)
{
for (int i = 0; i < results.Count; i++)
{
if (results[i].Kind != OperatorAnalysisResultKind.Inapplicable && i != theBestCandidateIndex)
{
results[i] = results[i].Worse();
}
}
return;
}
for (int j = 1; j < results.Count; j++)
{
if (results[j].Kind != OperatorAnalysisResultKind.Applicable)
{
continue;
}
for (int k = 0; k < j; k++)
{
if (results[k].Kind != OperatorAnalysisResultKind.Inapplicable)
{
switch (BetterOperator(results[j].Signature, results[k].Signature, operand, ref useSiteInfo))
{
case BetterResult.Left:
results[k] = results[k].Worse();
break;
case BetterResult.Right:
results[j] = results[j].Worse();
break;
}
}
}
}
}
private int GetTheBestCandidateIndex(BoundExpression operand, ArrayBuilder<UnaryOperatorAnalysisResult> candidates, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
{
int num = -1;
for (int i = 0; i < candidates.Count; i++)
{
if (candidates[i].Kind != OperatorAnalysisResultKind.Applicable)
{
continue;
}
if (num == -1)
{
num = i;
continue;
}
switch (BetterOperator(candidates[num].Signature, candidates[i].Signature, operand, ref useSiteInfo))
{
case BetterResult.Right:
num = i;
break;
default:
num = -1;
break;
case BetterResult.Left:
break;
}
}
for (int j = 0; j < num; j++)
{
if (candidates[j].Kind != OperatorAnalysisResultKind.Inapplicable && BetterOperator(candidates[num].Signature, candidates[j].Signature, operand, ref useSiteInfo) != BetterResult.Left)
{
return -1;
}
}
return num;
}
private BetterResult BetterOperator(UnaryOperatorSignature op1, UnaryOperatorSignature op2, BoundExpression operand, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
{
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_0073: Unknown result type (might be due to invalid IL or missing references)
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: Invalid comparison between Unknown and I4
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
//IL_0082: Invalid comparison between Unknown and I4
BetterResult betterResult = BetterConversionFromExpression(operand, op1.OperandType, op2.OperandType, ref useSiteInfo);
if (betterResult == BetterResult.Left || betterResult == BetterResult.Right)
{
return betterResult;
}
if (ConversionsBase.HasIdentityConversion(op1.OperandType, op2.OperandType))
{
bool flag = op1.Kind.IsLifted();
bool flag2 = op2.Kind.IsLifted();
if (flag && !flag2)
{
return BetterResult.Right;
}
if (!flag && flag2)
{
return BetterResult.Left;
}
}
if ((int)op1.RefKind == 0 && (int)op2.RefKind == 3)
{
return BetterResult.Left;
}
if ((int)op2.RefKind == 0 && (int)op1.RefKind == 3)
{
return BetterResult.Right;
}
return BetterResult.Neither;
}
private void GetAllBuiltInOperators(UnaryOperatorKind kind, bool isChecked, BoundExpression operand, ArrayBuilder<UnaryOperatorAnalysisResult> results, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
{
ArrayBuilder<UnaryOperatorSignature> instance = ArrayBuilder<UnaryOperatorSignature>.GetInstance();
Compilation.builtInOperators.GetSimpleBuiltInOperators(kind, instance, !operand.Type.IsNativeIntegerOrNullableThereof());
GetEnumOperations(kind, operand, instance);
UnaryOperatorSignature? pointerOperation = GetPointerOperation(kind, operand);
if (pointerOperation.HasValue)
{
instance.Add(pointerOperation.Value);
}
CandidateOperators(isChecked, instance, operand, results, ref useSiteInfo);
instance.Free();
}
private bool CandidateOperators(bool isChecked, ArrayBuilder<UnaryOperatorSignature> operators, BoundExpression operand, ArrayBuilder<UnaryOperatorAnalysisResult> results, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
bool result = false;
Enumerator<UnaryOperatorSignature> enumerator = operators.GetEnumerator();
while (enumerator.MoveNext())
{
UnaryOperatorSignature current = enumerator.Current;
Conversion conversion = Conversions.ClassifyConversionFromExpression(operand, current.OperandType, isChecked, ref useSiteInfo);
if (conversion.IsImplicit)
{
result = true;
results.Add(UnaryOperatorAnalysisResult.Applicable(current, conversion));
}
else
{
results.Add(UnaryOperatorAnalysisResult.Inapplicable(current, conversion));
}
}
return result;
}
private void GetEnumOperations(UnaryOperatorKind kind, BoundExpression operand, ArrayBuilder<UnaryOperatorSignature> operators)
{
TypeSymbol type = operand.Type;
if ((object)type == null)
{
return;
}
type = type.StrippedType();
if (type.IsValidEnumType())
{
NamedTypeSymbol orCreateNullableType = Compilation.GetOrCreateNullableType(type);
switch (kind)
{
case UnaryOperatorKind.PostfixIncrement:
case UnaryOperatorKind.PostfixDecrement:
case UnaryOperatorKind.PrefixIncrement:
case UnaryOperatorKind.PrefixDecrement:
case UnaryOperatorKind.BitwiseComplement:
operators.Add(new UnaryOperatorSignature(kind | UnaryOperatorKind.Enum, type, type));
operators.Add(new UnaryOperatorSignature(kind | UnaryOperatorKind.Lifted | UnaryOperatorKind.Enum, orCreateNullableType, orCreateNullableType));
break;
}
}
}
private static UnaryOperatorSignature? GetPointerOperation(UnaryOperatorKind kind, BoundExpression operand)
{
if (!(operand.Type is PointerTypeSymbol pointerTypeSymbol))
{
return null;
}
UnaryOperatorSignature? result = null;
switch (kind)
{
case UnaryOperatorKind.PostfixIncrement:
case UnaryOperatorKind.PostfixDecrement:
case UnaryOperatorKind.PrefixIncrement:
case UnaryOperatorKind.PrefixDecrement:
result = new UnaryOperatorSignature(kind | UnaryOperatorKind.Pointer, pointerTypeSymbol, pointerTypeSymbol);
break;
}
return result;
}
private bool GetUserDefinedOperators(UnaryOperatorKind kind, bool isChecked, BoundExpression operand, ArrayBuilder<UnaryOperatorAnalysisResult> results, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
{
if ((object)operand.Type == null)
{
return false;
}
TypeSymbol typeSymbol = operand.Type.StrippedType();
TypeSymbol constrainedToTypeOpt = typeSymbol as TypeParameterSymbol;
if (OperatorFacts.DefinitelyHasNoUserDefinedOperators(typeSymbol))
{
return false;
}
ArrayBuilder<UnaryOperatorSignature> instance = ArrayBuilder<UnaryOperatorSignature>.GetInstance();
bool flag = false;
NamedTypeSymbol namedTypeSymbol = typeSymbol as NamedTypeSymbol;
if ((object)namedTypeSymbol == null)
{
namedTypeSymbol = typeSymbol.BaseTypeWithDefinitionUseSiteDiagnostics(ref useSiteInfo);
}
if ((object)namedTypeSymbol == null && typeSymbol.IsTypeParameter())
{
namedTypeSymbol = ((TypeParameterSymbol)typeSymbol).EffectiveBaseClass(ref useSiteInfo);
}
while ((object)namedTypeSymbol != null)
{
instance.Clear();
GetUserDefinedUnaryOperatorsFromType(constrainedToTypeOpt, namedTypeSymbol, kind, isChecked, instance);
results.Clear();
if (CandidateOperators(isChecked, instance, operand, results, ref useSiteInfo))
{
flag = true;
break;
}
namedTypeSymbol = namedTypeSymbol.BaseTypeWithDefinitionUseSiteDiagnostics(ref useSiteInfo);
}
if (!flag)
{
ImmutableArray<NamedTypeSymbol> immutableArray = default(ImmutableArray<NamedTypeSymbol>);
if (typeSymbol.IsInterfaceType())
{
immutableArray = typeSymbol.AllInterfacesWithDefinitionUseSiteDiagnostics(ref useSiteInfo);
}
else if (typeSymbol.IsTypeParameter())
{
immutableArray = ((TypeParameterSymbol)typeSymbol).AllEffectiveInterfacesWithDefinitionUseSiteDiagnostics(ref useSiteInfo);
}
if (!immutableArray.IsDefaultOrEmpty)
{
PooledHashSet<NamedTypeSymbol> instance2 = PooledHashSet<NamedTypeSymbol>.GetInstance();
ArrayBuilder<UnaryOperatorAnalysisResult> instance3 = ArrayBuilder<UnaryOperatorAnalysisResult>.GetInstance();
results.Clear();
ImmutableArray<NamedTypeSymbol>.Enumerator enumerator = immutableArray.GetEnumerator();
while (enumerator.MoveNext())
{
NamedTypeSymbol current = enumerator.Current;
if (current.IsInterface && !((HashSet<NamedTypeSymbol>)(object)instance2).Contains(current))
{
instance.Clear();
instance3.Clear();
GetUserDefinedUnaryOperatorsFromType(constrainedToTypeOpt, current, kind, isChecked, instance);
if (CandidateOperators(isChecked, instance, operand, instance3, ref useSiteInfo))
{
flag = true;
results.AddRange(instance3);
ISetExtensions.AddAll<NamedTypeSymbol>((ISet<NamedTypeSymbol>)instance2, current.AllInterfacesWithDefinitionUseSiteDiagnostics(ref useSiteInfo));
}
}
}
instance2.Free();
instance3.Free();
}
}
instance.Free();
return flag;
}
private void GetUserDefinedUnaryOperatorsFromType(TypeSymbol constrainedToTypeOpt, NamedTypeSymbol type, UnaryOperatorKind kind, bool isChecked, ArrayBuilder<UnaryOperatorSignature> operators)
{
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
string text = OperatorFacts.UnaryOperatorNameFromOperatorKind(kind, isChecked);
getDeclaredOperators(constrainedToTypeOpt, type, kind, text, operators);
if (isChecked && SyntaxFacts.IsCheckedOperator(text))
{
string name = OperatorFacts.UnaryOperatorNameFromOperatorKind(kind, isChecked: false);
ArrayBuilder<UnaryOperatorSignature> instance = ArrayBuilder<UnaryOperatorSignature>.GetInstance();
getDeclaredOperators(constrainedToTypeOpt, type, kind, name, instance);
if (operators.Count != 0)
{
for (int num = instance.Count - 1; num >= 0; num--)
{
Enumerator<UnaryOperatorSignature> enumerator = operators.GetEnumerator();
while (enumerator.MoveNext())
{
if (SourceMemberContainerTypeSymbol.DoOperatorsPair(enumerator.Current.Method, instance[num].Method))
{
instance.RemoveAt(num);
break;
}
}
}
}
operators.AddRange(instance);
instance.Free();
}
addLiftedOperators(constrainedToTypeOpt, kind, operators);
void addLiftedOperators(TypeSymbol constrainedToTypeOpt2, UnaryOperatorKind unaryOperatorKind, ArrayBuilder<UnaryOperatorSignature> val)
{
switch (unaryOperatorKind)
{
case UnaryOperatorKind.PostfixIncrement:
case UnaryOperatorKind.PostfixDecrement:
case UnaryOperatorKind.PrefixIncrement:
case UnaryOperatorKind.PrefixDecrement:
case UnaryOperatorKind.UnaryPlus:
case UnaryOperatorKind.UnaryMinus:
case UnaryOperatorKind.LogicalNegation:
case UnaryOperatorKind.BitwiseComplement:
{
for (int num2 = val.Count - 1; num2 >= 0; num2--)
{
MethodSymbol method = val[num2].Method;
TypeSymbol parameterType = method.GetParameterType(0);
TypeSymbol returnType = method.ReturnType;
if (parameterType.IsValidNullableTypeArgument() && returnType.IsValidNullableTypeArgument())
{
val.Add(new UnaryOperatorSignature(UnaryOperatorKind.UserDefined | UnaryOperatorKind.Lifted | unaryOperatorKind, MakeNullable(parameterType), MakeNullable(returnType), method, constrainedToTypeOpt2));
}
}
break;
}
}
}
static void getDeclaredOperators(TypeSymbol constrainedToTypeOpt2, NamedTypeSymbol namedTypeSymbol, UnaryOperatorKind unaryOperatorKind, string name2, ArrayBuilder<UnaryOperatorSignature> val)
{
ImmutableArray<MethodSymbol>.Enumerator enumerator2 = namedTypeSymbol.GetOperators(name2).GetEnumerator();
while (enumerator2.MoveNext())
{
MethodSymbol current = enumerator2.Current;
if (current.ParameterCount == 1 && !current.ReturnsVoid)
{
TypeSymbol parameterType = current.GetParameterType(0);
TypeSymbol returnType = current.ReturnType;
val.Add(new UnaryOperatorSignature(UnaryOperatorKind.UserDefined | unaryOperatorKind, parameterType, returnType, current, constrainedToTypeOpt2));
}
}
}
}
public OverloadResolution(Binder binder)
{
_binder = binder;
}
private static bool AnyValidResult<TMember>(ArrayBuilder<MemberResolutionResult<TMember>> results) where TMember : Symbol
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
Enumerator<MemberResolutionResult<TMember>> enumerator = results.GetEnumerator();
while (enumerator.MoveNext())
{
if (enumerator.Current.IsValid)
{
return true;
}
}
return false;
}
private static bool SingleValidResult<TMember>(ArrayBuilder<MemberResolutionResult<TMember>> results) where TMember : Symbol
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
bool flag = false;
Enumerator<MemberResolutionResult<TMember>> enumerator = results.GetEnumerator();
while (enumerator.MoveNext())
{
if (enumerator.Current.IsValid)
{
if (flag)
{
return false;
}
flag = true;
}
}
return flag;
}
public void ObjectCreationOverloadResolution(ImmutableArray<MethodSymbol> constructors, AnalyzedArguments arguments, OverloadResolutionResult<MethodSymbol> result, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
{
ArrayBuilder<MemberResolutionResult<MethodSymbol>> resultsBuilder = result.ResultsBuilder;
PerformObjectCreationOverloadResolution(resultsBuilder, constructors, arguments, completeResults: false, ref useSiteInfo);
if (!OverloadResolutionResultIsValid<MethodSymbol>(resultsBuilder, arguments.HasDynamicArgument))
{
result.Clear();
PerformObjectCreationOverloadResolution(resultsBuilder, constructors, arguments, completeResults: true, ref useSiteInfo);
}
}
public void MethodInvocationOverloadResolution(ArrayBuilder<MethodSymbol> methods, ArrayBuilder<TypeWithAnnotations> typeArguments, BoundExpression receiver, AnalyzedArguments arguments, OverloadResolutionResult<MethodSymbol> result, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool isMethodGroupConversion = false, bool allowRefOmittedArguments = false, bool inferWithDynamic = false, bool allowUnexpandedForm = true, RefKind returnRefKind = (RefKind)0, TypeSymbol returnType = null, bool isFunctionPointerResolution = false, bool isExtensionMethodResolution = false, in CallingConventionInfo callingConventionInfo = default(CallingConventionInfo))
{
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
MethodOrPropertyOverloadResolution(methods, typeArguments, receiver, arguments, result, isMethodGroupConversion, allowRefOmittedArguments, ref useSiteInfo, inferWithDynamic, allowUnexpandedForm, returnRefKind, returnType, isFunctionPointerResolution, isExtensionMethodResolution, in callingConventionInfo);
}
public void PropertyOverloadResolution(ArrayBuilder<PropertySymbol> indexers, BoundExpression receiverOpt, AnalyzedArguments arguments, OverloadResolutionResult<PropertySymbol> result, bool allowRefOmittedArguments, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
{
ArrayBuilder<TypeWithAnnotations> instance = ArrayBuilder<TypeWithAnnotations>.GetInstance();
MethodOrPropertyOverloadResolution(indexers, instance, receiverOpt, arguments, result, isMethodGroupConversion: false, allowRefOmittedArguments, ref useSiteInfo, inferWithDynamic: false, allowUnexpandedForm: true, (RefKind)0, null, isFunctionPointerResolution: false, isExtensionMethodResolution: false, default(CallingConventionInfo));
instance.Free();
}
internal void MethodOrPropertyOverloadResolution<TMember>(ArrayBuilder<TMember> members, ArrayBuilder<TypeWithAnnotations> typeArguments, BoundExpression receiver, AnalyzedArguments arguments, OverloadResolutionResult<TMember> result, bool isMethodGroupConversion, bool allowRefOmittedArguments, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool inferWithDynamic = false, bool allowUnexpandedForm = true, RefKind returnRefKind = (RefKind)0, TypeSymbol returnType = null, bool isFunctionPointerResolution = false, bool isExtensionMethodResolution = false, in CallingConventionInfo callingConventionInfo = default(CallingConventionInfo)) where TMember : Symbol
{
//IL_0042: Unknown result type (might be due to invalid IL or missing references)
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
ArrayBuilder<MemberResolutionResult<TMember>> resultsBuilder = result.ResultsBuilder;
bool checkOverriddenOrHidden = !isExtensionMethodResolution || !ArrayBuilderExtensions.All<TMember>(members, (Func<TMember, bool>)((TMember m) => m.ContainingSymbol is NamedTypeSymbol { BaseTypeNoUseSiteDiagnostics: { } baseTypeNoUseSiteDiagnostics } && (int)baseTypeNoUseSiteDiagnostics.SpecialType == 1));
PerformMemberOverloadResolution<TMember>(resultsBuilder, members, typeArguments, receiver, arguments, completeResults: false, isMethodGroupConversion, returnRefKind, returnType, allowRefOmittedArguments, isFunctionPointerResolution, in callingConventionInfo, ref useSiteInfo, inferWithDynamic, allowUnexpandedForm, checkOverriddenOrHidden);
if (!OverloadResolutionResultIsValid<TMember>(resultsBuilder, arguments.HasDynamicArgument))
{
result.Clear();
PerformMemberOverloadResolution<TMember>(resultsBuilder, members, typeArguments, receiver, arguments, completeResults: true, isMethodGroupConversion, returnRefKind, returnType, allowRefOmittedArguments, isFunctionPointerResolution, in callingConventionInfo, ref useSiteInfo, inferWithDynamic: false, allowUnexpandedForm, checkOverriddenOrHidden);
}
}
private static bool OverloadResolutionResultIsValid<TMember>(ArrayBuilder<MemberResolutionResult<TMember>> results, bool hasDynamicArgument) where TMember : Symbol
{
//IL_0004: Unknown result type (might be due to invalid IL or missing references)
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
if (hasDynamicArgument)
{
Enumerator<MemberResolutionResult<TMember>> enumerator = results.GetEnumerator();
while (enumerator.MoveNext())
{
if (enumerator.Current.Result.IsApplicable)
{
return true;
}
}
return false;
}
return SingleValidResult<TMember>(results);
}
private void PerformMemberOverloadResolution<TMember>(ArrayBuilder<MemberResolutionResult<TMember>> results, ArrayBuilder<TMember> members, ArrayBuilder<TypeWithAnnotations> typeArguments, BoundExpression receiver, AnalyzedArguments arguments, bool completeResults, bool isMethodGroupConversion, RefKind returnRefKind, TypeSymbol returnType, bool allowRefOmittedArguments, bool isFunctionPointerResolution, in CallingConventionInfo callingConventionInfo, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool inferWithDynamic, bool allowUnexpandedForm, bool checkOverriddenOrHidden) where TMember : Symbol
{
//IL_0086: Unknown result type (might be due to invalid IL or missing references)
//IL_008b: Unknown result type (might be due to invalid IL or missing references)
//IL_009d: Unknown result type (might be due to invalid IL or missing references)
Dictionary<NamedTypeSymbol, ArrayBuilder<TMember>> containingTypeMapOpt = null;
if (checkOverriddenOrHidden && members.Count > 50)
{
containingTypeMapOpt = PartitionMembersByContainingType<TMember>(members);
}
for (int i = 0; i < members.Count; i++)
{
AddMemberToCandidateSet(members[i], results, members, typeArguments, arguments, completeResults, isMethodGroupConversion, allowRefOmittedArguments, containingTypeMapOpt, inferWithDynamic, ref useSiteInfo, allowUnexpandedForm, checkOverriddenOrHidden);
}
ClearContainingTypeMap(ref containingTypeMapOpt);
RemoveInaccessibleTypeArguments<TMember>(results, ref useSiteInfo);
if (checkOverriddenOrHidden)
{
RemoveLessDerivedMembers<TMember>(results, ref useSiteInfo);
}
if (Compilation.LanguageVersion.AllowImprovedOverloadCandidates())
{
RemoveStaticInstanceMismatches<TMember>(results, arguments, receiver);
RemoveConstraintViolations<TMember>(results, new CompoundUseSiteInfo<AssemblySymbol>(useSiteInfo));
if (isMethodGroupConversion)
{
RemoveDelegateConversionsWithWrongReturnType<TMember>(results, ref useSiteInfo, returnRefKind, returnType, isFunctionPointerResolution);
}
}
if (isFunctionPointerResolution)
{
RemoveCallingConventionMismatches<TMember>(results, in callingConventionInfo);
RemoveMethodsNotDeclaredStatic<TMember>(results);
}
ReportUseSiteInfo<TMember>(results, ref useSiteInfo);
if (AnyValidResult<TMember>(results))
{
RemoveWorseMembers<TMember>(results, arguments, ref useSiteInfo);
}
}
internal void FunctionPointerOverloadResolution(ArrayBuilder<FunctionPointerMethodSymbol> funcPtrBuilder, AnalyzedArguments analyzedArguments, OverloadResolutionResult<FunctionPointerMethodSymbol> overloadResolutionResult, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
{
ArrayBuilder<TypeWithAnnotations> instance = ArrayBuilder<TypeWithAnnotations>.GetInstance();
AddMemberToCandidateSet(funcPtrBuilder[0], overloadResolutionResult.ResultsBuilder, funcPtrBuilder, instance, analyzedArguments, completeResults: true, isMethodGroupConversion: false, allowRefOmittedArguments: false, null, inferWithDynamic: false, ref useSiteInfo, allowUnexpandedForm: true);
ReportUseSiteInfo<FunctionPointerMethodSymbol>(overloadResolutionResult.ResultsBuilder, ref useSiteInfo);
}
private void RemoveStaticInstanceMismatches<TMember>(ArrayBuilder<MemberResolutionResult<TMember>> results, AnalyzedArguments arguments, BoundExpression receiverOpt) where TMember : Symbol
{
if (!arguments.IsExtensionMethodInvocation && !Binder.IsTypeOrValueExpression(receiverOpt))
{
bool flag = Binder.WasImplicitReceiver(receiverOpt);
bool inStaticContext;
bool flag2 = !_binder.HasThis(!flag, out inStaticContext) || inStaticContext;
if (!flag || flag2)
{
bool requireStatic = (flag && flag2) || Binder.IsMemberAccessedThroughType(receiverOpt);
RemoveStaticInstanceMismatches<TMember>(results, requireStatic);
}
}
}
private static void RemoveStaticInstanceMismatches<TMember>(ArrayBuilder<MemberResolutionResult<TMember>> results, bool requireStatic) where TMember : Symbol
{
for (int i = 0; i < results.Count; i++)
{
MemberResolutionResult<TMember> memberResolutionResult = results[i];
TMember member = memberResolutionResult.Member;
if (memberResolutionResult.Result.IsValid && member.RequiresInstanceReceiver() == requireStatic)
{
results[i] = memberResolutionResult.WithResult(MemberAnalysisResult.StaticInstanceMismatch());
}
}
}
private static void RemoveMethodsNotDeclaredStatic<TMember>(ArrayBuilder<MemberResolutionResult<TMember>> results) where TMember : Symbol
{
for (int i = 0; i < results.Count; i++)
{
MemberResolutionResult<TMember> memberResolutionResult = results[i];
TMember member = memberResolutionResult.Member;
if (memberResolutionResult.Result.IsValid && !member.IsStatic)
{
results[i] = memberResolutionResult.WithResult(MemberAnalysisResult.StaticInstanceMismatch());
}
}
}
private void RemoveConstraintViolations<TMember>(ArrayBuilder<MemberResolutionResult<TMember>> results, CompoundUseSiteInfo<AssemblySymbol> template) where TMember : Symbol
{
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
if (typeof(TMember) != typeof(MethodSymbol))
{
return;
}
for (int i = 0; i < results.Count; i++)
{
MemberResolutionResult<TMember> memberResolutionResult = results[i];
MethodSymbol method = (MethodSymbol)(object)memberResolutionResult.Member;
if ((memberResolutionResult.Result.IsValid || memberResolutionResult.Result.Kind == MemberResolutionKind.ConstructedParameterFailedConstraintCheck) && FailsConstraintChecks(method, out var constraintFailureDiagnosticsOpt, template))
{
results[i] = memberResolutionResult.WithResult(MemberAnalysisResult.ConstraintFailure(constraintFailureDiagnosticsOpt.ToImmutableAndFree()));
}
}
}
private void RemoveCallingConventionMismatches<TMember>(ArrayBuilder<MemberResolutionResult<TMember>> results, in CallingConventionInfo expectedConvention) where TMember : Symbol
{
//IL_0080: Unknown result type (might be due to invalid IL or missing references)
//IL_0085: Unknown result type (might be due to invalid IL or missing references)
//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
//IL_0143: Unknown result type (might be due to invalid IL or missing references)
//IL_014c: Unknown result type (might be due to invalid IL or missing references)
//IL_014f: Unknown result type (might be due to invalid IL or missing references)
//IL_010c: Unknown result type (might be due to invalid IL or missing references)
//IL_013d: Unknown result type (might be due to invalid IL or missing references)
//IL_016e: Unknown result type (might be due to invalid IL or missing references)
//IL_0118: Unknown result type (might be due to invalid IL or missing references)
//IL_0124: Unknown result type (might be due to invalid IL or missing references)
//IL_0130: Unknown result type (might be due to invalid IL or missing references)
if (typeof(TMember) != typeof(MethodSymbol) || _binder.InAttributeArgument || (_binder.Flags & BinderFlags.InContextualAttributeBinder) != BinderFlags.None)
{
return;
}
for (int i = 0; i < results.Count; i++)
{
MemberResolutionResult<TMember> result = results[i];
MethodSymbol methodSymbol = (MethodSymbol)(object)result.Member;
if (!result.Result.IsValid)
{
continue;
}
UnmanagedCallersOnlyAttributeData unmanagedCallersOnlyAttributeData = methodSymbol.GetUnmanagedCallersOnlyAttributeData(forceComplete: true);
CallingConvention val;
ImmutableHashSet<INamedTypeSymbolInternal> immutableHashSet;
ImmutableHashSet<INamedTypeSymbolInternal> callingConventionTypes;
if (unmanagedCallersOnlyAttributeData == null)
{
val = methodSymbol.CallingConvention;
immutableHashSet = ImmutableHashSet<INamedTypeSymbolInternal>.Empty;
}
else
{
callingConventionTypes = unmanagedCallersOnlyAttributeData.CallingConventionTypes;
int count = callingConventionTypes.Count;
if (count != 0)
{
if (count != 1)
{
goto IL_013b;
}
switch (((ISymbolInternal)callingConventionTypes.Single()).Name)
{
case "CallConvCdecl":
break;
case "CallConvStdcall":
goto IL_0117;
case "CallConvThiscall":
goto IL_0123;
case "CallConvFastcall":
goto IL_012f;
default:
goto IL_013b;
}
val = (CallingConvention)1;
immutableHashSet = ImmutableHashSet<INamedTypeSymbolInternal>.Empty;
}
else
{
val = (CallingConvention)9;
immutableHashSet = ImmutableHashSet<INamedTypeSymbolInternal>.Empty;
}
}
goto IL_0143;
IL_013b:
val = (CallingConvention)9;
immutableHashSet = callingConventionTypes;
goto IL_0143;
IL_012f:
val = (CallingConvention)4;
immutableHashSet = ImmutableHashSet<INamedTypeSymbolInternal>.Empty;
goto IL_0143;
IL_0123:
val = (CallingConvention)3;
immutableHashSet = ImmutableHashSet<INamedTypeSymbolInternal>.Empty;
goto IL_0143;
IL_0117:
val = (CallingConvention)2;
immutableHashSet = ImmutableHashSet<INamedTypeSymbolInternal>.Empty;
goto IL_0143;
IL_0143:
if (CallingConventionUtils.HasUnknownCallingConventionAttributeBits(val) || !CallingConventionUtils.IsCallingConvention(val, expectedConvention.CallKind))
{
results[i] = makeWrongCallingConvention(result);
}
else
{
if (!CallingConventionUtils.IsCallingConvention(expectedConvention.CallKind, (CallingConvention)9))
{
continue;
}
if (expectedConvention.UnmanagedCallingConventionTypes.Count != immutableHashSet.Count)
{
results[i] = makeWrongCallingConvention(result);
continue;
}
foreach (CustomModifier unmanagedCallingConventionType in expectedConvention.UnmanagedCallingConventionTypes)
{
if (!immutableHashSet.Contains((INamedTypeSymbolInternal)(object)((CSharpCustomModifier)(object)unmanagedCallingConventionType).ModifierSymbol))
{
results[i] = makeWrongCallingConvention(result);
break;
}
}
}
}
static MemberResolutionResult<TMember> makeWrongCallingConvention(MemberResolutionResult<TMember> memberResolutionResult)
{
return memberResolutionResult.WithResult(MemberAnalysisResult.WrongCallingConvention());
}
}
private bool FailsConstraintChecks(MethodSymbol method, out ArrayBuilder<TypeParameterDiagnosticInfo> constraintFailureDiagnosticsOpt, CompoundUseSiteInfo<AssemblySymbol> template)
{
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
if (method.Arity == 0 || (object)method.OriginalDefinition == method)
{
constraintFailureDiagnosticsOpt = null;
return false;
}
ArrayBuilder<TypeParameterDiagnosticInfo> instance = ArrayBuilder<TypeParameterDiagnosticInfo>.GetInstance();
ArrayBuilder<TypeParameterDiagnosticInfo> useSiteDiagnosticsBuilder = null;
if (!ConstraintsHelper.CheckMethodConstraints(method, new ConstraintsHelper.CheckConstraintsArgs(Compilation, Conversions, includeNullability: false, NoLocation.Singleton, null, template), instance, null, ref useSiteDiagnosticsBuilder))
{
if (useSiteDiagnosticsBuilder != null)
{
instance.AddRange(useSiteDiagnosticsBuilder);
useSiteDiagnosticsBuilder.Free();
}
constraintFailureDiagnosticsOpt = instance;
return true;
}
instance.Free();
useSiteDiagnosticsBuilder?.Free();
constraintFailureDiagnosticsOpt = null;
return false;
}
private void RemoveDelegateConversionsWithWrongReturnType<TMember>(ArrayBuilder<MemberResolutionResult<TMember>> results, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, RefKind? returnRefKind, TypeSymbol returnType, bool isFunctionPointerConversion) where TMember : Symbol
{
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_005c: Unknown result type (might be due to invalid IL or missing references)
//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
for (int i = 0; i < results.Count; i++)
{
MemberResolutionResult<TMember> memberResolutionResult = results[i];
if (!memberResolutionResult.Result.IsValid)
{
continue;
}
MethodSymbol methodSymbol = (MethodSymbol)(object)memberResolutionResult.Member;
bool flag;
if ((object)returnType == null || methodSymbol.ReturnType.Equals(returnType, (TypeCompareKind)63))
{
flag = true;
}
else if (returnRefKind == (RefKind?)0)
{
flag = Conversions.HasIdentityOrImplicitReferenceConversion(methodSymbol.ReturnType, returnType, ref useSiteInfo);
if (!flag && isFunctionPointerConversion)
{
flag = ConversionsBase.HasImplicitPointerToVoidConversion(methodSymbol.ReturnType, returnType) || Conversions.HasImplicitPointerConversion(methodSymbol.ReturnType, returnType, ref useSiteInfo);
}
}
else
{
flag = false;
}
if (!flag)
{
results[i] = memberResolutionResult.WithResult(MemberAnalysisResult.WrongReturnType());
}
else if ((RefKind?)methodSymbol.RefKind != returnRefKind)
{
results[i] = memberResolutionResult.WithResult(MemberAnalysisResult.WrongRefKind());
}
}
}
private static Dictionary<NamedTypeSymbol, ArrayBuilder<TMember>> PartitionMembersByContainingType<TMember>(ArrayBuilder<TMember> members) where TMember : Symbol
{
Dictionary<NamedTypeSymbol, ArrayBuilder<TMember>> dictionary = new Dictionary<NamedTypeSymbol, ArrayBuilder<TMember>>();
for (int i = 0; i < members.Count; i++)
{
TMember val = members[i];
NamedTypeSymbol containingType = val.ContainingType;
if (!dictionary.TryGetValue(containingType, out var value))
{
value = (dictionary[containingType] = ArrayBuilder<TMember>.GetInstance());
}
value.Add(val);
}
return dictionary;
}
private static void ClearContainingTypeMap<TMember>(ref Dictionary<NamedTypeSymbol, ArrayBuilder<TMember>> containingTypeMapOpt) where TMember : Symbol
{
if (containingTypeMapOpt == null)
{
return;
}
foreach (ArrayBuilder<TMember> value in containingTypeMapOpt.Values)
{
value.Free();
}
containingTypeMapOpt = null;
}
private void AddConstructorToCandidateSet(MethodSymbol constructor, ArrayBuilder<MemberResolutionResult<MethodSymbol>> results, AnalyzedArguments arguments, bool completeResults, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
{
if (constructor.HasUnsupportedMetadata)
{
if (completeResults)
{
results.Add(new MemberResolutionResult<MethodSymbol>(constructor, constructor, MemberAnalysisResult.UnsupportedMetadata(), hasTypeArgumentInferredFromFunctionType: false));
}
return;
}
MemberAnalysisResult memberAnalysisResult = IsConstructorApplicableInNormalForm(constructor, arguments, completeResults, ref useSiteInfo);
MemberAnalysisResult result = memberAnalysisResult;
if (!memberAnalysisResult.IsValid && IsValidParams(constructor))
{
MemberAnalysisResult memberAnalysisResult2 = IsConstructorApplicableInExpandedForm(constructor, arguments, completeResults, ref useSiteInfo);
if (memberAnalysisResult2.IsValid || completeResults)
{
result = memberAnalysisResult2;
}
}
if (result.IsValid || completeResults || result.HasUseSiteDiagnosticToReportFor(constructor))
{
results.Add(new MemberResolutionResult<MethodSymbol>(constructor, constructor, result, hasTypeArgumentInferredFromFunctionType: false));
}
}
private MemberAnalysisResult IsConstructorApplicableInNormalForm(MethodSymbol constructor, AnalyzedArguments arguments, bool completeResults, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
{
ArgumentAnalysisResult argAnalysis = AnalyzeArguments(constructor, arguments, isMethodGroupConversion: false, expanded: false);
if (!argAnalysis.IsValid)
{
return MemberAnalysisResult.ArgumentParameterMismatch(argAnalysis);
}
if (constructor.HasUseSiteError)
{
return MemberAnalysisResult.UseSiteError();
}
EffectiveParameters effectiveParametersInNormalForm = GetEffectiveParametersInNormalForm(constructor, arguments.Arguments.Count, argAnalysis.ArgsToParamsOpt, arguments.RefKinds, isMethodGroupConversion: false, allowRefOmittedArguments: false);
return IsApplicable(constructor, effectiveParametersInNormalForm, arguments, argAnalysis.ArgsToParamsOpt, constructor.IsVararg, hasAnyRefOmittedArgument: false, ignoreOpenTypes: false, completeResults, ref useSiteInfo);
}
private MemberAnalysisResult IsConstructorApplicableInExpandedForm(MethodSymbol constructor, AnalyzedArguments arguments, bool completeResults, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
{
ArgumentAnalysisResult argAnalysis = AnalyzeArguments(constructor, arguments, isMethodGroupConversion: false, expanded: true);
if (!argAnalysis.IsValid)
{
return MemberAnalysisResult.ArgumentParameterMismatch(argAnalysis);
}
if (constructor.HasUseSiteError)
{
return MemberAnalysisResult.UseSiteError();
}
EffectiveParameters effectiveParametersInExpandedForm = GetEffectiveParametersInExpandedForm(constructor, arguments.Arguments.Count, argAnalysis.ArgsToParamsOpt, arguments.RefKinds, isMethodGroupConversion: false, allowRefOmittedArguments: false);
MemberAnalysisResult result = IsApplicable(constructor, effectiveParametersInExpandedForm, arguments, argAnalysis.ArgsToParamsOpt, isVararg: false, hasAnyRefOmittedArgument: false, ignoreOpenTypes: false, completeResults, ref useSiteInfo);
if (!result.IsValid)
{
return result;
}
return MemberAnalysisResult.ExpandedForm(result.ArgsToParamsOpt, result.ConversionsOpt, hasAnyRefOmittedArgument: false);
}
private void AddMemberToCandidateSet<TMember>(TMember member, ArrayBuilder<MemberResolutionResult<TMember>> results, ArrayBuilder<TMember> members, ArrayBuilder<TypeWithAnnotations> typeArguments, AnalyzedArguments arguments, bool completeResults, bool isMethodGroupConversion, bool allowRefOmittedArguments, Dictionary<NamedTypeSymbol, ArrayBuilder<TMember>> containingTypeMapOpt, bool inferWithDynamic, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool allowUnexpandedForm, bool checkOverriddenOrHidden = true) where TMember : Symbol
{
if (checkOverriddenOrHidden && members.Count >= 2)
{
if (containingTypeMapOpt == null)
{
if (MemberGroupContainsMoreDerivedOverride(members, member, checkOverrideContainingType: true, ref useSiteInfo) || MemberGroupHidesByName(members, member, ref useSiteInfo))
{
return;
}
}
else if (containingTypeMapOpt.Count != 1)
{
NamedTypeSymbol containingType = member.ContainingType;
foreach (KeyValuePair<NamedTypeSymbol, ArrayBuilder<TMember>> item in containingTypeMapOpt)
{
if (item.Key.IsDerivedFrom(containingType, (TypeCompareKind)0, ref useSiteInfo))
{
ArrayBuilder<TMember> value = item.Value;
if (MemberGroupContainsMoreDerivedOverride(value, member, checkOverrideContainingType: false, ref useSiteInfo) || MemberGroupHidesByName(value, member, ref useSiteInfo))
{
return;
}
}
}
}
}
TMember val = (TMember)member.GetLeastOverriddenMember(_binder.ContainingType);
if (member.HasUnsupportedMetadata)
{
if (completeResults)
{
results.Add(new MemberResolutionResult<TMember>(member, val, MemberAnalysisResult.UnsupportedMetadata(), hasTypeArgumentInferredFromFunctionType: false));
}
return;
}
MemberResolutionResult<TMember> memberResolutionResult = ((allowUnexpandedForm || !IsValidParams(val)) ? IsMemberApplicableInNormalForm(member, val, typeArguments, arguments, isMethodGroupConversion, allowRefOmittedArguments, inferWithDynamic, completeResults, ref useSiteInfo) : default(MemberResolutionResult<TMember>));
MemberResolutionResult<TMember> memberResolutionResult2 = memberResolutionResult;
if (!memberResolutionResult.Result.IsValid && !isMethodGroupConversion && IsValidParams(val))
{
MemberResolutionResult<TMember> memberResolutionResult3 = IsMemberApplicableInExpandedForm(member, val, typeArguments, arguments, allowRefOmittedArguments, completeResults, ref useSiteInfo);
if (PreferExpandedFormOverNormalForm(memberResolutionResult.Result, memberResolutionResult3.Result))
{
memberResolutionResult2 = memberResolutionResult3;
}
}
if (memberResolutionResult2.Result.IsValid || completeResults || memberResolutionResult2.HasUseSiteDiagnosticToReport)
{
results.Add(memberResolutionResult2);
}
else
{
memberResolutionResult2.Member.AddUseSiteInfo(ref useSiteInfo, addDiagnostics: false);
}
}
private static bool PreferExpandedFormOverNormalForm(MemberAnalysisResult normalResult, MemberAnalysisResult expandedResult)
{
if (expandedResult.IsValid)
{
return true;
}
MemberResolutionKind kind = normalResult.Kind;
if (kind == MemberResolutionKind.NoCorrespondingParameter || kind == MemberResolutionKind.RequiredParameterMissing)
{
switch (expandedResult.Kind)
{
case MemberResolutionKind.NoCorrespondingNamedParameter:
case MemberResolutionKind.DuplicateNamedArgument:
case MemberResolutionKind.NameUsedForPositional:
case MemberResolutionKind.BadNonTrailingNamedArgument:
case MemberResolutionKind.UseSiteError:
case MemberResolutionKind.BadArgumentConversion:
case MemberResolutionKind.TypeInferenceFailed:
case MemberResolutionKind.TypeInferenceExtensionInstanceArgument:
case MemberResolutionKind.ConstructedParameterFailedConstraintCheck:
return true;
}
}
return false;
}
public static bool IsValidParams(Symbol member)
{
if (member.GetIsVararg())
{
return false;
}
if (member.GetParameterCount() == 0)
{
return false;
}
return IsValidParamsParameter(member.GetParameters().Last());
}
public static bool IsValidParamsParameter(ParameterSymbol final)
{
if (final.IsParams)
{
return final.OriginalDefinition.Type.IsSZArray();
}
return false;
}
private static bool IsMoreDerivedOverride(Symbol member, Symbol moreDerivedOverride, bool checkOverrideContainingType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
{
if (!moreDerivedOverride.IsOverride || (checkOverrideContainingType && !moreDerivedOverride.ContainingType.IsDerivedFrom(member.ContainingType, (TypeCompareKind)0, ref useSiteInfo)) || !MemberSignatureComparer.SloppyOverrideComparer.Equals(member, moreDerivedOverride))
{
return false;
}
return moreDerivedOverride.GetLeastOverriddenMember(null).OriginalDefinition == member.GetLeastOverriddenMember(null).OriginalDefinition;
}
private static bool MemberGroupContainsMoreDerivedOverride<TMember>(ArrayBuilder<TMember> members, TMember member, bool checkOverrideContainingType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) where TMember : Symbol
{
if (!member.IsVirtual && !member.IsAbstract && !member.IsOverride)
{
return false;
}
if (!member.ContainingType.IsClassType())
{
return false;
}
for (int i = 0; i < members.Count; i++)
{
if (IsMoreDerivedOverride(member, members[i], checkOverrideContainingType, ref useSiteInfo))
{
return true;
}
}
return false;
}
private static bool MemberGroupHidesByName<TMember>(ArrayBuilder<TMember> members, TMember member, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) where TMember : Symbol
{
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
NamedTypeSymbol containingType = member.ContainingType;
Enumerator<TMember> enumerator = members.GetEnumerator();
while (enumerator.MoveNext())
{
TMember current = enumerator.Current;
NamedTypeSymbol containingType2 = current.ContainingType;
if (HidesByName(current) && containingType2.IsDerivedFrom(containingType, (TypeCompareKind)0, ref useSiteInfo))
{
return true;
}
}
return false;
}
private static bool HidesByName(Symbol member)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Invalid comparison between Unknown and I4
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Invalid comparison between Unknown and I4
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
SymbolKind kind = member.Kind;
if ((int)kind != 9)
{
if ((int)kind == 15)
{
return ((PropertySymbol)member).HidesBasePropertiesByName;
}
throw ExceptionUtilities.UnexpectedValue((object)member.Kind);
}
return ((MethodSymbol)member).HidesBaseMethodsByName;
}
private void RemoveInaccessibleTypeArguments<TMember>(ArrayBuilder<MemberResolutionResult<TMember>> results, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) where TMember : Symbol
{
for (int i = 0; i < results.Count; i++)
{
MemberResolutionResult<TMember> memberResolutionResult = results[i];
if (memberResolutionResult.Result.IsValid && !TypeArgumentsAccessible(memberResolutionResult.Member.GetMemberTypeArgumentsNoUseSiteDiagnostics(), ref useSiteInfo))
{
results[i] = memberResolutionResult.WithResult(MemberAnalysisResult.InaccessibleTypeArgument());
}
}
}
private bool TypeArgumentsAccessible(ImmutableArray<TypeSymbol> typeArguments, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
{
ImmutableArray<TypeSymbol>.Enumerator enumerator = typeArguments.GetEnumerator();
while (enumerator.MoveNext())
{
TypeSymbol current = enumerator.Current;
if (!_binder.IsAccessible(current, ref useSiteInfo))
{
return false;
}
}
return true;
}
private static void RemoveLessDerivedMembers<TMember>(ArrayBuilder<MemberResolutionResult<TMember>> results, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) where TMember : Symbol
{
RemoveAllInterfaceMembers<TMember>(results);
for (int i = 0; i < results.Count; i++)
{
MemberResolutionResult<TMember> memberResolutionResult = results[i];
if ((memberResolutionResult.Result.IsValid || memberResolutionResult.HasUseSiteDiagnosticToReport) && IsLessDerivedThanAny<TMember>(i, memberResolutionResult.LeastOverriddenMember.ContainingType, results, ref useSiteInfo))
{
results[i] = memberResolutionResult.WithResult(MemberAnalysisResult.LessDerived());
}
}
}
private static bool IsLessDerivedThanAny<TMember>(int index, TypeSymbol type, ArrayBuilder<MemberResolutionResult<TMember>> results, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) where TMember : Symbol
{
//IL_003a: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Invalid comparison between Unknown and I4
//IL_0043: Unknown result type (might be due to invalid IL or missing references)
//IL_0049: Invalid comparison between Unknown and I4
for (int i = 0; i < results.Count; i++)
{
if (i == index)
{
continue;
}
MemberResolutionResult<TMember> memberResolutionResult = results[i];
if (memberResolutionResult.Result.IsValid)
{
NamedTypeSymbol containingType = memberResolutionResult.LeastOverriddenMember.ContainingType;
if ((int)type.SpecialType == 1 && (int)containingType.SpecialType != 1)
{
return true;
}
if (containingType.IsInterfaceType() && type.IsInterfaceType() && containingType.AllInterfacesWithDefinitionUseSiteDiagnostics(ref useSiteInfo).Contains((NamedTypeSymbol)type))
{
return true;
}
if (containingType.IsClassType() && type.IsClassType() && containingType.IsDerivedFrom(type, (TypeCompareKind)0, ref useSiteInfo))
{
return true;
}
}
}
return false;
}
private static void RemoveAllInterfaceMembers<TMember>(ArrayBuilder<MemberResolutionResult<TMember>> results) where TMember : Symbol
{
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: Invalid comparison between Unknown and I4
bool flag = false;
for (int i = 0; i < results.Count; i++)
{
MemberResolutionResult<TMember> memberResolutionResult = results[i];
if (memberResolutionResult.Result.IsValid)
{
NamedTypeSymbol containingType = memberResolutionResult.LeastOverriddenMember.ContainingType;
if (containingType.IsClassType() && (int)containingType.GetSpecialTypeSafe() != 1)
{
flag = true;
break;
}
}
}
if (!flag)
{
return;
}
for (int j = 0; j < results.Count; j++)
{
MemberResolutionResult<TMember> memberResolutionResult2 = results[j];
if (memberResolutionResult2.Result.IsValid && memberResolutionResult2.Member.ContainingType.IsInterfaceType())
{
results[j] = memberResolutionResult2.WithResult(MemberAnalysisResult.LessDerived());
}
}
}
private void PerformObjectCreationOverloadResolution(ArrayBuilder<MemberResolutionResult<MethodSymbol>> results, ImmutableArray<MethodSymbol> constructors, AnalyzedArguments arguments, bool completeResults, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
{
ImmutableArray<MethodSymbol>.Enumerator enumerator = constructors.GetEnumerator();
while (enumerator.MoveNext())
{
MethodSymbol current = enumerator.Current;
AddConstructorToCandidateSet(current, results, arguments, completeResults, ref useSiteInfo);
}
ReportUseSiteInfo<MethodSymbol>(results, ref useSiteInfo);
RemoveWorseMembers<MethodSymbol>(results, arguments, ref useSiteInfo);
}
private static void ReportUseSiteInfo<TMember>(ArrayBuilder<MemberResolutionResult<TMember>> results, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) where TMember : Symbol
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
Enumerator<MemberResolutionResult<TMember>> enumerator = results.GetEnumerator();
while (enumerator.MoveNext())
{
MemberResolutionResult<TMember> current = enumerator.Current;
current.Member.AddUseSiteInfo(ref useSiteInfo, current.HasUseSiteDiagnosticToReport);
}
}
private int GetTheBestCandidateIndex<TMember>(ArrayBuilder<MemberResolutionResult<TMember>> results, AnalyzedArguments arguments, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) where TMember : Symbol
{
int num = -1;
for (int i = 0; i < results.Count; i++)
{
if (!results[i].IsValid)
{
continue;
}
if (num == -1)
{
num = i;
continue;
}
if (results[num].Member == results[i].Member)
{
num = -1;
continue;
}
switch (BetterFunctionMember(results[num], results[i], arguments.Arguments, ref useSiteInfo))
{
case BetterResult.Right:
num = i;
break;
default:
num = -1;
break;
case BetterResult.Left:
break;
}
}
for (int j = 0; j < num; j++)
{
if (results[j].IsValid)
{
if (results[num].Member == results[j].Member)
{
return -1;
}
if (BetterFunctionMember(results[num], results[j], arguments.Arguments, ref useSiteInfo) != BetterResult.Left)
{
return -1;
}
}
}
return num;
}
private void RemoveWorseMembers<TMember>(ArrayBuilder<MemberResolutionResult<TMember>> results, AnalyzedArguments arguments, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) where TMember : Symbol
{
if (SingleValidResult<TMember>(results))
{
return;
}
int theBestCandidateIndex = GetTheBestCandidateIndex<TMember>(results, arguments, ref useSiteInfo);
if (theBestCandidateIndex != -1)
{
for (int i = 0; i < results.Count; i++)
{
if (results[i].IsValid && i != theBestCandidateIndex)
{
results[i] = results[i].Worse();
}
}
return;
}
ArrayBuilder<int> instance = ArrayBuilder<int>.GetInstance(results.Count, 0);
int num = 0;
int num2 = -1;
for (int j = 0; j < results.Count; j++)
{
MemberResolutionResult<TMember> m = results[j];
if (!m.IsValid || instance[j] == 1)
{
continue;
}
for (int k = 0; k < results.Count; k++)
{
MemberResolutionResult<TMember> m2 = results[k];
if (m2.IsValid && j != k && !(m.Member == m2.Member))
{
switch (BetterFunctionMember(m, m2, arguments.Arguments, ref useSiteInfo))
{
case BetterResult.Left:
instance[k] = 1;
continue;
case BetterResult.Right:
break;
default:
continue;
}
instance[j] = 1;
break;
}
}
if (instance[j] == 0)
{
instance[j] = 2;
num++;
num2 = j;
}
}
switch (num)
{
case 0:
{
for (int n = 0; n < instance.Count; n++)
{
if (instance[n] == 1)
{
results[n] = results[n].Worse();
}
}
break;
}
case 1:
{
for (int num3 = 0; num3 < instance.Count; num3++)
{
if (instance[num3] == 1)
{
results[num3] = ((BetterFunctionMember(results[num2], results[num3], arguments.Arguments, ref useSiteInfo) == BetterResult.Left) ? results[num3].Worst() : results[num3].Worse());
}
}
results[num2] = results[num2].Worse();
break;
}
default:
{
for (int l = 0; l < instance.Count; l++)
{
if (instance[l] == 1)
{
results[l] = results[l].Worst();
}
else if (instance[l] == 2)
{
results[l] = results[l].Worse();
}
}
break;
}
}
instance.Free();
}
private static TypeSymbol GetParameterType(ParameterSymbol parameter, MemberAnalysisResult result)
{
TypeSymbol type = parameter.Type;
if (result.Kind == MemberResolutionKind.ApplicableInExpandedForm && parameter.IsParams && type.IsSZArray())
{
return ((ArrayTypeSymbol)type).ElementType;
}
return type;
}
private static ParameterSymbol GetParameter(int argIndex, MemberAnalysisResult result, ImmutableArray<ParameterSymbol> parameters)
{
int index = result.ParameterFromArgument(argIndex);
return parameters[index];
}
private BetterResult BetterFunctionMember<TMember>(MemberResolutionResult<TMember> m1, MemberResolutionResult<TMember> m2, ArrayBuilder<BoundExpression> arguments, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) where TMember : Symbol
{
bool num = RequiredFunctionType(m1);
bool flag = RequiredFunctionType(m2);
if (!num)
{
if (flag)
{
return BetterResult.Left;
}
}
else if (!flag)
{
return BetterResult.Right;
}
bool hasAnyRefOmittedArgument = m1.Result.HasAnyRefOmittedArgument;
bool hasAnyRefOmittedArgument2 = m2.Result.HasAnyRefOmittedArgument;
if (hasAnyRefOmittedArgument != hasAnyRefOmittedArgument2)
{
if (!hasAnyRefOmittedArgument)
{
return BetterResult.Left;
}
return BetterResult.Right;
}
return BetterFunctionMember(m1, m2, arguments, hasAnyRefOmittedArgument, ref useSiteInfo);
}
private BetterResult BetterFunctionMember<TMember>(MemberResolutionResult<TMember> m1, MemberResolutionResult<TMember> m2, ArrayBuilder<BoundExpression> arguments, bool considerRefKinds, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) where TMember : Symbol
{
//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
//IL_03f5: Unknown result type (might be due to invalid IL or missing references)
//IL_03fa: Unknown result type (might be due to invalid IL or missing references)
//IL_03fc: Unknown result type (might be due to invalid IL or missing references)
//IL_0401: Unknown result type (might be due to invalid IL or missing references)
//IL_04f8: Unknown result type (might be due to invalid IL or missing references)
//IL_04ff: Invalid comparison between Unknown and I4
//IL_0512: Unknown result type (might be due to invalid IL or missing references)
//IL_0519: Invalid comparison between Unknown and I4
BetterResult betterResult = BetterResult.Neither;
bool flag = false;
bool flag2 = false;
ImmutableArray<ParameterSymbol> parameters = m1.LeastOverriddenMember.GetParameters();
ImmutableArray<ParameterSymbol> parameters2 = m2.LeastOverriddenMember.GetParameters();
bool flag3 = true;
int i;
for (i = 0; i < arguments.Count; i++)
{
if (arguments[i].Kind == BoundKind.ArgListOperator)
{
continue;
}
ParameterSymbol parameter = GetParameter(i, m1.Result, parameters);
TypeSymbol parameterType = GetParameterType(parameter, m1.Result);
ParameterSymbol parameter2 = GetParameter(i, m2.Result, parameters2);
TypeSymbol parameterType2 = GetParameterType(parameter2, m2.Result);
bool okToDowngradeToNeither;
BetterResult betterResult2 = BetterConversionFromExpression(arguments[i], parameterType, m1.Result.ConversionForArg(i), parameter.RefKind, parameterType2, m2.Result.ConversionForArg(i), parameter2.RefKind, considerRefKinds, ref useSiteInfo, out okToDowngradeToNeither);
TypeSymbol source = parameterType;
TypeSymbol destination = parameterType2;
if (!_binder.InAttributeArgument)
{
source = parameterType.NormalizeTaskTypes(Compilation);
destination = parameterType2.NormalizeTaskTypes(Compilation);
}
if (betterResult2 == BetterResult.Neither)
{
if (flag3 && Conversions.ClassifyImplicitConversionFromType(source, destination, ref useSiteInfo).Kind != ConversionKind.Identity)
{
flag3 = false;
}
continue;
}
if (Conversions.ClassifyImplicitConversionFromType(source, destination, ref useSiteInfo).Kind != ConversionKind.Identity)
{
flag3 = false;
}
if (betterResult == BetterResult.Neither)
{
if (!(flag2 && okToDowngradeToNeither))
{
betterResult = betterResult2;
flag = okToDowngradeToNeither;
}
}
else if (betterResult != betterResult2)
{
if (flag)
{
if (okToDowngradeToNeither)
{
betterResult = BetterResult.Neither;
flag = false;
flag2 = true;
}
else
{
betterResult = betterResult2;
flag = false;
}
}
else if (!okToDowngradeToNeither)
{
betterResult = BetterResult.Neither;
break;
}
}
else
{
flag = flag && okToDowngradeToNeither;
}
}
if (betterResult != BetterResult.Neither)
{
return betterResult;
}
GetParameterCounts(m1, arguments, out var declaredParameterCount, out var parametersUsedIncludingExpansionAndOptional);
GetParameterCounts(m2, arguments, out var declaredParameterCount2, out var parametersUsedIncludingExpansionAndOptional2);
if (flag3 && parametersUsedIncludingExpansionAndOptional == parametersUsedIncludingExpansionAndOptional2)
{
for (i++; i < arguments.Count; i++)
{
if (arguments[i].Kind != BoundKind.ArgListOperator)
{
TypeSymbol parameterType3 = GetParameterType(GetParameter(i, m1.Result, parameters), m1.Result);
TypeSymbol parameterType4 = GetParameterType(GetParameter(i, m2.Result, parameters2), m2.Result);
TypeSymbol source2 = parameterType3;
TypeSymbol destination2 = parameterType4;
if (!_binder.InAttributeArgument)
{
source2 = parameterType3.NormalizeTaskTypes(Compilation);
destination2 = parameterType4.NormalizeTaskTypes(Compilation);
}
if (Conversions.ClassifyImplicitConversionFromType(source2, destination2, ref useSiteInfo).Kind != ConversionKind.Identity)
{
flag3 = false;
break;
}
}
}
}
if (!flag3 || parametersUsedIncludingExpansionAndOptional != parametersUsedIncludingExpansionAndOptional2)
{
if (parametersUsedIncludingExpansionAndOptional != parametersUsedIncludingExpansionAndOptional2)
{
if (m1.Result.Kind == MemberResolutionKind.ApplicableInExpandedForm)
{
if (m2.Result.Kind != MemberResolutionKind.ApplicableInExpandedForm)
{
return BetterResult.Right;
}
}
else if (m2.Result.Kind == MemberResolutionKind.ApplicableInExpandedForm)
{
return BetterResult.Left;
}
if (parametersUsedIncludingExpansionAndOptional == arguments.Count)
{
return BetterResult.Left;
}
if (parametersUsedIncludingExpansionAndOptional2 == arguments.Count)
{
return BetterResult.Right;
}
}
return PreferValOverInOrRefInterpolatedHandlerParameters(arguments, m1, parameters, m2, parameters2);
}
if (m1.Member.GetMemberArity() == 0)
{
if (m2.Member.GetMemberArity() > 0)
{
return BetterResult.Left;
}
}
else if (m2.Member.GetMemberArity() == 0)
{
return BetterResult.Right;
}
if (m1.Result.Kind == MemberResolutionKind.ApplicableInNormalForm && m2.Result.Kind == MemberResolutionKind.ApplicableInExpandedForm)
{
return BetterResult.Left;
}
if (m1.Result.Kind == MemberResolutionKind.ApplicableInExpandedForm && m2.Result.Kind == MemberResolutionKind.ApplicableInNormalForm)
{
return BetterResult.Right;
}
if (m1.Result.Kind == MemberResolutionKind.ApplicableInExpandedForm && m2.Result.Kind == MemberResolutionKind.ApplicableInExpandedForm)
{
if (declaredParameterCount > declaredParameterCount2)
{
return BetterResult.Left;
}
if (declaredParameterCount < declaredParameterCount2)
{
return BetterResult.Right;
}
}
bool flag4 = m1.Result.Kind == MemberResolutionKind.ApplicableInExpandedForm || declaredParameterCount == arguments.Count;
bool flag5 = m2.Result.Kind == MemberResolutionKind.ApplicableInExpandedForm || declaredParameterCount2 == arguments.Count;
if (flag4 && !flag5)
{
return BetterResult.Left;
}
if (!flag4 && flag5)
{
return BetterResult.Right;
}
TemporaryArray<TypeSymbol> empty = TemporaryArray<TypeSymbol>.Empty;
try
{
TemporaryArray<TypeSymbol> empty2 = TemporaryArray<TypeSymbol>.Empty;
try
{
ImmutableArray<ParameterSymbol> parameters3 = m1.LeastOverriddenMember.OriginalDefinition.GetParameters();
ImmutableArray<ParameterSymbol> parameters4 = m2.LeastOverriddenMember.OriginalDefinition.GetParameters();
for (i = 0; i < arguments.Count; i++)
{
if (arguments[i].Kind != BoundKind.ArgListOperator)
{
ParameterSymbol parameter3 = GetParameter(i, m1.Result, parameters3);
empty.Add(GetParameterType(parameter3, m1.Result));
ParameterSymbol parameter4 = GetParameter(i, m2.Result, parameters4);
empty2.Add(GetParameterType(parameter4, m2.Result));
}
}
betterResult = MoreSpecificType(ref TemporaryArrayExtensions.AsRef<TypeSymbol>(ref empty), ref TemporaryArrayExtensions.AsRef<TypeSymbol>(ref empty2), ref useSiteInfo);
if (betterResult != BetterResult.Neither)
{
return betterResult;
}
}
finally
{
((IDisposable)empty2/*cast due to constrained. prefix*/).Dispose();
}
}
finally
{
((IDisposable)empty/*cast due to constrained. prefix*/).Dispose();
}
if ((int)m1.Member.ContainingType.TypeKind == 12 && (int)m2.Member.ContainingType.TypeKind == 12)
{
CSharpCompilation declaringCompilation = m1.Member.DeclaringCompilation;
CSharpCompilation declaringCompilation2 = m2.Member.DeclaringCompilation;
int submissionSlotIndex = ((Compilation)declaringCompilation).GetSubmissionSlotIndex();
int submissionSlotIndex2 = ((Compilation)declaringCompilation2).GetSubmissionSlotIndex();
if (submissionSlotIndex > submissionSlotIndex2)
{
return BetterResult.Left;
}
if (submissionSlotIndex < submissionSlotIndex2)
{
return BetterResult.Right;
}
}
int num = m1.LeastOverriddenMember.CustomModifierCount();
int num2 = m2.LeastOverriddenMember.CustomModifierCount();
if (num != num2)
{
if (num >= num2)
{
return BetterResult.Right;
}
return BetterResult.Left;
}
return PreferValOverInOrRefInterpolatedHandlerParameters(arguments, m1, parameters, m2, parameters2);
}
private static bool RequiredFunctionType<TMember>(MemberResolutionResult<TMember> m) where TMember : Symbol
{
if (m.HasTypeArgumentInferredFromFunctionType)
{
return true;
}
ImmutableArray<Conversion> conversionsOpt = m.Result.ConversionsOpt;
if (conversionsOpt.IsDefault)
{
return false;
}
return conversionsOpt.Any((Conversion c) => c.Kind == ConversionKind.FunctionType);
}
private static BetterResult PreferValOverInOrRefInterpolatedHandlerParameters<TMember>(ArrayBuilder<BoundExpression> arguments, MemberResolutionResult<TMember> m1, ImmutableArray<ParameterSymbol> parameters1, MemberResolutionResult<TMember> m2, ImmutableArray<ParameterSymbol> parameters2) where TMember : Symbol
{
//IL_008c: Unknown result type (might be due to invalid IL or missing references)
//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
//IL_0094: Unknown result type (might be due to invalid IL or missing references)
//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
BetterResult betterResult = BetterResult.Neither;
for (int i = 0; i < arguments.Count; i++)
{
if (arguments[i].Kind == BoundKind.ArgListOperator)
{
continue;
}
ParameterSymbol parameter = GetParameter(i, m1.Result, parameters1);
ParameterSymbol parameter2 = GetParameter(i, m2.Result, parameters2);
bool isInterpolatedStringHandlerConversion = false;
if (m1.IsValid && m2.IsValid)
{
Conversion conversion = m1.Result.ConversionForArg(i);
Conversion conversion2 = m2.Result.ConversionForArg(i);
isInterpolatedStringHandlerConversion = conversion.IsInterpolatedStringHandler && conversion2.IsInterpolatedStringHandler;
}
if ((int)parameter.RefKind == 0 && isAcceptableRefMismatch(parameter2.RefKind, isInterpolatedStringHandlerConversion))
{
if (betterResult == BetterResult.Right)
{
return BetterResult.Neither;
}
betterResult = BetterResult.Left;
}
else if ((int)parameter2.RefKind == 0 && isAcceptableRefMismatch(parameter.RefKind, isInterpolatedStringHandlerConversion))
{
if (betterResult == BetterResult.Left)
{
return BetterResult.Neither;
}
betterResult = BetterResult.Right;
}
}
return betterResult;
static bool isAcceptableRefMismatch(RefKind refKind, bool flag)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0004: Invalid comparison between Unknown and I4
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Invalid comparison between Unknown and I4
if ((int)refKind != 1)
{
if (refKind - 3 <= 1)
{
return true;
}
}
else if (flag)
{
return true;
}
return false;
}
}
private static void GetParameterCounts<TMember>(MemberResolutionResult<TMember> m, ArrayBuilder<BoundExpression> arguments, out int declaredParameterCount, out int parametersUsedIncludingExpansionAndOptional) where TMember : Symbol
{
declaredParameterCount = m.Member.GetParameterCount();
if (m.Result.Kind == MemberResolutionKind.ApplicableInExpandedForm)
{
if (arguments.Count < declaredParameterCount)
{
ImmutableArray<int> argsToParamsOpt = m.Result.ArgsToParamsOpt;
if (argsToParamsOpt.IsDefaultOrEmpty || !argsToParamsOpt.Contains(declaredParameterCount - 1))
{
parametersUsedIncludingExpansionAndOptional = declaredParameterCount - 1;
}
else
{
parametersUsedIncludingExpansionAndOptional = declaredParameterCount;
}
}
else
{
parametersUsedIncludingExpansionAndOptional = arguments.Count;
}
}
else
{
parametersUsedIncludingExpansionAndOptional = declaredParameterCount;
}
}
private static BetterResult MoreSpecificType(ref TemporaryArray<TypeSymbol> t1, ref TemporaryArray<TypeSymbol> t2, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
{
BetterResult betterResult = BetterResult.Neither;
for (int i = 0; i < t1.Count; i++)
{
BetterResult betterResult2 = MoreSpecificType(t1[i], t2[i], ref useSiteInfo);
if (betterResult2 != BetterResult.Neither)
{
if (betterResult == BetterResult.Neither)
{
betterResult = betterResult2;
}
else if (betterResult != betterResult2)
{
return BetterResult.Neither;
}
}
}
return betterResult;
}
private static BetterResult MoreSpecificType(TypeSymbol t1, TypeSymbol t2, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
{
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: Invalid comparison between Unknown and I4
//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
bool flag = t1.IsTypeParameter();
bool flag2 = t2.IsTypeParameter();
if (flag && !flag2)
{
return BetterResult.Right;
}
if (!flag && flag2)
{
return BetterResult.Left;
}
if (flag && flag2)
{
return BetterResult.Neither;
}
if (t1.IsArray())
{
ArrayTypeSymbol obj = (ArrayTypeSymbol)t1;
return MoreSpecificType(t2: ((ArrayTypeSymbol)t2).ElementType, t1: obj.ElementType, useSiteInfo: ref useSiteInfo);
}
if ((int)t1.TypeKind == 9)
{
PointerTypeSymbol obj2 = (PointerTypeSymbol)t1;
return MoreSpecificType(t2: ((PointerTypeSymbol)t2).PointedAtType, t1: obj2.PointedAtType, useSiteInfo: ref useSiteInfo);
}
if (t1.IsDynamic() || t2.IsDynamic())
{
return BetterResult.Neither;
}
NamedTypeSymbol namedTypeSymbol = t1 as NamedTypeSymbol;
NamedTypeSymbol namedTypeSymbol2 = t2 as NamedTypeSymbol;
if ((object)namedTypeSymbol == null)
{
return BetterResult.Neither;
}
TemporaryArray<TypeSymbol> empty = TemporaryArray<TypeSymbol>.Empty;
try
{
TemporaryArray<TypeSymbol> empty2 = TemporaryArray<TypeSymbol>.Empty;
try
{
namedTypeSymbol.GetAllTypeArguments(ref TemporaryArrayExtensions.AsRef<TypeSymbol>(ref empty), ref useSiteInfo);
namedTypeSymbol2.GetAllTypeArguments(ref TemporaryArrayExtensions.AsRef<TypeSymbol>(ref empty2), ref useSiteInfo);
return MoreSpecificType(ref TemporaryArrayExtensions.AsRef<TypeSymbol>(ref empty), ref TemporaryArrayExtensions.AsRef<TypeSymbol>(ref empty2), ref useSiteInfo);
}
finally
{
((IDisposable)empty2/*cast due to constrained. prefix*/).Dispose();
}
}
finally
{
((IDisposable)empty/*cast due to constrained. prefix*/).Dispose();
}
}
private BetterResult BetterConversionFromExpression(BoundExpression node, TypeSymbol t1, TypeSymbol t2, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
{
bool okToDowngradeToNeither;
return BetterConversionFromExpression(node, t1, Conversions.ClassifyImplicitConversionFromExpression(node, t1, ref useSiteInfo), t2, Conversions.ClassifyImplicitConversionFromExpression(node, t2, ref useSiteInfo), ref useSiteInfo, out okToDowngradeToNeither);
}
private BetterResult BetterConversionFromExpression(BoundExpression node, TypeSymbol t1, Conversion conv1, RefKind refKind1, TypeSymbol t2, Conversion conv2, RefKind refKind2, bool considerRefKinds, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, out bool okToDowngradeToNeither)
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Invalid comparison between Unknown and I4
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
okToDowngradeToNeither = false;
if (considerRefKinds)
{
if (refKind1 != refKind2)
{
if ((int)refKind1 == 0)
{
if (conv1.Kind != ConversionKind.Identity)
{
return BetterResult.Neither;
}
return BetterResult.Left;
}
if (conv2.Kind != ConversionKind.Identity)
{
return BetterResult.Neither;
}
return BetterResult.Right;
}
if ((int)refKind1 == 1)
{
return BetterResult.Neither;
}
}
return BetterConversionFromExpression(node, t1, conv1, t2, conv2, ref useSiteInfo, out okToDowngradeToNeither);
}
private BetterResult BetterConversionFromExpression(BoundExpression node, TypeSymbol t1, Conversion conv1, TypeSymbol t2, Conversion conv2, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, out bool okToDowngradeToNeither)
{
okToDowngradeToNeither = false;
if (ConversionsBase.HasIdentityConversion(t1, t2))
{
return BetterResult.Neither;
}
UnboundLambda unboundLambda = node as UnboundLambda;
BoundKind kind = node.Kind;
if (kind == BoundKind.OutVariablePendingInference || kind == BoundKind.OutDeconstructVarPendingInference || (kind == BoundKind.DiscardExpression && !node.HasExpressionType()))
{
okToDowngradeToNeither = false;
return BetterResult.Neither;
}
bool flag = _binder.Compilation.IsFeatureEnabled(MessageID.IDS_FeatureImprovedInterpolatedStrings);
bool flag2;
if (flag)
{
if (node is BoundUnconvertedInterpolatedString boundUnconvertedInterpolatedString)
{
if (boundUnconvertedInterpolatedString.ConstantValueOpt == null)
{
goto IL_0092;
}
}
else if (node is BoundBinaryOperator { IsUnconvertedInterpolatedStringAddition: not false, ConstantValueOpt: null })
{
goto IL_0092;
}
flag2 = false;
goto IL_009a;
}
goto IL_009d;
IL_0092:
flag2 = true;
goto IL_009a;
IL_009a:
flag = flag2;
goto IL_009d;
IL_009d:
ConversionKind kind3;
if (flag)
{
ConversionKind kind2 = conv1.Kind;
kind3 = conv2.Kind;
if (kind2 == ConversionKind.InterpolatedStringHandler)
{
if (kind3 == ConversionKind.InterpolatedStringHandler)
{
return BetterResult.Neither;
}
return BetterResult.Left;
}
if (kind3 == ConversionKind.InterpolatedStringHandler)
{
return BetterResult.Right;
}
}
ConversionKind kind4 = conv1.Kind;
kind3 = conv2.Kind;
if (kind4 == ConversionKind.FunctionType)
{
if (kind3 != ConversionKind.FunctionType)
{
return BetterResult.Right;
}
}
else if (kind3 == ConversionKind.FunctionType)
{
return BetterResult.Left;
}
bool num = ExpressionMatchExactly(node, t1, ref useSiteInfo);
bool flag3 = ExpressionMatchExactly(node, t2, ref useSiteInfo);
if (num)
{
if (!flag3)
{
okToDowngradeToNeither = unboundLambda != null && CanDowngradeConversionFromLambdaToNeither(BetterResult.Left, unboundLambda, t1, t2, ref useSiteInfo, fromTypeAnalysis: false);
return BetterResult.Left;
}
}
else if (flag3)
{
okToDowngradeToNeither = unboundLambda != null && CanDowngradeConversionFromLambdaToNeither(BetterResult.Right, unboundLambda, t1, t2, ref useSiteInfo, fromTypeAnalysis: false);
return BetterResult.Right;
}
if (!conv1.IsConditionalExpression && conv2.IsConditionalExpression)
{
return BetterResult.Left;
}
if (!conv2.IsConditionalExpression && conv1.IsConditionalExpression)
{
return BetterResult.Right;
}
if (conv1.Kind == ConversionKind.CollectionExpression && conv2.Kind == ConversionKind.CollectionExpression)
{
if (IsBetterCollectionExpressionConversion(t1, conv1, t2, conv2, ref useSiteInfo))
{
return BetterResult.Left;
}
if (IsBetterCollectionExpressionConversion(t2, conv2, t1, conv1, ref useSiteInfo))
{
return BetterResult.Right;
}
return BetterResult.Neither;
}
return BetterConversionTarget(node, t1, conv1, t2, conv2, ref useSiteInfo, out okToDowngradeToNeither);
}
private bool IsBetterCollectionExpressionConversion(TypeSymbol t1, Conversion conv1, TypeSymbol t2, Conversion conv2, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
{
TypeSymbol elementType;
CollectionExpressionTypeKind collectionExpressionTypeKind = conv1.GetCollectionExpressionTypeKind(out elementType);
TypeSymbol elementType2;
CollectionExpressionTypeKind collectionExpressionTypeKind2 = conv2.GetCollectionExpressionTypeKind(out elementType2);
if (collectionExpressionTypeKind == CollectionExpressionTypeKind.ReadOnlySpan && collectionExpressionTypeKind2 == CollectionExpressionTypeKind.Span && hasImplicitConversion(elementType, elementType2, ref useSiteInfo))
{
return true;
}
bool flag = (uint)(collectionExpressionTypeKind - 3) <= 1u;
if (flag && IsSZArrayOrArrayInterfaceOrString(t2, out elementType2) && hasImplicitConversion(elementType, elementType2, ref useSiteInfo))
{
return true;
}
flag = (uint)(collectionExpressionTypeKind - 3) <= 1u;
bool flag2 = !flag;
if (flag2)
{
bool flag3 = (uint)(collectionExpressionTypeKind2 - 3) <= 1u;
flag2 = !flag3;
}
if (flag2 && hasImplicitConversion(t1, t2, ref useSiteInfo))
{
return true;
}
return false;
bool hasImplicitConversion(TypeSymbol source, TypeSymbol destination, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo2)
{
return Conversions.ClassifyImplicitConversionFromType(source, destination, ref useSiteInfo2).IsImplicit;
}
}
private bool IsSZArrayOrArrayInterfaceOrString(TypeSymbol type, out TypeSymbol elementType)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Invalid comparison between Unknown and I4
if ((int)type.SpecialType == 20)
{
elementType = Compilation.GetSpecialType((SpecialType)8);
return true;
}
if (type is ArrayTypeSymbol { IsSZArray: not false } arrayTypeSymbol)
{
elementType = arrayTypeSymbol.ElementType;
return true;
}
if (type.IsArrayInterface(out var typeArgument))
{
elementType = typeArgument.Type;
return true;
}
elementType = null;
return false;
}
private bool ExpressionMatchExactly(BoundExpression node, TypeSymbol t, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
{
//IL_0182: Unknown result type (might be due to invalid IL or missing references)
//IL_0187: Unknown result type (might be due to invalid IL or missing references)
if ((object)node.Type != null && ConversionsBase.HasIdentityConversion(node.Type, t))
{
return true;
}
if (node.Kind == BoundKind.TupleLiteral)
{
return ExpressionMatchExactly((BoundTupleLiteral)node, t, ref useSiteInfo);
}
NamedTypeSymbol delegateType;
MethodSymbol delegateInvokeMethod;
TypeSymbol typeSymbol;
if (node.Kind == BoundKind.UnboundLambda && (object)(delegateType = t.GetDelegateType()) != null && (object)(delegateInvokeMethod = delegateType.DelegateInvokeMethod) != null && !(typeSymbol = delegateInvokeMethod.ReturnType).IsVoidType())
{
BoundLambda boundLambda = ((UnboundLambda)node).BindForReturnTypeInference(delegateType);
bool inferredFromFunctionType;
TypeWithAnnotations inferredReturnType = boundLambda.GetInferredReturnType(ref useSiteInfo, out inferredFromFunctionType);
if (inferredReturnType.HasType && ConversionsBase.HasIdentityConversion(inferredReturnType.Type, typeSymbol))
{
return true;
}
if (boundLambda.Symbol.IsAsync)
{
typeSymbol = ((!typeSymbol.OriginalDefinition.IsGenericTaskType(Compilation)) ? null : ((NamedTypeSymbol)typeSymbol).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0].Type);
}
if ((object)typeSymbol != null)
{
int length = boundLambda.Body.Statements.Length;
if (length != 0)
{
if (length == 1 && boundLambda.Body.Statements[0].Kind == BoundKind.ReturnStatement)
{
BoundReturnStatement boundReturnStatement = (BoundReturnStatement)boundLambda.Body.Statements[0];
if (boundReturnStatement.ExpressionOpt != null && ExpressionMatchExactly(boundReturnStatement.ExpressionOpt, typeSymbol, ref useSiteInfo))
{
return true;
}
}
else
{
ArrayBuilder<BoundReturnStatement> instance = ArrayBuilder<BoundReturnStatement>.GetInstance();
new ReturnStatements(instance).Visit(boundLambda.Body);
bool flag = false;
Enumerator<BoundReturnStatement> enumerator = instance.GetEnumerator();
while (enumerator.MoveNext())
{
BoundReturnStatement current = enumerator.Current;
if (current.ExpressionOpt == null || !ExpressionMatchExactly(current.ExpressionOpt, typeSymbol, ref useSiteInfo))
{
flag = false;
break;
}
flag = true;
}
instance.Free();
if (flag)
{
return true;
}
}
}
}
}
return false;
}
private bool ExpressionMatchExactly(BoundTupleLiteral tupleSource, TypeSymbol targetType, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Invalid comparison between Unknown and I4
if ((int)targetType.Kind != 11)
{
return false;
}
NamedTypeSymbol namedTypeSymbol = (NamedTypeSymbol)targetType;
ImmutableArray<BoundExpression> arguments = tupleSource.Arguments;
if (!namedTypeSymbol.IsTupleTypeOfCardinality(arguments.Length))
{
return false;
}
ImmutableArray<TypeWithAnnotations> tupleElementTypesWithAnnotations = namedTypeSymbol.TupleElementTypesWithAnnotations;
for (int i = 0; i < arguments.Length; i++)
{
if (!ExpressionMatchExactly(arguments[i], tupleElementTypesWithAnnotations[i].Type, ref useSiteInfo))
{
return false;
}
}
return true;
}
private BetterResult BetterConversionTargetCore(TypeSymbol type1, TypeSymbol type2, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, int betterConversionTargetRecursionLimit)
{
if (betterConversionTargetRecursionLimit < 0)
{
return BetterResult.Neither;
}
bool okToDowngradeToNeither;
return BetterConversionTargetCore(null, type1, default(Conversion), type2, default(Conversion), ref useSiteInfo, out okToDowngradeToNeither, betterConversionTargetRecursionLimit - 1);
}
private BetterResult BetterConversionTarget(BoundExpression node, TypeSymbol type1, Conversion conv1, TypeSymbol type2, Conversion conv2, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, out bool okToDowngradeToNeither)
{
return BetterConversionTargetCore(node, type1, conv1, type2, conv2, ref useSiteInfo, out okToDowngradeToNeither, 100);
}
private BetterResult BetterConversionTargetCore(BoundExpression node, TypeSymbol type1, Conversion conv1, TypeSymbol type2, Conversion conv2, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, out bool okToDowngradeToNeither, int betterConversionTargetRecursionLimit)
{
okToDowngradeToNeither = false;
if (ConversionsBase.HasIdentityConversion(type1, type2))
{
return BetterResult.Neither;
}
bool isImplicit = Conversions.ClassifyImplicitConversionFromType(type1, type2, ref useSiteInfo).IsImplicit;
bool isImplicit2 = Conversions.ClassifyImplicitConversionFromType(type2, type1, ref useSiteInfo).IsImplicit;
UnboundLambda unboundLambda = node as UnboundLambda;
if (isImplicit)
{
if (isImplicit2)
{
return BetterResult.Neither;
}
okToDowngradeToNeither = unboundLambda != null && CanDowngradeConversionFromLambdaToNeither(BetterResult.Left, unboundLambda, type1, type2, ref useSiteInfo, fromTypeAnalysis: true);
return BetterResult.Left;
}
if (isImplicit2)
{
okToDowngradeToNeither = unboundLambda != null && CanDowngradeConversionFromLambdaToNeither(BetterResult.Right, unboundLambda, type1, type2, ref useSiteInfo, fromTypeAnalysis: true);
return BetterResult.Right;
}
bool num = type1.OriginalDefinition.IsGenericTaskType(Compilation);
bool flag = type2.OriginalDefinition.IsGenericTaskType(Compilation);
if (num)
{
if (flag)
{
return BetterConversionTargetCore(((NamedTypeSymbol)type1).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0].Type, ((NamedTypeSymbol)type2).TypeArgumentsWithAnnotationsNoUseSiteDiagnostics[0].Type, ref useSiteInfo, betterConversionTargetRecursionLimit);
}
return BetterResult.Neither;
}
if (flag)
{
return BetterResult.Neither;
}
NamedTypeSymbol delegateType;
if ((object)(delegateType = type1.GetDelegateType()) != null)
{
NamedTypeSymbol delegateType2;
if ((object)(delegateType2 = type2.GetDelegateType()) != null)
{
MethodSymbol delegateInvokeMethod = delegateType.DelegateInvokeMethod;
MethodSymbol delegateInvokeMethod2 = delegateType2.DelegateInvokeMethod;
if ((object)delegateInvokeMethod != null && (object)delegateInvokeMethod2 != null)
{
TypeSymbol returnType = delegateInvokeMethod.ReturnType;
TypeSymbol returnType2 = delegateInvokeMethod2.ReturnType;
BetterResult betterResult = BetterResult.Neither;
if (!returnType.IsVoidType())
{
if (returnType2.IsVoidType())
{
betterResult = BetterResult.Left;
}
}
else if (!returnType2.IsVoidType())
{
betterResult = BetterResult.Right;
}
if (betterResult == BetterResult.Neither)
{
betterResult = BetterConversionTargetCore(returnType, returnType2, ref useSiteInfo, betterConversionTargetRecursionLimit);
}
if (node != null && node.Kind == BoundKind.MethodGroup)
{
BoundMethodGroup node2 = (BoundMethodGroup)node;
switch (betterResult)
{
case BetterResult.Left:
if (IsMethodGroupConversionIncompatibleWithDelegate(node2, delegateType, conv1))
{
return BetterResult.Neither;
}
break;
case BetterResult.Right:
if (IsMethodGroupConversionIncompatibleWithDelegate(node2, delegateType2, conv2))
{
return BetterResult.Neither;
}
break;
}
}
return betterResult;
}
}
return BetterResult.Neither;
}
if ((object)type2.GetDelegateType() != null)
{
return BetterResult.Neither;
}
if (IsSignedIntegralType(type1))
{
if (IsUnsignedIntegralType(type2))
{
return BetterResult.Left;
}
}
else if (IsUnsignedIntegralType(type1) && IsSignedIntegralType(type2))
{
return BetterResult.Right;
}
return BetterResult.Neither;
}
private bool IsMethodGroupConversionIncompatibleWithDelegate(BoundMethodGroup node, NamedTypeSymbol delegateType, Conversion conv)
{
if (conv.IsMethodGroup)
{
return !_binder.MethodIsCompatibleWithDelegateOrFunctionPointer(node.ReceiverOpt, conv.IsExtensionMethod, conv.Method, delegateType, Location.None, BindingDiagnosticBag.Discarded);
}
return false;
}
private bool CanDowngradeConversionFromLambdaToNeither(BetterResult currentResult, UnboundLambda lambda, TypeSymbol type1, TypeSymbol type2, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool fromTypeAnalysis)
{
NamedTypeSymbol delegateType;
NamedTypeSymbol delegateType2;
if ((object)(delegateType = type1.GetDelegateType()) != null && (object)(delegateType2 = type2.GetDelegateType()) != null)
{
MethodSymbol delegateInvokeMethod = delegateType.DelegateInvokeMethod;
MethodSymbol delegateInvokeMethod2 = delegateType2.DelegateInvokeMethod;
if ((object)delegateInvokeMethod != null && (object)delegateInvokeMethod2 != null)
{
if (!IdenticalParameters(delegateInvokeMethod.Parameters, delegateInvokeMethod2.Parameters))
{
return true;
}
TypeSymbol returnType = delegateInvokeMethod.ReturnType;
TypeSymbol returnType2 = delegateInvokeMethod2.ReturnType;
if (returnType.IsVoidType())
{
if (returnType2.IsVoidType())
{
return true;
}
return false;
}
if (returnType2.IsVoidType())
{
return false;
}
if (ConversionsBase.HasIdentityConversion(returnType, returnType2))
{
return true;
}
if (!lambda.InferReturnType(Conversions, delegateType, ref useSiteInfo, out var _).HasType)
{
return true;
}
}
}
return false;
}
private static bool IdenticalParameters(ImmutableArray<ParameterSymbol> p1, ImmutableArray<ParameterSymbol> p2)
{
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_0043: Unknown result type (might be due to invalid IL or missing references)
if (p1.IsDefault || p2.IsDefault)
{
return false;
}
if (p1.Length != p2.Length)
{
return false;
}
for (int i = 0; i < p1.Length; i++)
{
ParameterSymbol parameterSymbol = p1[i];
ParameterSymbol parameterSymbol2 = p2[i];
if (parameterSymbol.RefKind != parameterSymbol2.RefKind)
{
return false;
}
if (!ConversionsBase.HasIdentityConversion(parameterSymbol.Type, parameterSymbol2.Type))
{
return false;
}
}
return true;
}
private static bool IsSignedIntegralType(TypeSymbol type)
{
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Expected I4, but got Unknown
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: Invalid comparison between Unknown and I4
if ((object)type != null && type.IsNullableType())
{
type = type.GetNullableUnderlyingType();
}
SpecialType specialTypeSafe = type.GetSpecialTypeSafe();
switch (specialTypeSafe - 9)
{
default:
if ((int)specialTypeSafe != 21 || !type.IsNativeIntegerType)
{
break;
}
goto case 0;
case 0:
case 2:
case 4:
case 6:
return true;
case 1:
case 3:
case 5:
break;
}
return false;
}
private static bool IsUnsignedIntegralType(TypeSymbol type)
{
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Expected I4, but got Unknown
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: Invalid comparison between Unknown and I4
if ((object)type != null && type.IsNullableType())
{
type = type.GetNullableUnderlyingType();
}
SpecialType specialTypeSafe = type.GetSpecialTypeSafe();
switch (specialTypeSafe - 10)
{
default:
if ((int)specialTypeSafe != 22 || !type.IsNativeIntegerType)
{
break;
}
goto case 0;
case 0:
case 2:
case 4:
case 6:
return true;
case 1:
case 3:
case 5:
break;
}
return false;
}
internal static void GetEffectiveParameterTypes(MethodSymbol method, int argumentCount, ImmutableArray<int> argToParamMap, ArrayBuilder<RefKind> argumentRefKinds, bool isMethodGroupConversion, bool allowRefOmittedArguments, Binder binder, bool expanded, out ImmutableArray<TypeWithAnnotations> parameterTypes, out ImmutableArray<RefKind> parameterRefKinds)
{
bool hasAnyRefOmittedArgument;
EffectiveParameters effectiveParameters = (expanded ? GetEffectiveParametersInExpandedForm(method, argumentCount, argToParamMap, argumentRefKinds, isMethodGroupConversion, allowRefOmittedArguments, binder, out hasAnyRefOmittedArgument) : GetEffectiveParametersInNormalForm(method, argumentCount, argToParamMap, argumentRefKinds, isMethodGroupConversion, allowRefOmittedArguments, binder, out hasAnyRefOmittedArgument));
parameterTypes = effectiveParameters.ParameterTypes;
parameterRefKinds = effectiveParameters.ParameterRefKinds;
}
private EffectiveParameters GetEffectiveParametersInNormalForm<TMember>(TMember member, int argumentCount, ImmutableArray<int> argToParamMap, ArrayBuilder<RefKind> argumentRefKinds, bool isMethodGroupConversion, bool allowRefOmittedArguments) where TMember : Symbol
{
bool hasAnyRefOmittedArgument;
return GetEffectiveParametersInNormalForm(member, argumentCount, argToParamMap, argumentRefKinds, isMethodGroupConversion, allowRefOmittedArguments, _binder, out hasAnyRefOmittedArgument);
}
private static EffectiveParameters GetEffectiveParametersInNormalForm<TMember>(TMember member, int argumentCount, ImmutableArray<int> argToParamMap, ArrayBuilder<RefKind> argumentRefKinds, bool isMethodGroupConversion, bool allowRefOmittedArguments, Binder binder, out bool hasAnyRefOmittedArgument) where TMember : Symbol
{
//IL_00be: Unknown result type (might be due to invalid IL or missing references)
//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
//IL_00db: Unknown result type (might be due to invalid IL or missing references)
//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
hasAnyRefOmittedArgument = false;
ImmutableArray<ParameterSymbol> parameters = member.GetParameters();
int num = member.GetParameterCount() + (member.GetIsVararg() ? 1 : 0);
if (argumentCount == num && argToParamMap.IsDefaultOrEmpty)
{
ImmutableArray<RefKind> parameterRefKinds = member.GetParameterRefKinds();
if (parameterRefKinds.IsDefaultOrEmpty)
{
return new EffectiveParameters(member.GetParameterTypes(), parameterRefKinds);
}
}
ArrayBuilder<TypeWithAnnotations> instance = ArrayBuilder<TypeWithAnnotations>.GetInstance();
ArrayBuilder<RefKind> val = null;
bool flag = argumentRefKinds.Any();
for (int i = 0; i < argumentCount; i++)
{
int num2 = (argToParamMap.IsDefault ? i : argToParamMap[i]);
if (num2 >= parameters.Length)
{
continue;
}
ParameterSymbol parameterSymbol = parameters[num2];
instance.Add(parameterSymbol.TypeWithAnnotations);
RefKind argRefKind = (RefKind)(flag ? ((int)argumentRefKinds[i]) : 0);
RefKind effectiveParameterRefKind = GetEffectiveParameterRefKind(parameterSymbol, argRefKind, isMethodGroupConversion, allowRefOmittedArguments, binder, ref hasAnyRefOmittedArgument);
if (val == null)
{
if ((int)effectiveParameterRefKind != 0)
{
val = ArrayBuilder<RefKind>.GetInstance(i, (RefKind)0);
val.Add(effectiveParameterRefKind);
}
}
else
{
val.Add(effectiveParameterRefKind);
}
}
ImmutableArray<RefKind> refKinds = val?.ToImmutableAndFree() ?? default(ImmutableArray<RefKind>);
return new EffectiveParameters(instance.ToImmutableAndFree(), refKinds);
}
private static RefKind GetEffectiveParameterRefKind(ParameterSymbol parameter, RefKind argRefKind, bool isMethodGroupConversion, bool allowRefOmittedArguments, Binder binder, ref bool hasAnyRefOmittedArgument)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0049: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Invalid comparison between Unknown and I4
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Invalid comparison between Unknown and I4
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0074: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Invalid comparison between Unknown and I4
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Invalid comparison between Unknown and I4
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Invalid comparison between Unknown and I4
//IL_0062: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Invalid comparison between Unknown and I4
RefKind refKind = parameter.RefKind;
if (!isMethodGroupConversion)
{
if ((int)refKind == 3)
{
if ((int)argRefKind == 0)
{
return (RefKind)0;
}
if ((int)argRefKind == 1 && binder.Compilation.IsFeatureEnabled(MessageID.IDS_FeatureRefReadonlyParameters))
{
return (RefKind)1;
}
}
else
{
bool flag = (int)refKind == 4;
if (flag)
{
bool flag2 = (((int)argRefKind <= 1 || (int)argRefKind == 3) ? true : false);
flag = flag2;
}
if (flag)
{
return argRefKind;
}
}
}
else if (AreRefsCompatibleForMethodConversion(refKind, argRefKind, binder.Compilation))
{
return argRefKind;
}
if (allowRefOmittedArguments && (int)refKind == 1 && (int)argRefKind == 0 && !binder.InAttributeArgument)
{
hasAnyRefOmittedArgument = true;
return (RefKind)0;
}
return refKind;
}
internal static bool AreRefsCompatibleForMethodConversion(RefKind x, RefKind y, CSharpCompilation compilation)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Invalid comparison between Unknown and I4
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Invalid comparison between Unknown and I4
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Invalid comparison between Unknown and I4
//IL_002e: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Invalid comparison between Unknown and I4
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Invalid comparison between Unknown and I4
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Invalid comparison between Unknown and I4
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Invalid comparison between Unknown and I4
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: Invalid comparison between Unknown and I4
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Invalid comparison between Unknown and I4
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Invalid comparison between Unknown and I4
if (x == y)
{
return true;
}
if ((int)x == 4)
{
if ((int)y == 1 || (int)y == 3)
{
return true;
}
return false;
}
if ((int)y == 4)
{
if ((int)x == 1 || (int)x == 3)
{
return true;
}
return false;
}
if ((int)x != 1)
{
if ((int)x == 3 && (int)y == 1)
{
goto IL_0040;
}
}
else if ((int)y == 3)
{
goto IL_0040;
}
bool flag = false;
goto IL_0046;
IL_0040:
flag = true;
goto IL_0046;
IL_0046:
if (flag)
{
return compilation.IsFeatureEnabled(MessageID.IDS_FeatureRefReadonlyParameters);
}
return false;
}
private EffectiveParameters GetEffectiveParametersInExpandedForm<TMember>(TMember member, int argumentCount, ImmutableArray<int> argToParamMap, ArrayBuilder<RefKind> argumentRefKinds, bool isMethodGroupConversion, bool allowRefOmittedArguments) where TMember : Symbol
{
bool hasAnyRefOmittedArgument;
return GetEffectiveParametersInExpandedForm(member, argumentCount, argToParamMap, argumentRefKinds, isMethodGroupConversion, allowRefOmittedArguments, _binder, out hasAnyRefOmittedArgument);
}
private static EffectiveParameters GetEffectiveParametersInExpandedForm<TMember>(TMember member, int argumentCount, ImmutableArray<int> argToParamMap, ArrayBuilder<RefKind> argumentRefKinds, bool isMethodGroupConversion, bool allowRefOmittedArguments, Binder binder, out bool hasAnyRefOmittedArgument) where TMember : Symbol
{
//IL_0089: Unknown result type (might be due to invalid IL or missing references)
//IL_008e: Unknown result type (might be due to invalid IL or missing references)
//IL_0090: Unknown result type (might be due to invalid IL or missing references)
//IL_009a: Unknown result type (might be due to invalid IL or missing references)
//IL_009f: Unknown result type (might be due to invalid IL or missing references)
//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
ArrayBuilder<TypeWithAnnotations> instance = ArrayBuilder<TypeWithAnnotations>.GetInstance();
ArrayBuilder<RefKind> instance2 = ArrayBuilder<RefKind>.GetInstance();
bool flag = false;
ImmutableArray<ParameterSymbol> parameters = member.GetParameters();
bool flag2 = argumentRefKinds.Any();
hasAnyRefOmittedArgument = false;
for (int i = 0; i < argumentCount; i++)
{
int num = (argToParamMap.IsDefault ? i : argToParamMap[i]);
ParameterSymbol parameterSymbol = parameters[num];
TypeWithAnnotations typeWithAnnotations = parameterSymbol.TypeWithAnnotations;
instance.Add((num == parameters.Length - 1) ? ((ArrayTypeSymbol)typeWithAnnotations.Type).ElementTypeWithAnnotations : typeWithAnnotations);
RefKind argRefKind = (RefKind)(flag2 ? ((int)argumentRefKinds[i]) : 0);
RefKind effectiveParameterRefKind = GetEffectiveParameterRefKind(parameterSymbol, argRefKind, isMethodGroupConversion, allowRefOmittedArguments, binder, ref hasAnyRefOmittedArgument);
instance2.Add(effectiveParameterRefKind);
if ((int)effectiveParameterRefKind != 0)
{
flag = true;
}
}
ImmutableArray<RefKind> refKinds = (flag ? instance2.ToImmutable() : default(ImmutableArray<RefKind>));
instance2.Free();
return new EffectiveParameters(instance.ToImmutableAndFree(), refKinds);
}
private MemberResolutionResult<TMember> IsMemberApplicableInNormalForm<TMember>(TMember member, TMember leastOverriddenMember, ArrayBuilder<TypeWithAnnotations> typeArguments, AnalyzedArguments arguments, bool isMethodGroupConversion, bool allowRefOmittedArguments, bool inferWithDynamic, bool completeResults, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) where TMember : Symbol
{
ArgumentAnalysisResult argAnalysis = AnalyzeArguments(member, arguments, isMethodGroupConversion, expanded: false);
if (!argAnalysis.IsValid)
{
ArgumentAnalysisResultKind kind = argAnalysis.Kind;
if ((kind != ArgumentAnalysisResultKind.NoCorrespondingParameter && kind - 4 > ArgumentAnalysisResultKind.Expanded) || !completeResults)
{
return new MemberResolutionResult<TMember>(member, leastOverriddenMember, MemberAnalysisResult.ArgumentParameterMismatch(argAnalysis), hasTypeArgumentInferredFromFunctionType: false);
}
}
if (member.HasUseSiteError)
{
return new MemberResolutionResult<TMember>(member, leastOverriddenMember, MemberAnalysisResult.UseSiteError(), hasTypeArgumentInferredFromFunctionType: false);
}
bool hasAnyRefOmittedArgument;
EffectiveParameters effectiveParametersInNormalForm = GetEffectiveParametersInNormalForm(GetConstructedFrom(leastOverriddenMember), arguments.Arguments.Count, argAnalysis.ArgsToParamsOpt, arguments.RefKinds, isMethodGroupConversion, allowRefOmittedArguments, _binder, out hasAnyRefOmittedArgument);
EffectiveParameters effectiveParametersInNormalForm2 = GetEffectiveParametersInNormalForm(leastOverriddenMember, arguments.Arguments.Count, argAnalysis.ArgsToParamsOpt, arguments.RefKinds, isMethodGroupConversion, allowRefOmittedArguments);
MemberResolutionResult<TMember> result = IsApplicable(member, leastOverriddenMember, typeArguments, arguments, effectiveParametersInNormalForm, effectiveParametersInNormalForm2, argAnalysis.ArgsToParamsOpt, hasAnyRefOmittedArgument, inferWithDynamic, completeResults, ref useSiteInfo);
if (completeResults && !argAnalysis.IsValid)
{
return new MemberResolutionResult<TMember>(member, leastOverriddenMember, MemberAnalysisResult.ArgumentParameterMismatch(argAnalysis), hasTypeArgumentInferredFromFunctionType: false);
}
return result;
}
private MemberResolutionResult<TMember> IsMemberApplicableInExpandedForm<TMember>(TMember member, TMember leastOverriddenMember, ArrayBuilder<TypeWithAnnotations> typeArguments, AnalyzedArguments arguments, bool allowRefOmittedArguments, bool completeResults, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) where TMember : Symbol
{
ArgumentAnalysisResult argAnalysis = AnalyzeArguments(member, arguments, isMethodGroupConversion: false, expanded: true);
if (!argAnalysis.IsValid)
{
return new MemberResolutionResult<TMember>(member, leastOverriddenMember, MemberAnalysisResult.ArgumentParameterMismatch(argAnalysis), hasTypeArgumentInferredFromFunctionType: false);
}
if (member.HasUseSiteError)
{
return new MemberResolutionResult<TMember>(member, leastOverriddenMember, MemberAnalysisResult.UseSiteError(), hasTypeArgumentInferredFromFunctionType: false);
}
bool hasAnyRefOmittedArgument;
EffectiveParameters effectiveParametersInExpandedForm = GetEffectiveParametersInExpandedForm(GetConstructedFrom(leastOverriddenMember), arguments.Arguments.Count, argAnalysis.ArgsToParamsOpt, arguments.RefKinds, isMethodGroupConversion: false, allowRefOmittedArguments, _binder, out hasAnyRefOmittedArgument);
EffectiveParameters effectiveParametersInExpandedForm2 = GetEffectiveParametersInExpandedForm(leastOverriddenMember, arguments.Arguments.Count, argAnalysis.ArgsToParamsOpt, arguments.RefKinds, isMethodGroupConversion: false, allowRefOmittedArguments);
MemberResolutionResult<TMember> result = IsApplicable(member, leastOverriddenMember, typeArguments, arguments, effectiveParametersInExpandedForm, effectiveParametersInExpandedForm2, argAnalysis.ArgsToParamsOpt, hasAnyRefOmittedArgument, inferWithDynamic: false, completeResults, ref useSiteInfo);
if (!result.Result.IsValid)
{
return result;
}
return result.WithResult(MemberAnalysisResult.ExpandedForm(result.Result.ArgsToParamsOpt, result.Result.ConversionsOpt, hasAnyRefOmittedArgument));
}
private MemberResolutionResult<TMember> IsApplicable<TMember>(TMember member, TMember leastOverriddenMember, ArrayBuilder<TypeWithAnnotations> typeArgumentsBuilder, AnalyzedArguments arguments, EffectiveParameters originalEffectiveParameters, EffectiveParameters constructedEffectiveParameters, ImmutableArray<int> argsToParamsMap, bool hasAnyRefOmittedArgument, bool inferWithDynamic, bool completeResults, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo) where TMember : Symbol
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Invalid comparison between Unknown and I4
bool hasTypeArgumentsInferredFromFunctionType = false;
MethodSymbol methodSymbol;
bool ignoreOpenTypes;
EffectiveParameters parameters;
if ((int)member.Kind == 9 && (methodSymbol = (MethodSymbol)(object)member).Arity > 0)
{
if (typeArgumentsBuilder.Count == 0 && arguments.HasDynamicArgument && !inferWithDynamic)
{
ignoreOpenTypes = true;
parameters = constructedEffectiveParameters;
}
else
{
MethodSymbol methodSymbol2 = (MethodSymbol)(object)leastOverriddenMember;
ImmutableArray<TypeWithAnnotations> immutableArray;
if (typeArgumentsBuilder.Count > 0)
{
immutableArray = typeArgumentsBuilder.ToImmutable();
}
else
{
immutableArray = InferMethodTypeArguments(methodSymbol, methodSymbol2.ConstructedFrom.TypeParameters, arguments, originalEffectiveParameters, out hasTypeArgumentsInferredFromFunctionType, out var error, ref useSiteInfo);
if (immutableArray.IsDefault)
{
return new MemberResolutionResult<TMember>(member, leastOverriddenMember, error, hasTypeArgumentInferredFromFunctionType: false);
}
}
member = (TMember)(Symbol)methodSymbol.Construct(immutableArray);
leastOverriddenMember = (TMember)(Symbol)methodSymbol2.ConstructedFrom.Construct(immutableArray);
ImmutableArray<TypeWithAnnotations> parameterTypes = leastOverriddenMember.GetParameterTypes();
for (int i = 0; i < parameterTypes.Length; i++)
{
if (!parameterTypes[i].Type.CheckAllConstraints(Compilation, Conversions))
{
return new MemberResolutionResult<TMember>(member, leastOverriddenMember, MemberAnalysisResult.ConstructedParameterFailedConstraintsCheck(i), hasTypeArgumentsInferredFromFunctionType);
}
}
TypeMap typeMap = new TypeMap(methodSymbol.TypeParameters, immutableArray, allowAlpha: true);
parameters = new EffectiveParameters(typeMap.SubstituteTypes(constructedEffectiveParameters.ParameterTypes), constructedEffectiveParameters.ParameterRefKinds);
ignoreOpenTypes = false;
}
}
else
{
parameters = constructedEffectiveParameters;
ignoreOpenTypes = false;
}
MemberAnalysisResult result = IsApplicable(member, parameters, arguments, argsToParamsMap, member.GetIsVararg(), hasAnyRefOmittedArgument, ignoreOpenTypes, completeResults, ref useSiteInfo);
return new MemberResolutionResult<TMember>(member, leastOverriddenMember, result, hasTypeArgumentsInferredFromFunctionType);
}
private ImmutableArray<TypeWithAnnotations> InferMethodTypeArguments(MethodSymbol method, ImmutableArray<TypeParameterSymbol> originalTypeParameters, AnalyzedArguments arguments, EffectiveParameters originalEffectiveParameters, out bool hasTypeArgumentsInferredFromFunctionType, out MemberAnalysisResult error, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
{
ImmutableArray<BoundExpression> arguments2 = arguments.Arguments.ToImmutable();
MethodTypeInferenceResult methodTypeInferenceResult = MethodTypeInferrer.Infer(_binder, _binder.Conversions, originalTypeParameters, method.ContainingType, originalEffectiveParameters.ParameterTypes, originalEffectiveParameters.ParameterRefKinds, arguments2, ref useSiteInfo);
if (methodTypeInferenceResult.Success)
{
hasTypeArgumentsInferredFromFunctionType = methodTypeInferenceResult.HasTypeArgumentInferredFromFunctionType;
error = default(MemberAnalysisResult);
return methodTypeInferenceResult.InferredTypeArguments;
}
if (arguments.IsExtensionMethodInvocation && !MethodTypeInferrer.CanInferTypeArgumentsFromFirstArgument(_binder.Compilation, _binder.Conversions, method, arguments2, ref useSiteInfo, out var _))
{
hasTypeArgumentsInferredFromFunctionType = false;
error = MemberAnalysisResult.TypeInferenceExtensionInstanceArgumentFailed();
return default(ImmutableArray<TypeWithAnnotations>);
}
hasTypeArgumentsInferredFromFunctionType = false;
error = MemberAnalysisResult.TypeInferenceFailed();
return default(ImmutableArray<TypeWithAnnotations>);
}
private MemberAnalysisResult IsApplicable(Symbol candidate, EffectiveParameters parameters, AnalyzedArguments arguments, ImmutableArray<int> argsToParameters, bool isVararg, bool hasAnyRefOmittedArgument, bool ignoreOpenTypes, bool completeResults, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo)
{
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_0097: Unknown result type (might be due to invalid IL or missing references)
//IL_009c: Unknown result type (might be due to invalid IL or missing references)
//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
//IL_022a: Unknown result type (might be due to invalid IL or missing references)
//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
//IL_00d0: Invalid comparison between Unknown and I4
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
//IL_0148: Unknown result type (might be due to invalid IL or missing references)
//IL_0161: Unknown result type (might be due to invalid IL or missing references)
//IL_0104: Unknown result type (might be due to invalid IL or missing references)
//IL_0107: Invalid comparison between Unknown and I4
//IL_0183: Unknown result type (might be due to invalid IL or missing references)
//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
//IL_01b0: Unknown result type (might be due to invalid IL or missing references)
//IL_0140: Unknown result type (might be due to invalid IL or missing references)
//IL_0142: Unknown result type (might be due to invalid IL or missing references)
int num = parameters.ParameterTypes.Length + (isVararg ? 1 : 0);
if (arguments.Arguments.Count < num)
{
num = arguments.Arguments.Count;
}
ArrayBuilder<Conversion> val = null;
BitVector badArguments = default(BitVector);
for (int i = 0; i < num; i++)
{
BoundExpression boundExpression = arguments.Argument(i);
Conversion conversion;
if (isVararg && i == num - 1)
{
if (boundExpression.Kind == BoundKind.ArgListOperator)
{
conversion = Conversion.Identity;
}
else
{
if (((BitVector)(ref badArguments)).IsNull)
{
badArguments = BitVector.Create(i + 1);
}
((BitVector)(ref badArguments))[i] = true;
conversion = Conversion.NoConversion;
}
}
else
{
RefKind argRefKind = arguments.RefKind(i);
RefKind val2 = (RefKind)((!parameters.ParameterRefKinds.IsDefault) ? ((int)parameters.ParameterRefKinds[i]) : 0);
bool flag = arguments.IsExtensionMethodThisArgument(i);
if (flag && (int)val2 == 1)
{
argRefKind = val2;
}
bool hasInterpolatedStringRefMismatch = false;
bool flag2 = ((boundExpression is BoundUnconvertedInterpolatedString || boundExpression is BoundBinaryOperator { IsUnconvertedInterpolatedStringAddition: not false }) ? true : false);
if (flag2 && (int)val2 == 1 && parameters.ParameterTypes[i].Type is NamedTypeSymbol { IsInterpolatedStringHandlerType: not false, IsValueType: not false })
{
hasInterpolatedStringRefMismatch = true;
argRefKind = val2;
}
conversion = CheckArgumentForApplicability(candidate, boundExpression, argRefKind, parameters.ParameterTypes[i].Type, val2, ignoreOpenTypes, ref useSiteInfo, flag, hasInterpolatedStringRefMismatch);
if (flag && !ConversionsBase.IsValidExtensionMethodThisArgConversion(conversion))
{
return MemberAnalysisResult.BadArgumentConversions(argsToParameters, MemberAnalysisResult.CreateBadArgumentsWithPosition(i), ImmutableArray.Create(conversion));
}
if (!conversion.Exists)
{
if (((BitVector)(ref badArguments)).IsNull)
{
badArguments = BitVector.Create(i + 1);
}
((BitVector)(ref badArguments))[i] = true;
}
}
if (val != null)
{
val.Add(conversion);
}
else if (!conversion.IsIdentity)
{
val = ArrayBuilder<Conversion>.GetInstance(num);
val.AddMany(Conversion.Identity, i);
val.Add(conversion);
}
if (!((BitVector)(ref badArguments)).IsNull && !completeResults)
{
break;
}
}
ImmutableArray<Conversion> conversions = val?.ToImmutableAndFree() ?? default(ImmutableArray<Conversion>);
if (!((BitVector)(ref badArguments)).IsNull)
{
return MemberAnalysisResult.BadArgumentConversions(argsToParameters, badArguments, conversions);
}
return MemberAnalysisResult.NormalForm(argsToParameters, conversions, hasAnyRefOmittedArgument);
}
private Conversion CheckArgumentForApplicability(Symbol candidate, BoundExpression argument, RefKind argRefKind, TypeSymbol parameterType, RefKind parRefKind, bool ignoreOpenTypes, ref CompoundUseSiteInfo<AssemblySymbol> useSiteInfo, bool forExtensionMethodThisArg, bool hasInterpolatedStringRefMismatch)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Invalid comparison between Unknown and I4
if (argRefKind != parRefKind && ((int)argRefKind != 0 || !argument.HasDynamicType()))
{
return Conversion.NoConversion;
}
if (ignoreOpenTypes && parameterType.ContainsTypeParameter((MethodSymbol)candidate))
{
return Conversion.ImplicitDynamic;
}
TypeSymbol type = argument.Type;
if (argument.Kind == BoundKind.OutVariablePendingInference || argument.Kind == BoundKind.OutDeconstructVarPendingInference || (argument.Kind == BoundKind.DiscardExpression && (object)type == null))
{
return Conversion.Identity;
}
if ((int)argRefKind == 0 || hasInterpolatedStringRefMismatch)
{
Conversion result = (forExtensionMethodThisArg ? Conversions.ClassifyImplicitExtensionMethodThisArgConversion(argument, argument.Type, parameterType, ref useSiteInfo) : Conversions.ClassifyImplicitConversionFromExpression(argument, parameterType, ref useSiteInfo));
if (hasInterpolatedStringRefMismatch && !result.IsInterpolatedStringHandler)
{
return Conversion.NoConversion;
}
return result;
}
if ((object)type != null && ConversionsBase.HasIdentityConversion(type, parameterType))
{
return Conversion.Identity;
}
return Conversion.NoConversion;
}
private static TMember GetConstructedFrom<TMember>(TMember member) where TMember : Symbol
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Invalid comparison between Unknown and I4
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: Invalid comparison between Unknown and I4
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
SymbolKind kind = member.Kind;
if ((int)kind != 9)
{
if ((int)kind == 15)
{
return member;
}
throw ExceptionUtilities.UnexpectedValue((object)member.Kind);
}
return (TMember)(Symbol)(member as MethodSymbol).ConstructedFrom;
}
private static ArgumentAnalysisResult AnalyzeArguments(Symbol symbol, AnalyzedArguments arguments, bool isMethodGroupConversion, bool expanded)
{
ImmutableArray<ParameterSymbol> parameters = symbol.GetParameters();
bool isVararg = symbol.GetIsVararg();
if (!expanded && arguments.Names.Count == 0)
{
return AnalyzeArgumentsForNormalFormNoNamedArguments(parameters, arguments, isMethodGroupConversion, isVararg);
}
int count = arguments.Arguments.Count;
int[] array = null;
int? num = null;
bool? flag = null;
bool seenNamedParams = false;
bool seenOutOfPositionNamedArgument = false;
bool isValidParams = IsValidParams(symbol);
for (int i = 0; i < count; i++)
{
bool isNamedArgument;
int num2 = CorrespondsToAnyParameter(parameters, expanded, arguments, i, isValidParams, isVararg, out isNamedArgument, ref seenNamedParams, ref seenOutOfPositionNamedArgument) ?? (-1);
if (num2 == -1 && !num.HasValue)
{
num = i;
flag = isNamedArgument;
}
if (num2 != i && array == null)
{
array = new int[count];
for (int j = 0; j < i; j++)
{
array[j] = j;
}
}
if (array != null)
{
array[i] = num2;
}
}
ParameterMap argsToParameters = new ParameterMap(array, count);
int? num3 = CheckForBadNonTrailingNamedArgument(arguments, argsToParameters);
if (num3.HasValue)
{
return ArgumentAnalysisResult.BadNonTrailingNamedArgument(num3.Value);
}
if (num.HasValue)
{
if (flag.Value)
{
return ArgumentAnalysisResult.NoCorrespondingNamedParameter(num.Value);
}
return ArgumentAnalysisResult.NoCorrespondingParameter(num.Value);
}
int? num4 = NameUsedForPositional(arguments, argsToParameters);
if (num4.HasValue)
{
return ArgumentAnalysisResult.NameUsedForPositional(num4.Value);
}
int? num5 = CheckForMissingRequiredParameter(argsToParameters, parameters, isMethodGroupConversion, expanded);
if (num5.HasValue)
{
return ArgumentAnalysisResult.RequiredParameterMissing(num5.Value);
}
if (arguments.Names.Any() && arguments.Names.Last().HasValue && isVararg)
{
return ArgumentAnalysisResult.RequiredParameterMissing(parameters.Length);
}
int? num6 = CheckForDuplicateNamedArgument(arguments);
if (num6.HasValue)
{
return ArgumentAnalysisResult.DuplicateNamedArgument(num6.Value);
}
if (!expanded)
{
return ArgumentAnalysisResult.NormalForm(argsToParameters.ToImmutableArray());
}
return ArgumentAnalysisResult.ExpandedForm(argsToParameters.ToImmutableArray());
}
private static int? CheckForBadNonTrailingNamedArgument(AnalyzedArguments arguments, ParameterMap argsToParameters)
{
if (argsToParameters.IsTrivial)
{
return null;
}
int num = -1;
int count = arguments.Arguments.Count;
for (int i = 0; i < count; i++)
{
int num2 = argsToParameters[i];
if (num2 != -1 && num2 != i && arguments.Name(i) != null)
{
num = i;
break;
}
}
if (num != -1)
{
for (int j = num + 1; j < count; j++)
{
if (arguments.Name(j) == null)
{
return num;
}
}
}
return null;
}
private static int? CorrespondsToAnyParameter(ImmutableArray<ParameterSymbol> memberParameters, bool expanded, AnalyzedArguments arguments, int argumentPosition, bool isValidParams, bool isVararg, out bool isNamedArgument, ref bool seenNamedParams, ref bool seenOutOfPositionNamedArgument)
{
isNamedArgument = arguments.Names.Count > argumentPosition && arguments.Names[argumentPosition].HasValue;
if (!isNamedArgument)
{
if (seenNamedParams)
{
return null;
}
if (seenOutOfPositionNamedArgument)
{
return null;
}
int num = memberParameters.Length + (isVararg ? 1 : 0);
if (argumentPosition >= num)
{
if (!expanded)
{
return null;
}
return num - 1;
}
return argumentPosition;
}
string item = arguments.Names[argumentPosition].GetValueOrDefault().Item1;
for (int i = 0; i < memberParameters.Length; i++)
{
if (memberParameters[i].Name == item)
{
if (isValidParams && i == memberParameters.Length - 1)
{
seenNamedParams = true;
}
if (i != argumentPosition)
{
seenOutOfPositionNamedArgument = true;
}
return i;
}
}
return null;
}
private static ArgumentAnalysisResult AnalyzeArgumentsForNormalFormNoNamedArguments(ImmutableArray<ParameterSymbol> parameters, AnalyzedArguments arguments, bool isMethodGroupConversion, bool isVararg)
{
int num = parameters.Length + (isVararg ? 1 : 0);
int count = arguments.Arguments.Count;
if (count < num)
{
for (int i = count; i < num; i++)
{
if (parameters.Length == i || !CanBeOptional(parameters[i], isMethodGroupConversion))
{
return ArgumentAnalysisResult.RequiredParameterMissing(i);
}
}
}
else if (num < count)
{
return ArgumentAnalysisResult.NoCorrespondingParameter(num);
}
return ArgumentAnalysisResult.NormalForm(default(ImmutableArray<int>));
}
private static bool CanBeOptional(ParameterSymbol parameter, bool isMethodGroupConversion)
{
if (!isMethodGroupConversion)
{
return parameter.IsOptional;
}
return false;
}
private static int? NameUsedForPositional(AnalyzedArguments arguments, ParameterMap argsToParameters)
{
if (argsToParameters.IsTrivial)
{
return null;
}
for (int i = 0; i < argsToParameters.Length; i++)
{
if (arguments.Name(i) == null)
{
continue;
}
for (int j = 0; j < i; j++)
{
if (arguments.Name(j) == null && argsToParameters[i] == argsToParameters[j])
{
return i;
}
}
}
return null;
}
private static int? CheckForMissingRequiredParameter(ParameterMap argsToParameters, ImmutableArray<ParameterSymbol> parameters, bool isMethodGroupConversion, bool expanded)
{
int num = (expanded ? (parameters.Length - 1) : parameters.Length);
if (argsToParameters.IsTrivial && num <= argsToParameters.Length)
{
return null;
}
for (int i = 0; i < num; i++)
{
if (CanBeOptional(parameters[i], isMethodGroupConversion))
{
continue;
}
bool flag = false;
for (int j = 0; j < argsToParameters.Length; j++)
{
flag = argsToParameters[j] == i;
if (flag)
{
break;
}
}
if (!flag)
{
return i;
}
}
return null;
}
private static int? CheckForDuplicateNamedArgument(AnalyzedArguments arguments)
{
if (EnumerableExtensions.IsEmpty<(string, Location)?>((IReadOnlyCollection<(string, Location)?>)arguments.Names))
{
return null;
}
PooledHashSet<string> instance = PooledHashSet<string>.GetInstance();
for (int i = 0; i < arguments.Names.Count; i++)
{
string text = arguments.Name(i);
if (text != null && !((HashSet<string>)(object)instance).Add(text))
{
instance.Free();
return i;
}
}
instance.Free();
return null;
}
}