Skip to content

Instantly share code, notes, and snippets.

View controlflow's full-sized avatar

Alexander Shvedov controlflow

View GitHub Profile
private void ModifyItemsCount(int newCount)
{
if (myTail == null || myTail is FrugalLocalMarkerList<T>)
{
if (newCount == 0)
myTail = null;
else if (newCount == 1)
myTail = FrugalLocalMarkerList<T>.One;
else if (newCount == 2)
myTail = FrugalLocalMarkerList<T>.Two;
var genericType = myIsAsync
? useEnumeratorType
? predefinedType.IAsyncEnumerator
: predefinedType.IAsyncEnumerable
: useEnumeratorType
? predefinedType.GenericIEnumerator
: predefinedType.GenericIEnumerable;
case IRecursivePattern recursivePattern
when recursivePattern.TypeUsage == null
&& recursivePattern.DeconstructionPatternClause == null
&& recursivePattern.PropertyPatternClause is IPropertyPatternClause patternPropertyPatternClause
&& patternPropertyPatternClause.PatternsEnumerable.IsEmpty()
&& recursivePattern.Designation == null
&& !recursivePattern.ContainsPreprocessorDirectives():
{
}
[Pure]
public static bool CanRemoveDesignation([NotNull] this IRecursivePattern recursivePattern)
{
if (recursivePattern.TypeUsage == null && recursivePattern.PropertyPatternClause == null)
{
var deconstructionPatternClause = recursivePattern.DeconstructionPatternClause;
if (deconstructionPatternClause != null)
{
if (deconstructionPatternClause.Patterns.Count == 1) return false;
}
var tupleTypeComponent = tupleType.ComponentOrNull(componentIndex);
if (tupleTypeComponent != null)
{
var actualTypeName = tupleTypeComponent.Value.ExplicitName ?? TupleTypeComponent.GetDefaultComponentName(componentIndex);
consumer.AddHighlighting(new DeconstructionSubpatternWrongTupleComponentNameError(subpattern, actualTypeName));
}
switch (expression.GetOperandThroughParenthesisStrict())
{
case INullCoalescingExpression nullCoalescingExpression when nullCoalescingExpression.RightOperand is IThrowExpression:
expression = nullCoalescingExpression.LeftOperand.GetOperandThroughParenthesisStrict();
break;
case IInvocationExpression invocationExpression:
break;
default:
var sourceExpression = DeconstructionUtil.FindExpressionInTuple(infoInExpression);
if (sourceExpression != null && sourceExpression.Value.Indices.Count == 0)
{
namesCollection.Add(sourceExpression.Value.TopmostExpression, new EntryOptions(subrootPolicy: SubrootPolicy.Decompose));
}
if (previousMember is IExpressionBodyOwnerDeclaration expressionBodyOwnerDeclaration)
{
return expressionBodyOwnerDeclaration.ArrowClause?.Expression != null
&& expressionBodyOwnerDeclaration.Semicolon == null;
}
return false;
[Pure, ContractAnnotation("null => false")]
public static bool IsValueTuple([CanBeNull] this ITypeElement typeElement)
{
var structType = typeElement as IStruct;
if (structType == null) return false;
return typeElement.ShortName == "ValueTuple"
&& typeElement.GetContainingNamespace() is INamespace ns
&& ns.ShortName == "System"
&& ns.GetContainingNamespace() is INamespace root
var inferredType = currentStyle == VariableStyle.UseVar
? variableType
: deconstructionInfo.Indices.IsEmpty()
? deconstructionInfo.TopmostExpression.Type()
: FindInferredTypeForDeconstructionVariable(deconstructionInfo.TopmostExpression.GetExpressionType(),deconstructionInfo.Indices);