Beispiel #1
0
        private static ImmutableArray <ExceptionRegion> ReadSmallExceptionHandlers(ref BlobReader memReader, int count)
        {
            var result = new ExceptionRegion[count];

            for (int i = 0; i < result.Length; i++)
            {
                var kind                     = (ExceptionRegionKind)memReader.ReadUInt16();
                var tryOffset                = memReader.ReadUInt16();
                var tryLength                = memReader.ReadByte();
                var handlerOffset            = memReader.ReadUInt16();
                var handlerLength            = memReader.ReadByte();
                var classTokenOrFilterOffset = memReader.ReadInt32();
                result[i] = new ExceptionRegion(kind, tryOffset, tryLength, handlerOffset, handlerLength, classTokenOrFilterOffset);
            }

            return(ImmutableArray.Create(result));
        }
Beispiel #2
0
        private static ImmutableArray <ExceptionRegion> ReadFatExceptionHandlers(ref BlobReader memReader, int count)
        {
            var result = new ExceptionRegion[count];

            for (int i = 0; i < result.Length; i++)
            {
                var sehFlags                 = (ExceptionRegionKind)memReader.ReadUInt32();
                int tryOffset                = memReader.ReadInt32();
                int tryLength                = memReader.ReadInt32();
                int handlerOffset            = memReader.ReadInt32();
                int handlerLength            = memReader.ReadInt32();
                int classTokenOrFilterOffset = memReader.ReadInt32();
                result[i] = new ExceptionRegion(sehFlags, tryOffset, tryLength, handlerOffset, handlerLength, classTokenOrFilterOffset);
            }

            return(ImmutableArray.Create(result));
        }
Beispiel #3
0
 public static void WriteTo(this SRM.ExceptionRegion exceptionHandler, Metadata.PEFile module, GenericContext context, ITextOutput writer)
 {
     writer.Write(".try ");
     WriteOffsetReference(writer, exceptionHandler.TryOffset);
     writer.Write('-');
     WriteOffsetReference(writer, exceptionHandler.TryOffset + exceptionHandler.TryLength);
     writer.Write(' ');
     writer.Write(exceptionHandler.Kind.ToString().ToLowerInvariant());
     if (exceptionHandler.FilterOffset != -1)
     {
         writer.Write(' ');
         WriteOffsetReference(writer, exceptionHandler.FilterOffset);
         writer.Write(" handler ");
     }
     if (!exceptionHandler.CatchType.IsNil)
     {
         writer.Write(' ');
         exceptionHandler.CatchType.WriteTo(module, writer, context);
     }
     writer.Write(' ');
     WriteOffsetReference(writer, exceptionHandler.HandlerOffset);
     writer.Write('-');
     WriteOffsetReference(writer, exceptionHandler.HandlerOffset + exceptionHandler.HandlerLength);
 }
 /// <summary>
 /// </summary>
 /// <param name="exceptionRegion">
 /// </param>
 /// <param name="catchType">
 /// </param>
 /// <param name="genericContext">
 /// </param>
 internal MetadataExceptionHandlingClauseAdapter(ExceptionRegion exceptionRegion, TypeSymbol catchType, IGenericContext genericContext)
     : this(exceptionRegion, catchType)
 {
     this.GenericContext = genericContext;
 }
 /// <summary>
 /// </summary>
 /// <param name="exceptionRegion">
 /// </param>
 /// <param name="catchType">
 /// </param>
 internal MetadataExceptionHandlingClauseAdapter(ExceptionRegion exceptionRegion, TypeSymbol catchType)
 {
     this.exceptionRegion = exceptionRegion;
     this.catchType = catchType;
     this.lazyFinallyJumps = new Lazy<IList<string>>(() => new List<string>());
 }
Beispiel #6
0
        private static ImmutableArray<ExceptionRegion> ReadSmallExceptionHandlers(ref BlobReader memReader, int count)
        {
            var result = new ExceptionRegion[count];
            for (int i = 0; i < result.Length; i++)
            {
                var kind = (ExceptionRegionKind)memReader.ReadUInt16();
                var tryOffset = memReader.ReadUInt16();
                var tryLength = memReader.ReadByte();
                var handlerOffset = memReader.ReadUInt16();
                var handlerLength = memReader.ReadByte();
                var classTokenOrFilterOffset = memReader.ReadInt32();
                result[i] = new ExceptionRegion(kind, tryOffset, tryLength, handlerOffset, handlerLength, classTokenOrFilterOffset);
            }

            return ImmutableArray.Create(result);
        }
Beispiel #7
0
        private static ImmutableArray<ExceptionRegion> ReadFatExceptionHandlers(ref BlobReader memReader, int count)
        {
            var result = new ExceptionRegion[count];
            for (int i = 0; i < result.Length; i++)
            {
                var sehFlags = (ExceptionRegionKind)memReader.ReadUInt32();
                int tryOffset = memReader.ReadInt32();
                int tryLength = memReader.ReadInt32();
                int handlerOffset = memReader.ReadInt32();
                int handlerLength = memReader.ReadInt32();
                int classTokenOrFilterOffset = memReader.ReadInt32();
                result[i] = new ExceptionRegion(sehFlags, tryOffset, tryLength, handlerOffset, handlerLength, classTokenOrFilterOffset);
            }

            return ImmutableArray.Create(result);
        }