Browse Source

Generate sequence points for expression-bodied properties and indexers

pull/3032/head
Kirill Osenkov 2 years ago committed by Siegfried Pammer
parent
commit
7992d148e8
  1. 24
      ICSharpCode.Decompiler/CSharp/SequencePointBuilder.cs
  2. 2
      ICSharpCode.Decompiler/CSharp/Transforms/NormalizeBlockStatements.cs
  3. 24
      ICSharpCode.Decompiler/DebugInfo/DebugInfoGenerator.cs

24
ICSharpCode.Decompiler/CSharp/SequencePointBuilder.cs

@ -164,6 +164,30 @@ namespace ICSharpCode.Decompiler.CSharp
} }
} }
public override void VisitPropertyDeclaration(PropertyDeclaration propertyDeclaration)
{
if (!propertyDeclaration.ExpressionBody.IsNull)
{
VisitAsSequencePoint(propertyDeclaration.ExpressionBody);
}
else
{
base.VisitPropertyDeclaration(propertyDeclaration);
}
}
public override void VisitIndexerDeclaration(IndexerDeclaration indexerDeclaration)
{
if (!indexerDeclaration.ExpressionBody.IsNull)
{
VisitAsSequencePoint(indexerDeclaration.ExpressionBody);
}
else
{
base.VisitIndexerDeclaration(indexerDeclaration);
}
}
public override void VisitForStatement(ForStatement forStatement) public override void VisitForStatement(ForStatement forStatement)
{ {
// Every element of a for-statement is its own sequence point. // Every element of a for-statement is its own sequence point.

2
ICSharpCode.Decompiler/CSharp/Transforms/NormalizeBlockStatements.cs

@ -218,6 +218,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
return; return;
propertyDeclaration.Modifiers |= propertyDeclaration.Getter.Modifiers; propertyDeclaration.Modifiers |= propertyDeclaration.Getter.Modifiers;
propertyDeclaration.ExpressionBody = m.Get<Expression>("expression").Single().Detach(); propertyDeclaration.ExpressionBody = m.Get<Expression>("expression").Single().Detach();
propertyDeclaration.CopyAnnotationsFrom(propertyDeclaration.Getter);
propertyDeclaration.Getter.Remove(); propertyDeclaration.Getter.Remove();
} }
@ -230,6 +231,7 @@ namespace ICSharpCode.Decompiler.CSharp.Transforms
return; return;
indexerDeclaration.Modifiers |= indexerDeclaration.Getter.Modifiers; indexerDeclaration.Modifiers |= indexerDeclaration.Getter.Modifiers;
indexerDeclaration.ExpressionBody = m.Get<Expression>("expression").Single().Detach(); indexerDeclaration.ExpressionBody = m.Get<Expression>("expression").Single().Detach();
indexerDeclaration.CopyAnnotationsFrom(indexerDeclaration.Getter);
indexerDeclaration.Getter.Remove(); indexerDeclaration.Getter.Remove();
} }
} }

24
ICSharpCode.Decompiler/DebugInfo/DebugInfoGenerator.cs

@ -136,6 +136,30 @@ namespace ICSharpCode.Decompiler.DebugInfo
HandleMethod(anonymousMethodExpression); HandleMethod(anonymousMethodExpression);
} }
public override void VisitPropertyDeclaration(PropertyDeclaration propertyDeclaration)
{
if (!propertyDeclaration.ExpressionBody.IsNull)
{
HandleMethod(propertyDeclaration.ExpressionBody, propertyDeclaration.Annotation<ILFunction>());
}
else
{
base.VisitPropertyDeclaration(propertyDeclaration);
}
}
public override void VisitIndexerDeclaration(IndexerDeclaration indexerDeclaration)
{
if (!indexerDeclaration.ExpressionBody.IsNull)
{
HandleMethod(indexerDeclaration.ExpressionBody, indexerDeclaration.Annotation<ILFunction>());
}
else
{
base.VisitIndexerDeclaration(indexerDeclaration);
}
}
public override void VisitQueryFromClause(QueryFromClause queryFromClause) public override void VisitQueryFromClause(QueryFromClause queryFromClause)
{ {
if (queryFromClause.Parent.FirstChild != queryFromClause) if (queryFromClause.Parent.FirstChild != queryFromClause)

Loading…
Cancel
Save