9986 lines
385 KiB
C#
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;
|
|
}
|
|
}
|