mirror of https://github.com/icsharpcode/ILSpy.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.1 KiB
44 lines
1.1 KiB
using System; |
|
using System.Collections.Immutable; |
|
using System.Reflection.Metadata; |
|
using System.Reflection.Metadata.Ecma335; |
|
|
|
namespace ICSharpCode.Decompiler.DebugInfo |
|
{ |
|
public readonly struct AsyncDebugInfo |
|
{ |
|
public readonly int CatchHandlerOffset; |
|
public readonly ImmutableArray<Await> Awaits; |
|
|
|
public AsyncDebugInfo(int catchHandlerOffset, ImmutableArray<Await> awaits) |
|
{ |
|
this.CatchHandlerOffset = catchHandlerOffset; |
|
this.Awaits = awaits; |
|
} |
|
|
|
public readonly struct Await |
|
{ |
|
public readonly int YieldOffset; |
|
public readonly int ResumeOffset; |
|
|
|
public Await(int yieldOffset, int resumeOffset) |
|
{ |
|
this.YieldOffset = yieldOffset; |
|
this.ResumeOffset = resumeOffset; |
|
} |
|
} |
|
|
|
public BlobBuilder BuildBlob(MethodDefinitionHandle moveNext) |
|
{ |
|
BlobBuilder blob = new BlobBuilder(); |
|
blob.WriteUInt32((uint)CatchHandlerOffset); |
|
foreach (var await in Awaits) |
|
{ |
|
blob.WriteUInt32((uint)await.YieldOffset); |
|
blob.WriteUInt32((uint)await.ResumeOffset); |
|
blob.WriteCompressedInteger(MetadataTokens.GetRowNumber(moveNext)); |
|
} |
|
return blob; |
|
} |
|
} |
|
}
|
|
|