Browse Source

Refactor ParameterModifier.This to allow 'this ref' parameters.

pull/1596/head
Siegfried Pammer 7 years ago
parent
commit
c45ce41d00
  1. 6
      ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpOutputVisitor.cs
  2. 2
      ICSharpCode.Decompiler/CSharp/Syntax/TypeMembers/MethodDeclaration.cs
  3. 31
      ICSharpCode.Decompiler/CSharp/Syntax/TypeMembers/ParameterDeclaration.cs
  4. 4
      ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs

6
ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpOutputVisitor.cs

@ -2173,6 +2173,9 @@ namespace ICSharpCode.Decompiler.CSharp.OutputVisitor @@ -2173,6 +2173,9 @@ namespace ICSharpCode.Decompiler.CSharp.OutputVisitor
{
StartNode(parameterDeclaration);
WriteAttributes(parameterDeclaration.Attributes);
if (parameterDeclaration.HasThisModifier) {
WriteKeyword(ParameterDeclaration.ThisModifierRole);
}
switch (parameterDeclaration.ParameterModifier) {
case ParameterModifier.Ref:
WriteKeyword(ParameterDeclaration.RefModifierRole);
@ -2183,9 +2186,6 @@ namespace ICSharpCode.Decompiler.CSharp.OutputVisitor @@ -2183,9 +2186,6 @@ namespace ICSharpCode.Decompiler.CSharp.OutputVisitor
case ParameterModifier.Params:
WriteKeyword(ParameterDeclaration.ParamsModifierRole);
break;
case ParameterModifier.This:
WriteKeyword(ParameterDeclaration.ThisModifierRole);
break;
case ParameterModifier.In:
WriteKeyword(ParameterDeclaration.InModifierRole);
break;

2
ICSharpCode.Decompiler/CSharp/Syntax/TypeMembers/MethodDeclaration.cs

@ -71,7 +71,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax @@ -71,7 +71,7 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
public bool IsExtensionMethod {
get {
ParameterDeclaration pd = (ParameterDeclaration)GetChildByRole (Roles.Parameter);
return pd != null && pd.ParameterModifier == ParameterModifier.This;
return pd != null && pd.HasThisModifier;
}
}

31
ICSharpCode.Decompiler/CSharp/Syntax/TypeMembers/ParameterDeclaration.cs

@ -27,15 +27,15 @@ @@ -27,15 +27,15 @@
namespace ICSharpCode.Decompiler.CSharp.Syntax
{
public enum ParameterModifier {
public enum ParameterModifier
{
None,
Ref,
Out,
Params,
This,
In
}
public class ParameterDeclaration : AstNode
{
public static readonly Role<AttributeSection> AttributeRole = EntityDeclaration.AttributeRole;
@ -96,11 +96,30 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax @@ -96,11 +96,30 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
return NodeType.Unknown;
}
}
public AstNodeCollection<AttributeSection> Attributes {
get { return GetChildrenByRole (AttributeRole); }
get { return GetChildrenByRole(AttributeRole); }
}
bool hasThisModifier;
public CSharpTokenNode ThisKeyword {
get {
if (hasThisModifier) {
return GetChildByRole(ThisModifierRole);
}
return CSharpTokenNode.Null;
}
}
public bool HasThisModifier {
get { return hasThisModifier; }
set {
ThrowIfFrozen();
hasThisModifier = value;
}
}
ParameterModifier parameterModifier;
public ParameterModifier ParameterModifier {

4
ICSharpCode.Decompiler/CSharp/Syntax/TypeSystemAstBuilder.cs

@ -1633,8 +1633,8 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax @@ -1633,8 +1633,8 @@ namespace ICSharpCode.Decompiler.CSharp.Syntax
foreach (IParameter p in method.Parameters) {
decl.Parameters.Add(ConvertParameter(p));
}
if (method.IsExtensionMethod && method.ReducedFrom == null && decl.Parameters.Any() && decl.Parameters.First().ParameterModifier == ParameterModifier.None)
decl.Parameters.First().ParameterModifier = ParameterModifier.This;
if (method.IsExtensionMethod && method.ReducedFrom == null && decl.Parameters.Any())
decl.Parameters.First().HasThisModifier = true;
if (this.ShowTypeParameters && this.ShowTypeParameterConstraints && !method.IsOverride && !method.IsExplicitInterfaceImplementation) {
foreach (ITypeParameter tp in method.TypeParameters) {

Loading…
Cancel
Save