Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

VB support for CallerArgumentExpression #54132

Merged
Merged
Show file tree
Hide file tree
Changes from 46 commits
Commits
Show all changes
47 commits
Select commit Hold shift + click to select a range
c776485
Partial VB support for CallerArgumentExpression
Youssef1313 Jun 16, 2021
b75f8bc
Little more work
Youssef1313 Jun 16, 2021
83a2715
Small fix
Youssef1313 Jun 16, 2021
8468010
PROTOTYPEs from feedback to address later
Youssef1313 Jun 16, 2021
914e2cd
Attempt to handle VB extension methods
Youssef1313 Jun 16, 2021
55722d5
Delete prototype
Youssef1313 Jun 16, 2021
d8bdb68
Test
Youssef1313 Jun 16, 2021
85f6d49
Small fixes
Youssef1313 Jun 17, 2021
7d4aa11
Fixes and more tests
Youssef1313 Jun 17, 2021
8257cc4
Chain VerifyDiagnostics on CompileAndVerify
Youssef1313 Jun 18, 2021
2c45646
Merge remote-tracking branch 'upstream/features/caller-argument-expre…
Youssef1313 Jun 18, 2021
19a9502
Address more of the feedback
Youssef1313 Jun 18, 2021
2589254
Add unintentionally deleted test
Youssef1313 Jun 18, 2021
28d4885
Fix
Youssef1313 Jun 18, 2021
07dd639
Add prototype
Youssef1313 Jun 18, 2021
6846749
Restore blank line
Youssef1313 Jun 18, 2021
e95117c
Restore blank line
Youssef1313 Jun 18, 2021
b61e9aa
Few more tests
Youssef1313 Jun 18, 2021
93f127d
Com parameter
Youssef1313 Jun 19, 2021
fb0ff4b
Move down and add test
Youssef1313 Jun 19, 2021
b6205dd
Fix tests
Youssef1313 Jun 19, 2021
40394c1
Fix test
Youssef1313 Jun 19, 2021
2e28133
Restore indentation
Youssef1313 Jun 19, 2021
0808b08
remove outdated prototype
Youssef1313 Jun 19, 2021
003ae5f
Check feature availability
Youssef1313 Jun 19, 2021
5e99aa7
Move from wrapped parameter symbol to derived types
Youssef1313 Jun 19, 2021
28631e8
Fix implementation and add test for extension error case
Youssef1313 Jun 19, 2021
dd6ddf6
Fix tests
Youssef1313 Jun 19, 2021
2b15627
Update comment and fix test
Youssef1313 Jun 19, 2021
bd8170e
Warn for self-referential
Youssef1313 Jun 19, 2021
ad1a6ca
Warn for incorrect parameter name
Youssef1313 Jun 19, 2021
db8e72c
More tests
Youssef1313 Jun 20, 2021
f3052c4
Fix test
Youssef1313 Jun 20, 2021
a4769eb
abstract SourceClonedParameterSymbol, tests, and some of the other fe…
Youssef1313 Jun 22, 2021
8893361
Fix build
Youssef1313 Jun 22, 2021
35e9813
Address feedback
Youssef1313 Jun 23, 2021
d25d7ac
Update tests
Youssef1313 Jun 23, 2021
e663cf3
Revert bad change
Youssef1313 Jun 23, 2021
13ddcbd
Fix assertion to ignore DummySyntaxTree
Youssef1313 Jun 23, 2021
6b9426c
Metadata case insensitive test, unreachable path, use AssertTheseDiag…
Youssef1313 Jun 23, 2021
b57907e
Add more tests as requested
Youssef1313 Jun 23, 2021
ccc7c2d
Address feedback
Youssef1313 Jun 24, 2021
4281bff
Address feedback on tests
Youssef1313 Jun 25, 2021
b935e01
Fix test
Youssef1313 Jun 25, 2021
d28d029
Address feedback
Youssef1313 Jun 26, 2021
f9a4bdd
Fix test
Youssef1313 Jun 26, 2021
5e96858
Back to case-insensitive behavior
Youssef1313 Jun 28, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion src/Compilers/CSharp/Portable/Binder/Binder_Invocation.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1375,7 +1375,6 @@ BoundExpression bindDefaultArgument(SyntaxNode syntax, ParameterSymbol parameter
argumentIndex > -1 && argumentIndex < argumentsCount)
{
CheckFeatureAvailability(syntax, MessageID.IDS_FeatureCallerArgumentExpression, diagnostics);
// PROTOTYPE(caller-expr): Do we need to support VB?

var argument = argumentsBuilder[argumentIndex];
defaultValue = new BoundLiteral(syntax, ConstantValue.Create(argument.Syntax.ToString()), Compilation.GetSpecialType(SpecialType.System_String)) { WasCompilerGenerated = true };
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -686,7 +686,7 @@ internal override int CallerArgumentExpressionParameterIndex
var parameters = ContainingSymbol.GetParameters();
for (int i = 0; i < parameters.Length; i++)
{
if (parameters[i].Name == parameterName)
if (parameters[i].Name.Equals(parameterName, StringComparison.Ordinal))
{
_lazyCallerArgumentExpressionParameterIndex = i;
return i;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -371,6 +371,14 @@ internal NativeIntegerParameterSymbol(NativeIntegerTypeSymbol containingType, Na

public override ImmutableArray<CustomModifier> RefCustomModifiers => _underlyingParameter.RefCustomModifiers;

internal override bool IsCallerLineNumber => _underlyingParameter.IsCallerLineNumber;

internal override bool IsCallerFilePath => _underlyingParameter.IsCallerFilePath;

internal override bool IsCallerMemberName => _underlyingParameter.IsCallerMemberName;

internal override int CallerArgumentExpressionParameterIndex => _underlyingParameter.CallerArgumentExpressionParameterIndex;

public override bool Equals(Symbol? other, TypeCompareKind comparison) => NativeIntegerTypeSymbol.EqualsHelper(this, other, comparison, symbol => symbol._underlyingParameter);

public override int GetHashCode() => _underlyingParameter.GetHashCode();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -621,6 +621,30 @@ public override ImmutableArray<CustomModifier> RefCustomModifiers
}
}

internal override bool IsCallerLineNumber
{
// ReducedExtensionMethodParameterSymbol is only exposed to semantic model.
get { throw ExceptionUtilities.Unreachable; }
}

internal override bool IsCallerFilePath
{
// ReducedExtensionMethodParameterSymbol is only exposed to semantic model.
get { throw ExceptionUtilities.Unreachable; }
}

internal override bool IsCallerMemberName
{
// ReducedExtensionMethodParameterSymbol is only exposed to semantic model.
get { throw ExceptionUtilities.Unreachable; }
}

internal override int CallerArgumentExpressionParameterIndex
{
// ReducedExtensionMethodParameterSymbol is only exposed to semantic model.
get { throw ExceptionUtilities.Unreachable; }
Copy link
Contributor

@AlekseyTs AlekseyTs Jun 21, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ExceptionUtilities.Unreachable;

Do we have tests covering CallerArgumentExpression for extension methods in C#? #Closed

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@AlekseyTs Yes there are.

}

public sealed override bool Equals(Symbol obj, TypeCompareKind compareKind)
{
if ((object)this == obj)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,26 @@ protected override RetargetingModuleSymbol RetargetingModule
{
get { return _retargetingMethod.RetargetingModule; }
}

internal override bool IsCallerLineNumber
{
get { return _underlyingParameter.IsCallerLineNumber; }
}

internal override bool IsCallerFilePath
{
get { return _underlyingParameter.IsCallerFilePath; }
}

internal override bool IsCallerMemberName
{
get { return _underlyingParameter.IsCallerMemberName; }
}

internal override int CallerArgumentExpressionParameterIndex
{
get { return _underlyingParameter.CallerArgumentExpressionParameterIndex; }
}
}

internal sealed class RetargetingPropertyParameterSymbol : RetargetingParameterSymbol
Expand All @@ -162,5 +182,25 @@ protected override RetargetingModuleSymbol RetargetingModule
{
get { return _retargetingProperty.RetargetingModule; }
}

internal override bool IsCallerLineNumber
{
get { return _underlyingParameter.IsCallerLineNumber; }
}

internal override bool IsCallerFilePath
{
get { return _underlyingParameter.IsCallerFilePath; }
}

internal override bool IsCallerMemberName
{
get { return _underlyingParameter.IsCallerMemberName; }
}

internal override int CallerArgumentExpressionParameterIndex
{
get { return _underlyingParameter.CallerArgumentExpressionParameterIndex; }
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@

namespace Microsoft.CodeAnalysis.CSharp.Symbols
{

// PROTOTYPE(caller-expr): Make SourceClonedParameterSymbol abstract and introduce new specialized types (same as being done in VB).
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'll do this once the corresponding VB change is reviewed.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@AlekseyTs Let's keep the remaining C# work in a separate PR?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

➡️ #54355 (let me know if you want everything here).

Copy link
Contributor

@AlekseyTs AlekseyTs Jun 24, 2021

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(let me know if you want everything here).

I have no objections against separation of changes


/// <summary>
/// Represents a source parameter cloned from another <see cref="SourceParameterSymbol"/>, when they must share attribute data and default constant value.
/// For example, parameters on a property symbol are cloned to generate parameters on accessors.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -611,7 +611,7 @@ internal override CSharpAttributeData EarlyDecodeWellKnownAttribute(ref EarlyDec
var parameters = ContainingSymbol.GetParameters();
for (int i = 0; i < parameters.Length; i++)
{
if (parameters[i].Name == parameterName)
if (parameters[i].Name.Equals(parameterName, StringComparison.Ordinal))
{
index = i;
break;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,26 @@ public override ImmutableArray<CustomModifier> RefCustomModifiers
}
}

internal override bool IsCallerLineNumber
{
get { return _underlyingParameter.IsCallerLineNumber; }
}

internal override bool IsCallerFilePath
{
get { return _underlyingParameter.IsCallerFilePath; }
}

internal override bool IsCallerMemberName
{
get { return _underlyingParameter.IsCallerMemberName; }
}

internal override int CallerArgumentExpressionParameterIndex
{
get { return _underlyingParameter.CallerArgumentExpressionParameterIndex; }
}

public sealed override bool Equals(Symbol obj, TypeCompareKind compareKind)
{
if ((object)this == obj)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -138,26 +138,6 @@ internal override bool IsIUnknownConstant
get { return _underlyingParameter.IsIUnknownConstant; }
}

internal override bool IsCallerLineNumber
{
get { return _underlyingParameter.IsCallerLineNumber; }
}

internal override bool IsCallerFilePath
{
get { return _underlyingParameter.IsCallerFilePath; }
}

internal override bool IsCallerMemberName
{
get { return _underlyingParameter.IsCallerMemberName; }
}

internal override int CallerArgumentExpressionParameterIndex
{
get { return _underlyingParameter.CallerArgumentExpressionParameterIndex; }
}

internal override FlowAnalysisAnnotations FlowAnalysisAnnotations
{
// https://github.com/dotnet/roslyn/issues/30073: Consider moving to leaf types
Expand Down
Loading