Binder\Binder_Conversions.cs (25)
269ConstantValue? constantValue = this.FoldConstantConversion(syntax, source, conversion, destination, diagnostics);
1945var constantValue = FoldConditionalOperator(condition, trueExpr, falseExpr);
2018constantValueOpt: ConstantValue.NotAvailable,
2100constantValueOpt: ConstantValue.NotAvailable,
2138constantValueOpt: ConstantValue.NotAvailable,
2190expr = new BoundConversion(syntax, source, conversion, @checked: false, explicitCastInCode: isCast, conversionGroup, constantValueOpt: ConstantValue.NotAvailable, type: delegateType, hasErrors: true) { WasCompilerGenerated = source.WasCompilerGenerated };
2233constantValueOpt: ConstantValue.NotAvailable,
2257return new BoundConversion(syntax, group, conversion, @checked: false, explicitCastInCode: isCast, conversionGroup, constantValueOpt: ConstantValue.NotAvailable, type: destination, hasErrors: hasErrors) { WasCompilerGenerated = group.WasCompilerGenerated };
2330DefaultValueFromAttributes: ConstantValue.NotAvailable
2366var delegateParamDefault = delegateParameter.HasExplicitDefaultValue ? delegateParameter.ExplicitDefaultConstantValue : null;
2510constantValueOpt: ConstantValue.NotAvailable,
2525constantValueOpt: ConstantValue.NotAvailable,
3089public ConstantValue? FoldConstantConversion(
3124var sourceConstantValue = source.ConstantValueOpt;
3155return ConstantValue.Create(sourceConstantValue.SingleValue);
3157return ConstantValue.Create(sourceConstantValue.DoubleValue);
3191private ConstantValue? FoldConstantNumericConversion(
3193ConstantValue sourceValue,
3224return ConstantValue.Bad;
3232return ConstantValue.Bad;
3248return ConstantValue.Bad;
3261return ConstantValue.Create(DoUncheckedConversion(destinationType, sourceValue), destinationType);
3264private static object DoUncheckedConversion(SpecialType destinationType, ConstantValue value)
3567public static bool CheckConstantBounds(SpecialType destinationType, ConstantValue value, out bool maySucceedAtRuntime)
3644private static object CanonicalizeConstant(ConstantValue value)
Binder\Binder_InterpolatedString.cs (10)
42ConstantValue? resultConstant = null;
47resultConstant = ConstantValue.Create(string.Empty);
102var alignmentConstant = alignment.ConstantValueOpt;
137format = new BoundLiteral(interpolation.FormatClause, ConstantValue.Create(text), stringType, hasErrors);
167var constantValue = ConstantValue.Create(text, SpecialType.System_String);
414expressions[0] = new BoundLiteral(syntax, ConstantValue.Create(formatString.ToStringAndFree()), GetSpecialType(Microsoft.CodeAnalysis.SpecialType.System_String, diagnostics, syntax)) { WasCompilerGenerated = true };
820argumentsBuilder.Add(new BoundLiteral(syntax, ConstantValue.Create(baseStringLength), intType) { WasCompilerGenerated = true });
822argumentsBuilder.Add(new BoundLiteral(syntax, ConstantValue.Create(numFormatHoles), intType) { WasCompilerGenerated = true });
955argumentsBuilder.Add(boundLiteral.Update(ConstantValue.Create(literalText), boundLiteral.Type));
Binder\Binder_Invocation.cs (12)
1480defaultValue = new BoundFieldAccess(syntax, null, fieldSymbol, ConstantValue.NotAvailable) { WasCompilerGenerated = true };
1676var parameterDefaultValue = parameter.ExplicitDefaultConstantValue;
1683var defaultConstantValue = parameterDefaultValue switch
1686{ IsBad: true } => ConstantValue.Null,
1689Debug.Assert((object?)defaultConstantValue != ConstantValue.Unset);
1697defaultValue = new BoundLiteral(syntax, ConstantValue.Create(line), Compilation.GetSpecialType(SpecialType.System_Int32)) { WasCompilerGenerated = true };
1702defaultValue = new BoundLiteral(syntax, ConstantValue.Create(path), Compilation.GetSpecialType(SpecialType.System_String)) { WasCompilerGenerated = true };
1707defaultValue = new BoundLiteral(syntax, ConstantValue.Create(memberName), Compilation.GetSpecialType(SpecialType.System_String)) { WasCompilerGenerated = true };
1715defaultValue = new BoundLiteral(syntax, ConstantValue.Create(argument.Syntax.ToString()), Compilation.GetSpecialType(SpecialType.System_String)) { WasCompilerGenerated = true };
1717else if (defaultConstantValue == ConstantValue.NotAvailable)
1844BoundExpression arraySize = new BoundLiteral(node, ConstantValue.Create(collectionArgs.Length), int32Type) { WasCompilerGenerated = true };
2414return new BoundNameOfOperator(node, boundArgument, ConstantValue.Create(name), Compilation.GetSpecialType(SpecialType.System_String));
Binder\Binder_Operators.cs (113)
821constantValueOpt: ConstantValue.NotAvailable,
924return new BoundBinaryOperator(node, kind, ConstantValue.NotAvailable, methodOpt: null, constrainedToTypeOpt: null, LookupResultKind.Empty, left, right, GetBinaryOperatorErrorType(kind, diagnostics, node), true);
948return new BoundLiteral(node, ConstantValue.Create(kind == BinaryOperatorKind.Equal), GetSpecialType(SpecialType.System_Boolean, diagnostics, node));
964var stringConstant = FoldBinaryOperator(node, BinaryOperatorKind.StringConcatenation, left, right, right.Type, diagnostics);
1040ConstantValue resultConstant = null;
1399var constantValue = FoldBinaryOperator(node, kind | BinaryOperatorKind.Bool, left, right, left.Type, diagnostics);
1412return new BoundBinaryOperator(node, kind, ConstantValue.NotAvailable, methodOpt: null, constrainedToTypeOpt: null,
1531ConstantValue.NotAvailable,
1542return new BoundBinaryOperator(node, kind, left, right, ConstantValue.NotAvailable, methodOpt: null, constrainedToTypeOpt: null, lookupResult, originalUserDefinedOperators, CreateErrorType(), true);
2400private static object FoldDecimalBinaryOperators(BinaryOperatorKind kind, ConstantValue valueLeft, ConstantValue valueRight)
2431private static object FoldNativeIntegerOverflowingBinaryOperator(BinaryOperatorKind kind, ConstantValue valueLeft, ConstantValue valueRight)
2474private static object FoldUncheckedIntegralBinaryOperator(BinaryOperatorKind kind, ConstantValue valueLeft, ConstantValue valueRight)
2530private static object FoldCheckedIntegralBinaryOperator(BinaryOperatorKind kind, ConstantValue valueLeft, ConstantValue valueRight)
2620private ConstantValue? FoldEnumBinaryOperator(
2681var constantValue = FoldBinaryOperator(syntax, newKind, newLeftOperand, newRightOperand, resultTypeSymbol, diagnostics);
2695private ConstantValue? FoldBinaryOperator(
2712ConstantValue? nullableEqualityResult = TryFoldingNullableEquality(kind, left, right);
2718var valueLeft = left.ConstantValueOpt;
2719var valueRight = right.ConstantValueOpt;
2727return ConstantValue.Bad;
2739return ConstantValue.Bad;
2754return ConstantValue.Create(newValue, resultType);
2757ConstantValue? concatResult = FoldStringConcatenation(kind, valueLeft, valueRight);
2778return ConstantValue.Bad;
2783return ConstantValue.Create(newValue, resultType);
2802return ConstantValue.Create(newValue, resultType);
2814return ConstantValue.Bad;
2824return ConstantValue.Create(newValue, resultType);
2852private static ConstantValue? TryFoldingNullableEquality(BinaryOperatorKind kind, BoundExpression left, BoundExpression right)
2863ConstantValue? leftConstant = leftConv.Operand.ConstantValueOpt;
2864ConstantValue? rightConstant = rightConv.Operand.ConstantValueOpt;
2874return (leftIsNull == rightIsNull) == (op == BinaryOperatorKind.Equal) ? ConstantValue.True : ConstantValue.False;
2885private static object? FoldNeverOverflowBinaryOperators(BinaryOperatorKind kind, ConstantValue valueLeft, ConstantValue valueRight)
3117private static ConstantValue? FoldStringConcatenation(BinaryOperatorKind kind, ConstantValue valueLeft, ConstantValue valueRight)
3128return (newLength > int.MaxValue) ? ConstantValue.Bad : ConstantValue.CreateFromRope(Rope.Concat(leftValue, rightValue));
4241return new BoundUnaryOperator(node, kind, operand, ConstantValue.NotAvailable,
4262constantValueOpt: ConstantValue.NotAvailable,
4279ConstantValue.NotAvailable,
4293var resultConstant = FoldUnaryOperator(node, resultOperatorKind, resultOperand, resultType, diagnostics);
4309private ConstantValue? FoldEnumUnaryOperator(
4330var constantValue = FoldUnaryOperator(syntax, newKind, operand, upconvertType, diagnostics);
4344private ConstantValue? FoldUnaryOperator(
4359var value = operand.ConstantValueOpt;
4374return ConstantValue.Create(newValue, resultType);
4393return ConstantValue.Create(newValue, resultType);
4405return ConstantValue.Bad;
4415return ConstantValue.Create(newValue, resultType);
4421private static object? FoldNeverOverflowUnaryOperator(UnaryOperatorKind kind, ConstantValue value)
4461private static object? FoldUncheckedIntegralUnaryOperator(UnaryOperatorKind kind, ConstantValue value)
4477private static object? FoldCheckedIntegralUnaryOperator(UnaryOperatorKind kind, ConstantValue value)
4493private static object? FoldNativeIntegerOverflowingUnaryOperator(UnaryOperatorKind kind, ConstantValue value)
4606return new BoundLiteral(node, ConstantValue.Create((int)-2147483648), GetSpecialType(SpecialType.System_Int32, diagnostics, node));
4621return new BoundLiteral(node, ConstantValue.Create(-9223372036854775808), GetSpecialType(SpecialType.System_Int64, diagnostics, node));
4627private static bool IsDivisionByZero(BinaryOperatorKind kind, ConstantValue valueRight)
4744var convertedExpression = BindExpressionForPattern(operand.Type, node.Right, ref hasErrors, isPatternDiagnostics, out var constantValueOpt, out var wasExpression, out _);
4751node.Right, convertedExpression, constantValueOpt ?? ConstantValue.Bad, operand.Type, convertedExpression.Type ?? operand.Type, hasErrors)
4790if (operand.ConstantValueOpt == ConstantValue.Null ||
4856ConstantValue operandConstantValue)
4863ConstantValue constantValue = GetIsOperatorConstantResult(operandType, targetType, conversionKind, operandConstantValue);
4872Debug.Assert(constantValue == ConstantValue.True || constantValue == ConstantValue.False);
4874ErrorCode errorCode = constantValue == ConstantValue.True ? ErrorCode.WRN_IsAlwaysTrue : ErrorCode.WRN_IsAlwaysFalse;
4882/// - <see cref="ConstantValue.False"/>
4883/// - <see cref="ConstantValue.True"/>
4884/// - <see cref="ConstantValue.Bad"/> - compiler doesn't support the type check, i.e. cannot perform it, even at runtime
4887internal static ConstantValue GetIsOperatorConstantResult(
4891ConstantValue operandConstantValue,
4930if (operandConstantValue == ConstantValue.Null)
4932return ConstantValue.False;
4940(operandConstantValue == null || operandConstantValue == ConstantValue.Null); // a non-null constant is never null
5005return ConstantValue.False;
5015return ConstantValue.False;
5036return ConstantValue.False;
5044return ConstantValue.False;
5049return ConstantValue.Bad;
5083return ConstantValue.False;
5093return ConstantValue.False;
5109return ConstantValue.False;
5118return operandCouldBeNull ? null : ConstantValue.True;
5124return ConstantValue.False;
5127return operandCouldBeNull ? null : ConstantValue.True;
5142return operandCouldBeNull ? null : ConstantValue.True;
5159return operandCouldBeNull ? null : ConstantValue.True;
5171? ConstantValue.True : ConstantValue.False;
5295operand = new BoundDefaultExpression(operand.Syntax, targetType: null, constantValueOpt: ConstantValue.Null,
5353ConstantValue operandConstantValue)
5415ConstantValue operandConstantValue)
5422ConstantValue constantValue = GetAsOperatorConstantResult(operandType, targetType, conversionKind, operandConstantValue);
5439/// - <see cref="ConstantValue.Null"/>
5440/// - <see cref="ConstantValue.Bad"/> - compiler doesn't support the type check, i.e. cannot perform it, even at runtime
5443internal static ConstantValue GetAsOperatorConstantResult(TypeSymbol operandType, TypeSymbol targetType, ConversionKind conversionKind, ConstantValue operandConstantValue)
5450ConstantValue isOperatorConstantResult = GetIsOperatorConstantResult(operandType, targetType, conversionKind, operandConstantValue);
5462return ConstantValue.Bad;
5465return ConstantValue.Null;
5805ConstantValue? constantValue = null;
5903private static ConstantValue FoldConditionalOperator(BoundExpression condition, BoundExpression trueExpr, BoundExpression falseExpr)
5905ConstantValue trueValue = trueExpr.ConstantValueOpt;
5911ConstantValue falseValue = falseExpr.ConstantValueOpt;
5917ConstantValue conditionValue = condition.ConstantValueOpt;
5922else if (conditionValue == ConstantValue.True)
5926else if (conditionValue == ConstantValue.False)
5932return ConstantValue.Bad;
Binder\Binder_Patterns.cs (26)
436var convertedExpression = BindExpressionOrTypeForPattern(inputType, innerExpression, ref hasErrors, diagnostics, out var constantValueOpt, out bool wasExpression, out Conversion patternConversion);
452node, convertedExpression, constantValueOpt ?? ConstantValue.Bad, inputType, convertedType, hasErrors || constantValueOpt is null);
514out ConstantValue? constantValueOpt,
542out ConstantValue? constantValueOpt,
560out ConstantValue? constantValueOpt,
590if (convertedExpression.Type is null && constantValueOpt != ConstantValue.Null)
603out ConstantValue? constantValue,
619if (expression.ConstantValueOpt == ConstantValue.Null)
632ConstantValue match = ExpressionOfTypeMatchesPatternType(Conversions, inputType, expression.Type, ref useSiteInfo, out _, operandConstantValue: null);
633if (match == ConstantValue.False || match == ConstantValue.Bad)
683if (constantValue == ConstantValue.Null)
777ConstantValue matchPossible = ExpressionOfTypeMatchesPatternType(
780if (matchPossible != ConstantValue.False && matchPossible != ConstantValue.Bad)
809/// - <see cref="ConstantValue.True"/> if the matched type catches all of them
810/// - <see cref="ConstantValue.False"/> if it catches none of them
811/// - <see cref="ConstantValue.Bad"/> - compiler doesn't support the type check, i.e. cannot perform it, even at runtime
814internal static ConstantValue ExpressionOfTypeMatchesPatternType(
820ConstantValue? operandConstantValue = null,
830return ConstantValue.True;
840ConstantValue result = Binder.GetIsOperatorConstantResult(expressionType, patternType, conversion.Kind, operandConstantValue, operandCouldBeNull);
843Debug.Assert(!conversion.IsUserDefined || result == ConstantValue.False || result == ConstantValue.Bad);
1643BoundExpression value = BindExpressionForPattern(inputType, node.Expression, ref hasErrors, diagnostics, out var constantValueOpt, out _, out Conversion patternConversion);
1679constantValueOpt = ConstantValue.Bad;
Binder\Binder_Statements.cs (9)
2271Conversion conversion, TypeSymbol sourceType, TypeSymbol targetType, ConstantValue sourceConstantValueOpt = null)
2288else if (conversion.Kind == ConversionKind.ExplicitNumeric && sourceConstantValueOpt != null && sourceConstantValueOpt != ConstantValue.Bad &&
2289ConversionsBase.HasImplicitConstantExpressionConversion(new BoundLiteral(syntax, ConstantValue.Bad, sourceType), targetType))
2686return BoundConversion.Synthesized(node, BindToTypeForErrorRecovery(expr), Conversion.NoConversion, false, explicitCastInCode: false, conversionGroupOpt: null, ConstantValue.NotAvailable, boolean, hasErrors: true);
2698ConstantValue.NotAvailable,
2750return BoundConversion.Synthesized(node, expr, Conversion.NoConversion, false, explicitCastInCode: false, conversionGroupOpt: null, ConstantValue.NotAvailable, boolean, hasErrors: true);
2769return new BoundUnaryOperator(node, signature.Kind, resultOperand, ConstantValue.NotAvailable, signature.Method, signature.ConstrainedToTypeOpt, resultKind, originalUserDefinedOperators, signature.ReturnType)
3381exceptionSource = new BoundLocal(declaration, local, ConstantValue.NotAvailable, local.Type);
3393if (boundFilter.ConstantValueOpt != ConstantValue.NotAvailable)
Binder\DecisionDagBuilder.cs (16)
389tests.Add(new Tests.One(new BoundDagValueTest(syntax, ConstantValue.Create(patternLength), lengthTemp)));
533if (constant.ConstantValue == ConstantValue.Null)
1201resultForRelation(BinaryOperatorKind relation, ConstantValue value)
1349ConstantValue? matches = ExpressionOfTypeMatchesPatternTypeForLearningFromSuccessfulTypeTest(t1.Type, t2.Type, ref useSiteInfo);
1350if (matches == ConstantValue.False)
1356else if (matches == ConstantValue.True)
1366if (matches == ConstantValue.True)
1407ConstantValue value,
1546(conditions ??= ArrayBuilder<Tests>.GetInstance()).Add(new Tests.One(new BoundDagValueTest(syntax, ConstantValue.Create(lengthValue), s1LengthTemp)));
1583private ConstantValue? ExpressionOfTypeMatchesPatternTypeForLearningFromSuccessfulTypeTest(
1588ConstantValue result = Binder.ExpressionOfTypeMatchesPatternType(_conversions, expressionType, patternType, ref useSiteInfo, out Conversion conversion);
2056public bool IsFullyMatched => RemainingTests is Tests.True && (WhenClause is null || WhenClause.ConstantValueOpt == ConstantValue.True);
2296static Tests? knownResult(BinaryOperatorKind relation, ConstantValue constant, int offset)
2308static ConstantValue safeAdd(ConstantValue constant, int offset)
2315return ConstantValue.Create(offset > (int.MaxValue - value) ? int.MaxValue : value + offset);
BoundTree\BoundObjectCreationExpression.cs (3)
13ImmutableArray<RefKind> argumentRefKindsOpt, bool expanded, ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, ConstantValue? constantValueOpt,
19ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, ConstantValue? constantValueOpt, BoundObjectInitializerExpressionBase? initializerExpressionOpt, TypeSymbol type)
26BitVector defaultArguments, ConstantValue? constantValueOpt, BoundObjectInitializerExpressionBase? initializerExpressionOpt, TypeSymbol type)
BoundTree\Constructors.cs (12)
18ConstantValue? constantValueOpt,
28ConstantValue? constantValueOpt,
40ConstantValue? constantValueOpt,
52ConstantValue? constantValueOpt,
335public static BoundConversion SynthesizedNonUserDefined(SyntaxNode syntax, BoundExpression operand, Conversion conversion, TypeSymbol type, ConstantValue? constantValueOpt = null)
362ConstantValue? constantValueOpt,
388ConstantValue? constantValueOpt,
412ConstantValue? constantValueOpt,
433ConstantValue? constantValueOpt,
446ConstantValue? constantValueOpt,
682ConstantValue? constantValueOpt,
694ConstantValue? constantValueOpt,
CodeGen\EmitStatement.cs (13)
1270dispatch.Cases.Select(p => new KeyValuePair<ConstantValue, object>(p.value, p.label)).ToArray(),
1277KeyValuePair<ConstantValue, object>[] switchCaseLabels,
1437lengthBasedSwitchInfo.LengthBasedJumpTable.LengthCaseLabels.Select(p => new KeyValuePair<ConstantValue, object>(ConstantValue.Create(p.value), p.label)).ToArray(),
1477charJumpTable.CharCaseLabels.Select(p => new KeyValuePair<ConstantValue, object>(ConstantValue.Create(p.value), p.label)).ToArray(),
1497stringJumpTable.StringCaseLabels.Select(p => new KeyValuePair<ConstantValue, object>(ConstantValue.Create(p.value), p.label)).ToArray(),
1513KeyValuePair<ConstantValue, object>[] switchCaseLabels,
1591if (stringConstant == ConstantValue.Null)
1717private void EmitStringCompareAndBranch(LocalOrParameter key, SyntaxNode syntaxNode, ConstantValue stringConstant, object targetLabel, Microsoft.Cci.IReference stringEqualityMethodRef)
1755private void EmitCharCompareAndBranch(LocalOrParameter key, SyntaxNode syntaxNode, ConstantValue stringConstant, object targetLabel, Cci.IReference sequenceEqualsRef, Cci.IReference asSpanRef)
2014var casesBuilder = ArrayBuilder<(ConstantValue, LabelSymbol)>.GetInstance();
Compiler\MethodBodySynthesizer.cs (8)
106ImmutableArray.Create<BoundExpression>(new BoundLiteral(syntax, ConstantValue.Create(slotIndex), intType) { WasCompilerGenerated = true }),
122new BoundFieldAccess(syntax, thisReference, hostObjectField, ConstantValue.NotAvailable) { WasCompilerGenerated = true },
126ImmutableArray.Create<BoundExpression>(new BoundLiteral(syntax, ConstantValue.Create(0), intType) { WasCompilerGenerated = true }),
132ConstantValue.NotAvailable,
150new BoundFieldAccess(syntax, thisReference, field, ConstantValue.NotAvailable) { WasCompilerGenerated = true },
154ImmutableArray.Create<BoundExpression>(new BoundLiteral(syntax, ConstantValue.Create(targetSubmissionIndex), intType) { WasCompilerGenerated = true }),
161ConstantValue.NotAvailable,
188var fieldAccess = new BoundFieldAccess(syntax, thisReference, field, ConstantValue.NotAvailable) { WasCompilerGenerated = true };
Generated\BoundNodes.xml.Generated.cs (56)
1164public BoundUnaryOperator(SyntaxNode syntax, UnaryOperatorKind operatorKind, BoundExpression operand, ConstantValue? constantValueOpt, MethodSymbol? methodOpt, TypeSymbol? constrainedToTypeOpt, LookupResultKind resultKind, ImmutableArray<MethodSymbol> originalUserDefinedOperatorsOpt, TypeSymbol type, bool hasErrors = false)
1183public override ConstantValue? ConstantValueOpt { get; }
1192public BoundUnaryOperator Update(UnaryOperatorKind operatorKind, BoundExpression operand, ConstantValue? constantValueOpt, MethodSymbol? methodOpt, TypeSymbol? constrainedToTypeOpt, LookupResultKind resultKind, ImmutableArray<MethodSymbol> originalUserDefinedOperatorsOpt, TypeSymbol type)
1959public BoundUnconvertedConditionalOperator(SyntaxNode syntax, BoundExpression condition, BoundExpression consequence, BoundExpression alternative, ConstantValue? constantValueOpt, ErrorCode noCommonTypeError, bool hasErrors = false)
1978public override ConstantValue? ConstantValueOpt { get; }
1984public BoundUnconvertedConditionalOperator Update(BoundExpression condition, BoundExpression consequence, BoundExpression alternative, ConstantValue? constantValueOpt, ErrorCode noCommonTypeError)
1998public BoundConditionalOperator(SyntaxNode syntax, bool isRef, BoundExpression condition, BoundExpression consequence, BoundExpression alternative, ConstantValue? constantValueOpt, TypeSymbol? naturalTypeOpt, bool wasTargetTyped, TypeSymbol type, bool hasErrors = false)
2021public override ConstantValue? ConstantValueOpt { get; }
2028public BoundConditionalOperator Update(bool isRef, BoundExpression condition, BoundExpression consequence, BoundExpression alternative, ConstantValue? constantValueOpt, TypeSymbol? naturalTypeOpt, bool wasTargetTyped, TypeSymbol type)
2822public BoundDefaultExpression(SyntaxNode syntax, BoundTypeExpression? targetType, ConstantValue? constantValueOpt, TypeSymbol type, bool hasErrors = false)
2834public override ConstantValue? ConstantValueOpt { get; }
2839public BoundDefaultExpression Update(BoundTypeExpression? targetType, ConstantValue? constantValueOpt, TypeSymbol type)
2925public BoundSizeOfOperator(SyntaxNode syntax, BoundTypeExpression sourceType, ConstantValue? constantValueOpt, TypeSymbol type, bool hasErrors = false)
2938public override ConstantValue? ConstantValueOpt { get; }
2943public BoundSizeOfOperator Update(BoundTypeExpression sourceType, ConstantValue? constantValueOpt, TypeSymbol type)
2957public BoundConversion(SyntaxNode syntax, BoundExpression operand, Conversion conversion, bool isBaseConversion, bool @checked, bool explicitCastInCode, ConstantValue? constantValueOpt, ConversionGroup? conversionGroupOpt, TypeSymbol type, bool hasErrors = false)
2979public override ConstantValue? ConstantValueOpt { get; }
2985public BoundConversion Update(BoundExpression operand, Conversion conversion, bool isBaseConversion, bool @checked, bool explicitCastInCode, ConstantValue? constantValueOpt, ConversionGroup? conversionGroupOpt, TypeSymbol type)
3823public BoundSwitchDispatch(SyntaxNode syntax, BoundExpression expression, ImmutableArray<(ConstantValue value, LabelSymbol label)> cases, LabelSymbol defaultLabel, LengthBasedStringSwitchData? lengthBasedStringSwitchDataOpt, bool hasErrors = false)
3838public ImmutableArray<(ConstantValue value, LabelSymbol label)> Cases { get; }
3845public BoundSwitchDispatch Update(BoundExpression expression, ImmutableArray<(ConstantValue value, LabelSymbol label)> cases, LabelSymbol defaultLabel, LengthBasedStringSwitchData? lengthBasedStringSwitchDataOpt)
4306public BoundLiteral(SyntaxNode syntax, ConstantValue? constantValueOpt, TypeSymbol? type, bool hasErrors)
4312public BoundLiteral(SyntaxNode syntax, ConstantValue? constantValueOpt, TypeSymbol? type)
4318public override ConstantValue? ConstantValueOpt { get; }
4323public BoundLiteral Update(ConstantValue? constantValueOpt, TypeSymbol? type)
4511public BoundLocal(SyntaxNode syntax, LocalSymbol localSymbol, BoundLocalDeclarationKind declarationKind, ConstantValue? constantValueOpt, bool isNullableUnknown, TypeSymbol type, bool hasErrors)
4524public BoundLocal(SyntaxNode syntax, LocalSymbol localSymbol, BoundLocalDeclarationKind declarationKind, ConstantValue? constantValueOpt, bool isNullableUnknown, TypeSymbol type)
4540public override ConstantValue? ConstantValueOpt { get; }
4546public BoundLocal Update(LocalSymbol localSymbol, BoundLocalDeclarationKind declarationKind, ConstantValue? constantValueOpt, bool isNullableUnknown, TypeSymbol type)
5318public BoundDagValueTest(SyntaxNode syntax, ConstantValue value, BoundDagTemp input, bool hasErrors = false)
5328public ConstantValue Value { get; }
5333public BoundDagValueTest Update(ConstantValue value, BoundDagTemp input)
5347public BoundDagRelationalTest(SyntaxNode syntax, BinaryOperatorKind operatorKind, ConstantValue value, BoundDagTemp input, bool hasErrors = false)
5359public ConstantValue Value { get; }
5364public BoundDagRelationalTest Update(BinaryOperatorKind operatorKind, ConstantValue value, BoundDagTemp input)
6351public BoundObjectCreationExpression(SyntaxNode syntax, MethodSymbol constructor, ImmutableArray<MethodSymbol> constructorsGroup, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool expanded, ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, ConstantValue? constantValueOpt, BoundObjectInitializerExpressionBase? initializerExpressionOpt, bool wasTargetTyped, TypeSymbol type, bool hasErrors = false)
6381public override ConstantValue? ConstantValueOpt { get; }
6388public BoundObjectCreationExpression Update(MethodSymbol constructor, ImmutableArray<MethodSymbol> constructorsGroup, ImmutableArray<BoundExpression> arguments, ImmutableArray<string?> argumentNamesOpt, ImmutableArray<RefKind> argumentRefKindsOpt, bool expanded, ImmutableArray<int> argsToParamsOpt, BitVector defaultArguments, ConstantValue? constantValueOpt, BoundObjectInitializerExpressionBase? initializerExpressionOpt, bool wasTargetTyped, TypeSymbol type)
7267public BoundFieldAccess(SyntaxNode syntax, BoundExpression? receiverOpt, FieldSymbol fieldSymbol, ConstantValue? constantValueOpt, LookupResultKind resultKind, bool isByValue, bool isDeclaration, TypeSymbol type, bool hasErrors = false)
7285public override ConstantValue? ConstantValueOpt { get; }
7293public BoundFieldAccess Update(BoundExpression? receiverOpt, FieldSymbol fieldSymbol, ConstantValue? constantValueOpt, LookupResultKind resultKind, bool isByValue, bool isDeclaration, TypeSymbol type)
7753public BoundNameOfOperator(SyntaxNode syntax, BoundExpression argument, ConstantValue constantValueOpt, TypeSymbol type, bool hasErrors = false)
7767public override ConstantValue ConstantValueOpt { get; }
7772public BoundNameOfOperator Update(BoundExpression argument, ConstantValue constantValueOpt, TypeSymbol type)
7786protected BoundInterpolatedStringBase(BoundKind kind, SyntaxNode syntax, ImmutableArray<BoundExpression> parts, ConstantValue? constantValueOpt, TypeSymbol? type, bool hasErrors = false)
7797public override ConstantValue? ConstantValueOpt { get; }
7802public BoundUnconvertedInterpolatedString(SyntaxNode syntax, ImmutableArray<BoundExpression> parts, ConstantValue? constantValueOpt, TypeSymbol? type, bool hasErrors = false)
7814public BoundUnconvertedInterpolatedString Update(ImmutableArray<BoundExpression> parts, ConstantValue? constantValueOpt, TypeSymbol? type)
7828public BoundInterpolatedString(SyntaxNode syntax, InterpolatedStringHandlerData? interpolationData, ImmutableArray<BoundExpression> parts, ConstantValue? constantValueOpt, TypeSymbol? type, bool hasErrors = false)
7842public BoundInterpolatedString Update(InterpolatedStringHandlerData? interpolationData, ImmutableArray<BoundExpression> parts, ConstantValue? constantValueOpt, TypeSymbol? type)
8027public BoundConstantPattern(SyntaxNode syntax, BoundExpression value, ConstantValue constantValue, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false)
8045public ConstantValue ConstantValue { get; }
8050public BoundConstantPattern Update(BoundExpression value, ConstantValue constantValue, TypeSymbol inputType, TypeSymbol narrowedType)
8534public BoundRelationalPattern(SyntaxNode syntax, BinaryOperatorKind relation, BoundExpression value, ConstantValue constantValue, TypeSymbol inputType, TypeSymbol narrowedType, bool hasErrors = false)
8554public ConstantValue ConstantValue { get; }
8559public BoundRelationalPattern Update(BinaryOperatorKind relation, BoundExpression value, ConstantValue constantValue, TypeSymbol inputType, TypeSymbol narrowedType)
Lowering\LocalRewriter\LocalRewriter.DecisionDagRewriter.cs (20)
589var cases = ArrayBuilder<(ConstantValue value, LabelSymbol label)>.GetInstance();
620ImmutableArray<(ConstantValue value, LabelSymbol label)> cases,
643(ImmutableArray<(ConstantValue value, LabelSymbol label)> whenTrueCases, ImmutableArray<(ConstantValue value, LabelSymbol label)> whenFalseCases)
644splitCases(ImmutableArray<(ConstantValue value, LabelSymbol label)> cases, BinaryOperatorKind op, ConstantValue value)
646var whenTrueBuilder = ArrayBuilder<(ConstantValue value, LabelSymbol label)>.GetInstance();
647var whenFalseBuilder = ArrayBuilder<(ConstantValue value, LabelSymbol label)>.GetInstance();
704private sealed class CasesComparer : IComparer<(ConstantValue value, LabelSymbol label)>
713int IComparer<(ConstantValue value, LabelSymbol label)>.Compare((ConstantValue value, LabelSymbol label) left, (ConstantValue value, LabelSymbol label) right)
715var x = left.value;
716var y = right.value;
736static bool isNaN(ConstantValue value) =>
787ImmutableArray<(ConstantValue value, LabelSymbol label)> cases;
793cases = node.Cases.SelectAsArray(p => (ConstantValue.Create((long)p.value.Int32Value), p.label));
799cases = node.Cases.SelectAsArray(p => (ConstantValue.Create((ulong)p.value.UInt32Value), p.label));
1009if (whenExpression is not null && whenExpression.ConstantValueOpt != ConstantValue.True)
1161if (whenClause.WhenExpression != null && whenClause.WhenExpression.ConstantValueOpt != ConstantValue.True)
Lowering\LocalRewriter\LocalRewriter.DecisionDagRewriter.ValueDispatchNode.cs (6)
38public readonly ImmutableArray<(ConstantValue value, LabelSymbol label)> Cases;
40public SwitchDispatch(SyntaxNode syntax, ImmutableArray<(ConstantValue value, LabelSymbol label)> dispatches, LabelSymbol otherwise) : base(syntax)
80public readonly ConstantValue Value;
86private RelationalDispatch(SyntaxNode syntax, ConstantValue value, BinaryOperatorKind op, ValueDispatchNode left, ValueDispatchNode right) : base(syntax)
133public static ValueDispatchNode CreateBalanced(SyntaxNode syntax, ConstantValue value, BinaryOperatorKind op, ValueDispatchNode whenTrue, ValueDispatchNode whenFalse)
140private static ValueDispatchNode CreateBalancedCore(SyntaxNode syntax, ConstantValue value, BinaryOperatorKind op, ValueDispatchNode left, ValueDispatchNode right)
Lowering\LocalRewriter\LocalRewriter.PatternLocalRewriter.cs (4)
383_factory.Convert(operandType, new BoundLiteral(syntax, ConstantValue.Null, objectType)),
391protected BoundExpression MakeValueTest(SyntaxNode syntax, BoundExpression input, ConstantValue value)
405protected BoundExpression MakeRelationalTest(SyntaxNode syntax, BoundExpression input, BinaryOperatorKind operatorKind, ConstantValue value)
435private BoundExpression MakeSpanStringTest(BoundExpression input, ConstantValue value)
Lowering\LocalRewriter\LocalRewriter_BinaryOperator.cs (49)
287if (loweredRight.ConstantValueOpt == ConstantValue.True) return loweredLeft;
288if (loweredLeft.ConstantValueOpt == ConstantValue.True) return loweredRight;
289if (loweredLeft.ConstantValueOpt == ConstantValue.False) return loweredLeft;
299if (loweredRight.ConstantValueOpt == ConstantValue.False) return loweredLeft;
300if (loweredLeft.ConstantValueOpt == ConstantValue.False) return loweredRight;
301if (loweredLeft.ConstantValueOpt == ConstantValue.True) return loweredLeft;
311if (loweredRight.ConstantValueOpt == ConstantValue.True) return loweredLeft;
312if (loweredLeft.ConstantValueOpt == ConstantValue.True) return loweredRight;
332if (loweredRight.ConstantValueOpt == ConstantValue.False) return loweredLeft;
333if (loweredLeft.ConstantValueOpt == ConstantValue.False) return loweredRight;
337if (loweredLeft.ConstantValueOpt == ConstantValue.True) return loweredRight;
338if (loweredRight.ConstantValueOpt == ConstantValue.True) return loweredLeft;
342if (loweredLeft.ConstantValueOpt == ConstantValue.False)
345if (loweredRight.ConstantValueOpt == ConstantValue.False)
351if (loweredLeft.ConstantValueOpt == ConstantValue.False) return loweredRight;
352if (loweredRight.ConstantValueOpt == ConstantValue.False) return loweredLeft;
356if (loweredLeft.ConstantValueOpt == ConstantValue.True)
359if (loweredRight.ConstantValueOpt == ConstantValue.True)
365if (loweredLeft.ConstantValueOpt == ConstantValue.False) return loweredRight;
366if (loweredRight.ConstantValueOpt == ConstantValue.False) return loweredLeft;
370if (loweredLeft.ConstantValueOpt == ConstantValue.True)
373if (loweredRight.ConstantValueOpt == ConstantValue.True)
633ConstantValue? constantLeft = loweredLeft.ConstantValueOpt ?? UnboxConstant(loweredLeft);
634if (testOperator == UnaryOperatorKind.DynamicFalse && constantLeft == ConstantValue.False ||
635testOperator == UnaryOperatorKind.DynamicTrue && constantLeft == ConstantValue.True)
677bool leftTestIsConstantFalse = testOperator == UnaryOperatorKind.DynamicFalse && constantLeft == ConstantValue.True ||
678testOperator == UnaryOperatorKind.DynamicTrue && constantLeft == ConstantValue.False;
719private static ConstantValue? UnboxConstant(BoundExpression expression)
757return new BoundUnaryOperator(syntax, UnaryOperatorKind.BoolLogicalNegation, converted, ConstantValue.NotAvailable, MethodSymbol.None, constrainedToTypeOpt: null, LookupResultKind.Viable, boolean)
835return MakeLiteral(syntax, ConstantValue.Create(kind.Operator() == BinaryOperatorKind.Equal), boolType);
862BoundExpression result = MakeLiteral(syntax, ConstantValue.Create(operatorKind == BinaryOperatorKind.NotEqual), boolType);
927return MakeLiteral(syntax, ConstantValue.Create(value), _compilation.GetSpecialType(SpecialType.System_Boolean));
1123[NotNullWhen(returnValue: true)] ConstantValue? constantValue)
1280rewrittenAlternative: MakeLiteral(syntax, ConstantValue.Create(operatorKind == BinaryOperatorKind.Equal), boolType),
1648ConstantValue.NotAvailable,
1970return MakeLiteral(syntax, ConstantValue.Create(kind == BinaryOperatorKind.NullableNullEqual), returnType);
2009new BoundUnaryOperator(syntax, UnaryOperatorKind.BoolLogicalNegation, call, ConstantValue.NotAvailable, null, constrainedToTypeOpt: null, LookupResultKind.Viable, returnType);
2016if (oldNode != null && (loweredLeft.ConstantValueOpt == ConstantValue.Null || loweredRight.ConstantValueOpt == ConstantValue.Null))
2110return MakeLiteral(syntax, ConstantValue.Create(rewrittenExpr.ConstantValueOpt.IsNull, ConstantValueTypeDiscriminator.Boolean), boolType);
2112return MakeLiteral(syntax, ConstantValue.Create(!rewrittenExpr.ConstantValueOpt.IsNull, ConstantValueTypeDiscriminator.Boolean), boolType);
2135MakeLiteral(syntax, ConstantValue.Null, objectType),
2155ConstantValue? rightConstantValue = loweredRight.ConstantValueOpt;
2168loweredRight = MakeLiteral(rightSyntax, ConstantValue.Create(shiftAmount), rightType);
2181MakeLiteral(rightSyntax, ConstantValue.Create(rightMask), rightType),
2227ConstantValue? rightConstantValue = loweredRight.ConstantValueOpt;
2301ConstantValue.NotAvailable,
2359var constVal = numericOperand.ConstantValueOpt;
2370var constVal = numericOperand.ConstantValueOpt;
Lowering\LocalRewriter\LocalRewriter_Conversion.cs (9)
267ConstantValue? constantValueOpt,
302ConstantValue? constantValueOpt,
845ConstantValue? constantValueOpt = null)
1326MakeConversionNode(null, syntax, conditional.Consequence, conversion, @checked, explicitCastInCode: false, constantValueOpt: ConstantValue.NotAvailable, rewrittenType: type),
1327MakeConversionNode(null, syntax, conditional.Alternative, conversion, @checked, explicitCastInCode: false, constantValueOpt: ConstantValue.NotAvailable, rewrittenType: type),
1328ConstantValue.NotAvailable,
1487ConstantValue? constantValueOpt,
1697private BoundExpression RewriteDecimalConversion(SyntaxNode syntax, BoundExpression operand, TypeSymbol fromType, TypeSymbol toType, bool @checked, bool isImplicit, ConstantValue? constantValueOpt)
1728private BoundExpression RewriteDecimalConversionCore(SyntaxNode syntax, BoundExpression operand, TypeSymbol fromType, TypeSymbol toType, bool isImplicit, ConstantValue? constantValueOpt)
Lowering\LocalRewriter\LocalRewriter_ForEachStatement.cs (6)
458right: MakeLiteral(forEachSyntax, constantValue: ConstantValue.Null, type: null),
637MakeLiteral(forEachSyntax, ConstantValue.Default(SpecialType.System_Int32), intType));
926MakeLiteral(forEachSyntax, ConstantValue.Default(SpecialType.System_Int32), intType));
1089constantValue: ConstantValue.Create(dimension, ConstantValueTypeDiscriminator.Int32),
1143constantValue: ConstantValue.Create(dimension, ConstantValueTypeDiscriminator.Int32),
1256constantValue: ConstantValue.Create(1),
Lowering\LocalRewriter\LocalRewriter_Literal.cs (14)
23private BoundExpression MakeLiteral(SyntaxNode syntax, ConstantValue constantValue, TypeSymbol? type, BoundLiteral? oldNodeOpt = null)
51private BoundExpression MakeDecimalLiteral(SyntaxNode syntax, ConstantValue constantValue)
100arguments.Add(new BoundLiteral(syntax, ConstantValue.Create((int)value), _compilation.GetSpecialType(SpecialType.System_Int32)));
106arguments.Add(new BoundLiteral(syntax, ConstantValue.Create((uint)value), _compilation.GetSpecialType(SpecialType.System_UInt32)));
112arguments.Add(new BoundLiteral(syntax, ConstantValue.Create((long)value), _compilation.GetSpecialType(SpecialType.System_Int64)));
118arguments.Add(new BoundLiteral(syntax, ConstantValue.Create((ulong)value), _compilation.GetSpecialType(SpecialType.System_UInt64)));
124arguments.Add(new BoundLiteral(syntax, ConstantValue.Create(low), _compilation.GetSpecialType(SpecialType.System_Int32)));
125arguments.Add(new BoundLiteral(syntax, ConstantValue.Create(mid), _compilation.GetSpecialType(SpecialType.System_Int32)));
126arguments.Add(new BoundLiteral(syntax, ConstantValue.Create(high), _compilation.GetSpecialType(SpecialType.System_Int32)));
127arguments.Add(new BoundLiteral(syntax, ConstantValue.Create(isNegative), _compilation.GetSpecialType(SpecialType.System_Boolean)));
128arguments.Add(new BoundLiteral(syntax, ConstantValue.Create(scale), _compilation.GetSpecialType(SpecialType.System_Byte)));
142private BoundExpression MakeDateTimeLiteral(SyntaxNode syntax, ConstantValue constantValue)
148arguments.Add(new BoundLiteral(syntax, ConstantValue.Create(constantValue.DateTimeValue.Ticks), _compilation.GetSpecialType(SpecialType.System_Int64)));
159constantValueOpt: ConstantValue.NotAvailable, initializerExpressionOpt: null, type: ctor.ContainingType);
Lowering\LocalRewriter\LocalRewriter_UnaryOperator.cs (17)
90var constant = UnboxConstant(loweredOperand);
91if (constant == ConstantValue.True || constant == ConstantValue.False)
343ConstantValue.NotAvailable,
898(TypeSymbol binaryOperandType, ConstantValue constantOne) = GetConstantOneForIncrement(_compilation, binaryOperatorKind);
1011return RewriteConditionalOperator(syntax, condition, consequence, alternative, ConstantValue.NotAvailable, operand.Type, isRef: false);
1243private static (TypeSymbol, ConstantValue) GetConstantOneForIncrement(
1247ConstantValue constantOne;
1252constantOne = ConstantValue.Create(1);
1255constantOne = ConstantValue.Create(1U);
1258constantOne = ConstantValue.Create(1L);
1261constantOne = ConstantValue.Create(1LU);
1264constantOne = ConstantValue.Create(1);
1267constantOne = ConstantValue.Create(1U);
1270constantOne = ConstantValue.Create(1f);
1273constantOne = ConstantValue.Create(1.0);
1276constantOne = ConstantValue.Create(1m);
Lowering\SyntheticBoundNodeFactory.cs (21)
251return new BoundFieldAccess(Syntax, receiver, f, ConstantValue.NotAvailable, LookupResultKind.Viable, f.Type) { WasCompilerGenerated = true };
575expression = BoundConversion.Synthesized(Syntax, expression, conversion, false, explicitCastInCode: false, conversionGroupOpt: null, ConstantValue.NotAvailable, CurrentFunction.ReturnType);
644return new BoundBinaryOperator(this.Syntax, kind, ConstantValue.NotAvailable, methodOpt: null, constrainedToTypeOpt: null, LookupResultKind.Viable, left, right, type) { WasCompilerGenerated = true };
723return new BoundLiteral(Syntax, ConstantValue.Create(value), SpecialType(Microsoft.CodeAnalysis.SpecialType.System_Byte)) { WasCompilerGenerated = true };
728return new BoundLiteral(Syntax, ConstantValue.Create(value), SpecialType(Microsoft.CodeAnalysis.SpecialType.System_Int32)) { WasCompilerGenerated = true };
736return new BoundLiteral(Syntax, ConstantValue.Create(value), SpecialType(Microsoft.CodeAnalysis.SpecialType.System_UInt32)) { WasCompilerGenerated = true };
739public BoundLiteral Literal(ConstantValue value, TypeSymbol type)
1094var caseBuilder = ArrayBuilder<(ConstantValue Value, LabelSymbol label)>.GetInstance();
1105caseBuilder.Add((ConstantValue.Create(value), sectionLabel));
1145return new BoundLiteral(Syntax, ConstantValue.Create(value), SpecialType(Microsoft.CodeAnalysis.SpecialType.System_Boolean)) { WasCompilerGenerated = true };
1150var stringConst = ConstantValue.Create(value);
1154public BoundLiteral StringLiteral(ConstantValue stringConst)
1162return StringLiteral(ConstantValue.Create(stringValue));
1165public BoundLiteral CharLiteral(ConstantValue charConst)
1173return CharLiteral(ConstantValue.Create(charValue));
1250BoundExpression nullLiteral = new BoundLiteral(syntax, ConstantValue.Null, type) { WasCompilerGenerated = true };
1781return Literal(ConstantValue.Create(rewrittenExpr.ConstantValueOpt.IsNull, ConstantValueTypeDiscriminator.Boolean), boolType);
1783return Literal(ConstantValue.Create(rewrittenExpr.ConstantValueOpt.IsNull, ConstantValueTypeDiscriminator.Boolean), boolType);
1803return RewriteNullableNullEquality(syntax, operatorKind, rewrittenExpr, Literal(ConstantValue.Null, objectType), boolType);
1888new BoundUnaryOperator(syntax, UnaryOperatorKind.BoolLogicalNegation, call, ConstantValue.NotAvailable, methodOpt: null, constrainedToTypeOpt: null, LookupResultKind.Viable, returnType);
Symbols\Source\SourceComplexParameterSymbol.cs (31)
40protected ConstantValue? _lazyDefaultSyntaxValue;
82_lazyDefaultSyntaxValue = ConstantValue.Unset;
94internal sealed override ConstantValue? ExplicitDefaultConstantValue
112internal sealed override ConstantValue? DefaultValueFromAttributes
117return (data != null && data.DefaultParameterValue != ConstantValue.Unset) ? data.DefaultParameterValue : null;
247private ConstantValue? DefaultSyntaxValue
255var previousValue = Interlocked.CompareExchange(
258ConstantValue.Unset);
259Debug.Assert(previousValue == ConstantValue.Unset);
279DefaultValueFromAttributes == ConstantValue.NotAvailable)
338var defaultValue = DefaultValueFromAttributes;
367private ConstantValue? MakeDefaultExpression(BindingDiagnosticBag diagnostics, out Binder? binder, out BoundParameterEqualsValue? parameterEqualsValue)
394return ConstantValue.Bad;
401return ConstantValue.Bad;
418var value = convertedExpression.ConstantValueOpt ?? ConstantValue.Null;
739ConstantValue value;
742value = ConstantValue.Bad;
751if (paramData.DefaultParameterValue == ConstantValue.Unset)
930var value = DecodeDefaultParameterValueAttribute(description, attribute, syntax, diagnose: true, diagnosticsOpt: diagnostics);
948private void VerifyParamDefaultValueMatchesAttributeIfAny(ConstantValue value, SyntaxNode syntax, BindingDiagnosticBag diagnostics)
953var attrValue = data.DefaultParameterValue;
954if ((attrValue != ConstantValue.Unset) &&
963private ConstantValue DecodeDefaultParameterValueAttribute(AttributeDescription description, CSharpAttributeData attribute, AttributeSyntax node, bool diagnose, BindingDiagnosticBag diagnosticsOpt)
982private ConstantValue DecodeDefaultParameterValueAttribute(CSharpAttributeData attribute, AttributeSyntax node, bool diagnose, BindingDiagnosticBag diagnosticsOpt)
993return ConstantValue.Bad;
1014var constantValueDiscriminator = ConstantValue.GetDiscriminator(specialType);
1031return ConstantValue.Bad;
1041return ConstantValue.Bad;
1052return ConstantValue.Bad;
1060return ConstantValue.Create(arg.ValueInternal, constantValueDiscriminator);
Symbols\Source\SourceFieldSymbol.cs (21)
175private ConstantValue _lazyConstantEarlyDecodingValue = Microsoft.CodeAnalysis.ConstantValue.Unset;
176private ConstantValue _lazyConstantValue = Microsoft.CodeAnalysis.ConstantValue.Unset;
237internal sealed override ConstantValue GetConstantValue(ConstantFieldsInProgress inProgress, bool earlyDecodingWellKnownAttributes)
239var value = this.GetLazyConstantValue(earlyDecodingWellKnownAttributes);
240if (value != Microsoft.CodeAnalysis.ConstantValue.Unset)
251return Microsoft.CodeAnalysis.ConstantValue.Unset;
282var value = this.GetLazyConstantValue(earlyDecodingWellKnownAttributes);
283if (value != Microsoft.CodeAnalysis.ConstantValue.Unset)
302(value != Microsoft.CodeAnalysis.ConstantValue.Unset) &&
324if (this.GetLazyConstantValue(earlyDecodingWellKnownAttributes) != Microsoft.CodeAnalysis.ConstantValue.Unset)
336var value = MakeConstantValue(builder, earlyDecodingWellKnownAttributes, diagnostics);
346private ConstantValue GetLazyConstantValue(bool earlyDecodingWellKnownAttributes)
352ConstantValue value,
357Debug.Assert(value != Microsoft.CodeAnalysis.ConstantValue.Unset);
358Debug.Assert((GetLazyConstantValue(earlyDecodingWellKnownAttributes) == Microsoft.CodeAnalysis.ConstantValue.Unset) ||
363Interlocked.CompareExchange(ref _lazyConstantEarlyDecodingValue, value, Microsoft.CodeAnalysis.ConstantValue.Unset);
367if (Interlocked.CompareExchange(ref _lazyConstantValue, value, Microsoft.CodeAnalysis.ConstantValue.Unset) == Microsoft.CodeAnalysis.ConstantValue.Unset)
381protected abstract ConstantValue MakeConstantValue(HashSet<SourceFieldSymbolWithSyntaxReference> dependencies, bool earlyDecodingWellKnownAttributes, BindingDiagnosticBag diagnostics);