6 instantiations of SafeContext
Microsoft.CodeAnalysis.CSharp (6)
Binder\SafeContext.cs (6)
41
public static readonly SafeContext CallingMethod = new
SafeContext
(CallingMethodRaw);
47
public static readonly SafeContext ReturnOnly = new
SafeContext
(ReturnOnlyRaw);
53
public static readonly SafeContext CurrentMethod = new
SafeContext
(CurrentMethodRaw);
58
public static readonly SafeContext Empty = new
SafeContext
(uint.MaxValue);
67
return new
SafeContext
(_value + 1);
77
return new
SafeContext
(_value - 1);
193 references to SafeContext
Microsoft.CodeAnalysis.CSharp (193)
Binder\Binder.ValueChecks.cs (118)
1343
private bool CheckLocalRefEscape(SyntaxNode node, BoundLocal local,
SafeContext
escapeTo, bool checkingReceiver, BindingDiagnosticBag diagnostics)
1500
private static EscapeLevel? EscapeLevelFromScope(
SafeContext
lifetime) => lifetime switch
1507
private static
SafeContext
GetParameterValEscape(ParameterSymbol parameter)
1511
{ EffectiveScope: ScopedKind.ScopedValue } =>
SafeContext
.CurrentMethod,
1512
{ RefKind: RefKind.Out, UseUpdatedEscapeRules: true } =>
SafeContext
.ReturnOnly,
1513
_ =>
SafeContext
.CallingMethod
1520
private static
SafeContext
GetParameterRefEscape(ParameterSymbol parameter)
1524
{ RefKind: RefKind.None } =>
SafeContext
.CurrentMethod,
1525
{ EffectiveScope: ScopedKind.ScopedRef } =>
SafeContext
.CurrentMethod,
1526
{ HasUnscopedRefAttribute: true, UseUpdatedEscapeRules: true, RefKind: RefKind.Out } =>
SafeContext
.ReturnOnly,
1527
{ HasUnscopedRefAttribute: true, UseUpdatedEscapeRules: true, IsThis: false } =>
SafeContext
.CallingMethod,
1528
_ =>
SafeContext
.ReturnOnly
1535
private bool CheckParameterValEscape(SyntaxNode node, ParameterSymbol parameter,
SafeContext
escapeTo, BindingDiagnosticBag diagnostics)
1553
private bool CheckParameterRefEscape(SyntaxNode node, BoundExpression parameter, ParameterSymbol parameterSymbol,
SafeContext
escapeTo, bool checkingReceiver, BindingDiagnosticBag diagnostics)
1555
var
refSafeToEscape = GetParameterRefEscape(parameterSymbol);
1759
private
SafeContext
GetFieldRefEscape(BoundFieldAccess fieldAccess)
1766
return
SafeContext
.CallingMethod;
1782
private bool CheckFieldRefEscape(SyntaxNode node, BoundFieldAccess fieldAccess,
SafeContext
escapeTo, BindingDiagnosticBag diagnostics)
1806
private bool CheckFieldLikeEventRefEscape(SyntaxNode node, BoundEventAccess eventAccess,
SafeContext
escapeTo, BindingDiagnosticBag diagnostics)
2204
internal
SafeContext
GetInterpolatedStringHandlerConversionEscapeScope(
2215
SafeContext
escapeScope = GetValEscape(data.Construction);
2236
private
SafeContext
GetInvocationEscapeScope(
2254
SafeContext
getInvocationEscapeWithOldRules(ref readonly MethodInvocationInfo methodInvocationInfo, bool isRefEscape)
2268
SafeContext
escapeScope =
SafeContext
.CallingMethod;
2288
SafeContext
argumentEscape = (isRefEscape, argumentIsRefEscape) switch
2318
private
SafeContext
GetInvocationEscapeWithUpdatedRules(
2323
SafeContext
escapeScope =
SafeContext
.CallingMethod;
2344
SafeContext
argEscape = isArgumentRefEscape ?
2361
private
SafeContext
GetInvocationEscapeToReceiver(
2365
SafeContext
escapeScope =
SafeContext
.CallingMethod;
2372
SafeContext
argEscape = isArgumentRefEscape
2450
SafeContext
escapeTo,
2469
bool checkingReceiver,
SafeContext
escapeTo,
2546
SafeContext
escapeTo,
2599
SafeContext
escapeTo,
3183
SafeContext
escapeTo = _localScopeDepth;
3217
var
inferredDestinationValEscape =
SafeContext
.CallingMethod;
3265
var
toArgEscape = GetValEscape(mixableArg.Argument);
3304
var
inferredDestinationValEscape =
SafeContext
.CallingMethod;
3580
private static ErrorCode GetStandardRValueRefEscapeError(
SafeContext
escapeTo)
3664
internal void ValidateEscape(BoundExpression expr,
SafeContext
escapeTo, bool isByRef, BindingDiagnosticBag diagnostics)
3687
internal
SafeContext
GetRefEscape(BoundExpression expr)
3696
return
SafeContext
.CallingMethod;
3702
return
SafeContext
.CallingMethod;
3719
return
SafeContext
.CallingMethod;
3725
return
SafeContext
.CurrentMethod;
3782
return
SafeContext
.CallingMethod;
3794
return
SafeContext
.CallingMethod;
3849
return
SafeContext
.CallingMethod;
3854
return
SafeContext
.CallingMethod;
3964
internal bool CheckRefEscape(SyntaxNode node, BoundExpression expr,
SafeContext
escapeTo, bool checkingReceiver, BindingDiagnosticBag diagnostics)
4301
internal
SafeContext
GetBroadestValEscape(BoundTupleExpression expr)
4303
SafeContext
broadest = _localScopeDepth;
4306
SafeContext
valEscape;
4327
internal
SafeContext
GetValEscape(BoundExpression expr)
4336
return
SafeContext
.CallingMethod;
4342
return
SafeContext
.CallingMethod;
4348
return
SafeContext
.CallingMethod;
4363
return
SafeContext
.CallingMethod;
4371
return
SafeContext
.CallingMethod;
4383
return
SafeContext
.CallingMethod;
4386
return
SafeContext
.CallingMethod;
4403
return
SafeContext
.CurrentMethod;
4408
var
consEscape = GetValEscape(conditional.Consequence);
4433
return
SafeContext
.CallingMethod;
4445
return
SafeContext
.CallingMethod;
4492
return
SafeContext
.CallingMethod;
4529
var
escape = GetInvocationEscapeScope(
4546
var
escape =
SafeContext
.CallingMethod;
4587
SafeContext
.CallingMethod;
4681
return (range.LeftOperandOpt is { } left ? GetValEscape(left) :
SafeContext
.CallingMethod)
4682
.Intersect(range.RightOperandOpt is { } right ? GetValEscape(right) :
SafeContext
.CallingMethod);
4730
return
SafeContext
.CallingMethod;
4808
private
SafeContext
GetTupleValEscape(ImmutableArray<BoundExpression> elements)
4810
SafeContext
narrowestScope = _localScopeDepth;
4819
private
SafeContext
GetValEscapeOfCollectionInitializer(BoundCollectionInitializerExpression colExpr)
4821
var
result =
SafeContext
.CallingMethod;
4838
private
SafeContext
GetValEscapeOfObjectInitializer(BoundObjectInitializerExpression initExpr)
4840
var
result =
SafeContext
.CallingMethod;
4843
var
exprResult = GetValEscapeOfObjectMemberInitializer(expr);
4850
private
SafeContext
GetValEscapeOfObjectMemberInitializer(BoundExpression expr)
4852
SafeContext
result;
4856
var
rightEscape = assignment.IsRef
4881
SafeContext
getIndexerEscape(
4884
SafeContext
rightEscapeScope)
4890
return
SafeContext
.CallingMethod;
4897
return
SafeContext
.CallingMethod;
4918
SafeContext
receiverEscapeScope =
SafeContext
.CallingMethod;
4928
SafeContext
escapeScope = escapeValue.IsRefEscape
4938
SafeContext
getPropertyEscape(
4940
SafeContext
rightEscapeScope)
4946
return
SafeContext
.CallingMethod;
4955
private
SafeContext
GetValEscape(ImmutableArray<BoundExpression> expressions)
4957
var
result =
SafeContext
.CallingMethod;
4971
internal bool CheckValEscape(SyntaxNode node, BoundExpression expr,
SafeContext
escapeTo, bool checkingReceiver, BindingDiagnosticBag diagnostics)
5061
if (!
SafeContext
.CurrentMethod.IsConvertibleTo(escapeTo))
5735
private bool CheckTupleValEscape(ImmutableArray<BoundExpression> elements,
SafeContext
escapeTo, BindingDiagnosticBag diagnostics)
5750
private bool CheckValEscapeOfCollectionInitializer(BoundCollectionInitializerExpression colExpr,
SafeContext
escapeTo, BindingDiagnosticBag diagnostics)
5775
private bool CheckValEscapeOfObjectInitializer(BoundObjectInitializerExpression initExpr,
SafeContext
escapeTo, BindingDiagnosticBag diagnostics)
5791
private bool CheckInterpolatedStringHandlerConversionEscape(BoundExpression expression,
SafeContext
escapeTo, BindingDiagnosticBag diagnostics)
5818
private
SafeContext
GetValEscapeOfInterpolatedStringHandlerCalls(BoundExpression expression)
5820
SafeContext
scope =
SafeContext
.CallingMethod;
5839
SafeContext
getPartsScope(BoundInterpolatedString interpolatedString)
5841
SafeContext
scope =
SafeContext
.CallingMethod;
5859
private bool CheckValEscapeOfInterpolatedStringHandlerCalls(BoundExpression expression,
SafeContext
escapeTo, BindingDiagnosticBag diagnostics)
5882
bool checkParts(BoundInterpolatedString interpolatedString,
SafeContext
escapeTo, BindingDiagnosticBag diagnostics)
Binder\Binder_Operators.cs (2)
5979
SafeContext
whenTrueEscape = GetValEscape(trueExpr);
5980
SafeContext
whenFalseEscape = GetValEscape(falseExpr);
Binder\Binder_Statements.cs (3)
1569
var
leftEscape = GetRefEscape(op1);
1570
var
rightEscape = GetRefEscape(op2);
1629
var
leftEscape = GetValEscape(op1);
Binder\RefSafetyAnalysis.cs (53)
65
private
SafeContext
_localScopeDepth;
66
private Dictionary<LocalSymbol, (
SafeContext
RefEscapeScope,
SafeContext
ValEscapeScope)>? _localEscapeScopes;
68
private
SafeContext
_patternInputValEscape;
88
_localScopeDepth =
SafeContext
.CurrentMethod;
108
_analysis.AddLocalScopes(local, refEscapeScope: _analysis._localScopeDepth, valEscapeScope:
SafeContext
.CallingMethod);
145
private readonly
SafeContext
_previousInputValEscape;
147
public PatternInput(RefSafetyAnalysis analysis,
SafeContext
patternInputValEscape)
187
public static SafeContextAndLocation Create(
SafeContext
context
200
public readonly
SafeContext
Context;
206
private SafeContextAndLocation(
SafeContext
context
220
private (
SafeContext
RefEscapeScope,
SafeContext
ValEscapeScope) GetLocalScopes(LocalSymbol local)
226
: (
SafeContext
.CurrentMethod,
SafeContext
.CallingMethod);
229
private void SetLocalScopes(LocalSymbol local,
SafeContext
refEscapeScope,
SafeContext
valEscapeScope)
263
private
SafeContext
GetPlaceholderScope(BoundValuePlaceholderBase placeholder)
269
:
SafeContext
.CallingMethod;
410
SafeContext
valEscapeScope = node.ExpressionOpt is { } expr
496
private void AddLocalScopes(LocalSymbol local,
SafeContext
refEscapeScope,
SafeContext
valEscapeScope)
512
SafeContext
.CurrentMethod;
515
SafeContext
.CallingMethod;
523
private void AddOrSetLocalScopes(LocalSymbol local,
SafeContext
refEscapeScope,
SafeContext
valEscapeScope)
525
_localEscapeScopes ??= new Dictionary<LocalSymbol, (
SafeContext
RefEscapeScope,
SafeContext
ValEscapeScope)>();
546
(
SafeContext
refEscapeScope,
SafeContext
valEscapeScope) = GetLocalScopes(localSymbol);
584
ValidateEscape(expr,
SafeContext
.ReturnOnly, node.RefKind != RefKind.None, _diagnostics);
594
ValidateEscape(expr,
SafeContext
.ReturnOnly, isByRef: false, _diagnostics);
648
static
SafeContext
getDeclarationValEscape(BoundTypeExpression typeExpression,
SafeContext
valEscape)
653
return typeExpression.Type.IsRefLikeOrAllowsRefLikeType() ? valEscape :
SafeContext
.CallingMethod;
703
static
SafeContext
getPositionalValEscape(Symbol? symbol,
SafeContext
valEscape)
707
: symbol.GetTypeOrReturnType().IsRefLikeOrAllowsRefLikeType() ? valEscape :
SafeContext
.CallingMethod;
716
static
SafeContext
getMemberValEscape(BoundPropertySubpatternMember? member,
SafeContext
valEscape)
720
return member.Type.IsRefLikeOrAllowsRefLikeType() ? valEscape :
SafeContext
.CallingMethod;
882
SafeContext
valEscapeScope;
893
valEscapeScope =
SafeContext
.CallingMethod;
920
SafeContext
getArgumentEscapeScope(int nArgumentsVisited, ImmutableArray<BoundExpression> arguments, int argIndex)
922
SafeContext
valEscapeScope;
930
valEscapeScope =
SafeContext
.CallingMethod; // Consider skipping this placeholder entirely since SafeContext.CallingMethod is the fallback in GetPlaceholderScope().
1002
var
escapeFrom = GetValEscape(node.InitializerExpressionOpt);
1086
private void GetAwaitableInstancePlaceholders(ArrayBuilder<(BoundValuePlaceholderBase, SafeContextAndLocation)> placeholders, BoundAwaitableInfo awaitableInfo,
SafeContext
valEscapeScope)
1160
SafeContext
valEscape = nestedVariables is null
1201
internal readonly
SafeContext
ValEscape;
1204
internal DeconstructionVariable(BoundExpression expression,
SafeContext
valEscape, ArrayBuilder<DeconstructionVariable>? nestedVariables)
1225
? new DeconstructionVariable(expr, valEscape:
SafeContext
.Empty, GetDeconstructionAssignmentVariables(tuple))
1252
SafeContext
collectionEscape;
Binder\SafeContext.cs (17)
41
public static readonly
SafeContext
CallingMethod = new SafeContext(CallingMethodRaw);
47
public static readonly
SafeContext
ReturnOnly = new SafeContext(ReturnOnlyRaw);
53
public static readonly
SafeContext
CurrentMethod = new SafeContext(CurrentMethodRaw);
58
public static readonly
SafeContext
Empty = new SafeContext(uint.MaxValue);
64
public
SafeContext
Narrower()
74
public
SafeContext
Wider()
86
public bool IsConvertibleTo(
SafeContext
other)
97
public
SafeContext
Intersect(
SafeContext
other)
104
public
SafeContext
Union(
SafeContext
other)
108
public bool Equals(
SafeContext
other)
112
=> obj is
SafeContext
other && this.Equals(other);
117
public static bool operator ==(
SafeContext
lhs,
SafeContext
rhs)
120
public static bool operator !=(
SafeContext
lhs,
SafeContext
rhs)