本文整理汇总了C#中Microsoft.CSharp.RuntimeBinder.Semantics.EXPR.isCONSTANT_OK方法的典型用法代码示例。如果您正苦于以下问题:C# EXPR.isCONSTANT_OK方法的具体用法?C# EXPR.isCONSTANT_OK怎么用?C# EXPR.isCONSTANT_OK使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Microsoft.CSharp.RuntimeBinder.Semantics.EXPR
的用法示例。
在下文中一共展示了EXPR.isCONSTANT_OK方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: FindApplicableSignatures
/////////////////////////////////////////////////////////////////////////////////
private bool FindApplicableSignatures(
EXPR pArgument,
UnaOpMask unaryOpMask,
List<UnaOpFullSig> pSignatures)
{
// All callers should already assert this to be the case.
Debug.Assert(pArgument != null);
Debug.Assert(pArgument.type != null);
long iuosMinLift = GetSymbolLoader().FCanLift() ? 0 : g_rguos.Length;
CType pArgumentType = pArgument.type;
CType pRawType = pArgumentType.StripNubs();
PredefinedType pt = pArgumentType.isPredefined() ? pArgumentType.getPredefType() : PredefinedType.PT_COUNT;
PredefinedType ptRaw = pRawType.isPredefined() ? pRawType.getPredefType() : PredefinedType.PT_COUNT;
for (int index = 0; index < g_rguos.Length; index++)
{
UnaOpSig uos = g_rguos[index];
if ((uos.grfuom & unaryOpMask) == 0)
{
continue;
}
ConvKind cv = GetConvKind(pt, g_rguos[index].pt);
CType typeSig = null;
switch (cv)
{
default:
VSFAIL("Shouldn't happen!");
continue;
case ConvKind.None:
continue;
case ConvKind.Explicit:
if (!pArgument.isCONSTANT_OK())
{
continue;
}
if (canConvert(pArgument, typeSig = GetOptPDT(uos.pt)))
{
break;
}
if (index < iuosMinLift)
{
continue;
}
typeSig = GetSymbolLoader().GetTypeManager().GetNullable(typeSig);
if (!canConvert(pArgument, typeSig))
{
continue;
}
break;
case ConvKind.Unknown:
if (canConvert(pArgument, typeSig = GetOptPDT(uos.pt)))
{
break;
}
if (index < iuosMinLift)
{
continue;
}
typeSig = GetSymbolLoader().GetTypeManager().GetNullable(typeSig);
if (!canConvert(pArgument, typeSig))
{
continue;
}
break;
case ConvKind.Implicit:
break;
case ConvKind.Identity:
{
UnaOpFullSig result = new UnaOpFullSig(this, uos);
if (result.GetType() != null)
{
pSignatures.Add(result);
return true;
}
}
break;
}
if (typeSig != null && typeSig.IsNullableType())
{
// Need to use a lifted signature.
LiftFlags grflt = LiftFlags.None;
switch (GetConvKind(ptRaw, uos.pt))
{
default:
grflt = grflt | LiftFlags.Convert1;
break;
case ConvKind.Implicit:
//.........这里部分代码省略.........