internal Starg(global::Truesight.Parser.Impl.MethodBody source, global::System.IO.BinaryReader reader) : this(source, reader, global::XenoGears.Functional.EnumerableExtensions.ToReadOnly(global::System.Linq.Enumerable.Empty <global::Truesight.Parser.Impl.ILOp>())) { }
internal Ldarg(global::Truesight.Parser.Impl.MethodBody source, global::System.IO.BinaryReader reader, global::System.Collections.ObjectModel.ReadOnlyCollection <global::Truesight.Parser.Impl.ILOp> prefixes) : base(source, AssertSupportedOpCode(reader), (int)reader.BaseStream.Position - global::System.Linq.Enumerable.Sum(global::System.Linq.Enumerable.Select(prefixes ?? global::XenoGears.Functional.EnumerableExtensions.ToReadOnly(global::System.Linq.Enumerable.Empty <global::Truesight.Parser.Impl.ILOp>()), prefix => prefix.Size)), prefixes ?? global::XenoGears.Functional.EnumerableExtensions.ToReadOnly(global::System.Linq.Enumerable.Empty <global::Truesight.Parser.Impl.ILOp>())) { // this is necessary for further verification var origPos = reader.BaseStream.Position; // initializing _constValue switch ((ushort)OpSpec.OpCode.Value) { case 0x02: //ldarg.0 _constValue = 0; break; case 0x03: //ldarg.1 _constValue = 1; break; case 0x04: //ldarg.2 _constValue = 2; break; case 0x05: //ldarg.3 _constValue = 3; break; case 0x0e: //ldarg.s case 0xfe09: //ldarg _constValue = default(int?); break; default: throw global::XenoGears.Assertions.AssertionHelper.Fail(); } // initializing _useConstValue switch ((ushort)OpSpec.OpCode.Value) { case 0x02: //ldarg.0 case 0x03: //ldarg.1 case 0x04: //ldarg.2 case 0x05: //ldarg.3 _useConstValue = true; break; case 0x0e: //ldarg.s case 0xfe09: //ldarg _useConstValue = default(bool); break; default: throw global::XenoGears.Assertions.AssertionHelper.Fail(); } // initializing _value switch ((ushort)OpSpec.OpCode.Value) { case 0x02: //ldarg.0 case 0x03: //ldarg.1 case 0x04: //ldarg.2 case 0x05: //ldarg.3 case 0xfe09: //ldarg _value = _useConstValue ? _constValue.Value : ReadI4(reader); break; case 0x0e: //ldarg.s _value = _useConstValue ? _constValue.Value : ReadI1(reader); break; default: throw global::XenoGears.Assertions.AssertionHelper.Fail(); } // verify that we've read exactly the amount of bytes we should var bytesRead = reader.BaseStream.Position - origPos; global::XenoGears.Assertions.AssertionHelper.AssertTrue(bytesRead == SizeOfOperand); // now when the initialization is completed verify that we've got only prefixes we support global::XenoGears.Assertions.AssertionHelper.AssertAll(Prefixes, prefix => { return(false); }); }
internal Branch(global::Truesight.Parser.Impl.MethodBody source, global::System.IO.BinaryReader reader, global::System.Collections.ObjectModel.ReadOnlyCollection <global::Truesight.Parser.Impl.ILOp> prefixes) : base(source, AssertSupportedOpCode(reader), (int)reader.BaseStream.Position - global::System.Linq.Enumerable.Sum(global::System.Linq.Enumerable.Select(prefixes ?? global::XenoGears.Functional.EnumerableExtensions.ToReadOnly(global::System.Linq.Enumerable.Empty <global::Truesight.Parser.Impl.ILOp>()), prefix => prefix.Size)), prefixes ?? global::XenoGears.Functional.EnumerableExtensions.ToReadOnly(global::System.Linq.Enumerable.Empty <global::Truesight.Parser.Impl.ILOp>())) { // this is necessary for further verification var origPos = reader.BaseStream.Position; // initializing _relativeTargetOffset switch ((ushort)OpSpec.OpCode.Value) { case 0x2b: //br.s case 0x2c: //brfalse.s case 0x2d: //brtrue.s case 0x2e: //beq.s case 0x2f: //bge.s case 0x30: //bgt.s case 0x31: //ble.s case 0x32: //blt.s case 0x33: //bne.un.s case 0x34: //bge.un.s case 0x35: //bgt.un.s case 0x36: //ble.un.s case 0x37: //blt.un.s case 0xde: //leave.s _relativeTargetOffset = ReadI1(reader); break; case 0x38: //br case 0x39: //brfalse case 0x3a: //brtrue case 0x3b: //beq case 0x3c: //bge case 0x3d: //bgt case 0x3e: //ble case 0x3f: //blt case 0x40: //bne.un case 0x41: //bge.un case 0x42: //bgt.un case 0x43: //ble.un case 0x44: //blt.un case 0xdd: //leave _relativeTargetOffset = ReadI4(reader); break; default: throw global::XenoGears.Assertions.AssertionHelper.Fail(); } // initializing _absoluteTargetOffset switch ((ushort)OpSpec.OpCode.Value) { case 0x2b: //br.s case 0x2c: //brfalse.s case 0x2d: //brtrue.s case 0x2e: //beq.s case 0x2f: //bge.s case 0x30: //bgt.s case 0x31: //ble.s case 0x32: //blt.s case 0x33: //bne.un.s case 0x34: //bge.un.s case 0x35: //bgt.un.s case 0x36: //ble.un.s case 0x37: //blt.un.s case 0xde: //leave.s _absoluteTargetOffset = (int)origPos + sizeof(sbyte) + _relativeTargetOffset; break; case 0x38: //br case 0x39: //brfalse case 0x3a: //brtrue case 0x3b: //beq case 0x3c: //bge case 0x3d: //bgt case 0x3e: //ble case 0x3f: //blt case 0x40: //bne.un case 0x41: //bge.un case 0x42: //bgt.un case 0x43: //ble.un case 0x44: //blt.un case 0xdd: //leave _absoluteTargetOffset = (int)origPos + sizeof(int) + _relativeTargetOffset; break; default: throw global::XenoGears.Assertions.AssertionHelper.Fail(); } // verify that we've read exactly the amount of bytes we should var bytesRead = reader.BaseStream.Position - origPos; global::XenoGears.Assertions.AssertionHelper.AssertTrue(bytesRead == SizeOfOperand); // now when the initialization is completed verify that we've got only prefixes we support global::XenoGears.Assertions.AssertionHelper.AssertAll(Prefixes, prefix => { return(false); }); }
internal Ldc(global::Truesight.Parser.Impl.MethodBody source, global::System.IO.BinaryReader reader, global::System.Collections.ObjectModel.ReadOnlyCollection <global::Truesight.Parser.Impl.ILOp> prefixes) : base(source, AssertSupportedOpCode(reader), (int)reader.BaseStream.Position - global::System.Linq.Enumerable.Sum(global::System.Linq.Enumerable.Select(prefixes ?? global::XenoGears.Functional.EnumerableExtensions.ToReadOnly(global::System.Linq.Enumerable.Empty <global::Truesight.Parser.Impl.ILOp>()), prefix => prefix.Size)), prefixes ?? global::XenoGears.Functional.EnumerableExtensions.ToReadOnly(global::System.Linq.Enumerable.Empty <global::Truesight.Parser.Impl.ILOp>())) { // this is necessary for further verification var origPos = reader.BaseStream.Position; // initializing _constValue switch ((ushort)OpSpec.OpCode.Value) { case 0x14: //ldnull _constValue = null; break; case 0x15: //ldc.i4.m1 _constValue = -1; break; case 0x16: //ldc.i4.0 _constValue = 0; break; case 0x17: //ldc.i4.1 _constValue = 1; break; case 0x18: //ldc.i4.2 _constValue = 2; break; case 0x19: //ldc.i4.3 _constValue = 3; break; case 0x1a: //ldc.i4.4 _constValue = 4; break; case 0x1b: //ldc.i4.5 _constValue = 5; break; case 0x1c: //ldc.i4.6 _constValue = 6; break; case 0x1d: //ldc.i4.7 _constValue = 7; break; case 0x1e: //ldc.i4.8 _constValue = 8; break; case 0x1f: //ldc.i4.s case 0x20: //ldc.i4 case 0x21: //ldc.i8 case 0x22: //ldc.r4 case 0x23: //ldc.r8 _constValue = default(global::System.Object); break; case 0x72: //ldstr _constValue = ((global::System.Func <global::System.String>)(() => { var token = ReadMetadataToken(reader); return(StringFromToken(token) ?? ("string at 0x" + token.ToString("x8"))); }))(); break; case 0xd0: //ldtoken _constValue = ((global::System.Func <global::System.Object>)(() => { var i_token = ReadMetadataToken(reader); var token = new global::Truesight.Parser.Api.Ops.RuntimeHandle(Source.Module, Source.Type, Source.Method, i_token); try { var resolved = token.ResolveHandle(); if (resolved != null) { return(resolved); } else { return(token); } } catch { return(token); } }))(); break; default: throw global::XenoGears.Assertions.AssertionHelper.Fail(); } // initializing _useConstValue switch ((ushort)OpSpec.OpCode.Value) { case 0x14: //ldnull case 0x15: //ldc.i4.m1 case 0x16: //ldc.i4.0 case 0x17: //ldc.i4.1 case 0x18: //ldc.i4.2 case 0x19: //ldc.i4.3 case 0x1a: //ldc.i4.4 case 0x1b: //ldc.i4.5 case 0x1c: //ldc.i4.6 case 0x1d: //ldc.i4.7 case 0x1e: //ldc.i4.8 case 0x72: //ldstr case 0xd0: //ldtoken _useConstValue = true; break; case 0x1f: //ldc.i4.s case 0x20: //ldc.i4 case 0x21: //ldc.i8 case 0x22: //ldc.r4 case 0x23: //ldc.r8 _useConstValue = default(bool); break; default: throw global::XenoGears.Assertions.AssertionHelper.Fail(); } // initializing _value switch ((ushort)OpSpec.OpCode.Value) { case 0x14: //ldnull case 0x15: //ldc.i4.m1 case 0x16: //ldc.i4.0 case 0x17: //ldc.i4.1 case 0x18: //ldc.i4.2 case 0x19: //ldc.i4.3 case 0x1a: //ldc.i4.4 case 0x1b: //ldc.i4.5 case 0x1c: //ldc.i4.6 case 0x1d: //ldc.i4.7 case 0x1e: //ldc.i4.8 case 0x20: //ldc.i4 _value = _useConstValue ? _constValue : ReadI4(reader); break; case 0x1f: //ldc.i4.s _value = _useConstValue ? _constValue : (int)ReadI1(reader); break; case 0x21: //ldc.i8 _value = _useConstValue ? _constValue : ReadI8(reader); break; case 0x22: //ldc.r4 _value = _useConstValue ? _constValue : ReadR4(reader); break; case 0x23: //ldc.r8 _value = _useConstValue ? _constValue : ReadR8(reader); break; case 0x72: //ldstr _value = _useConstValue ? _constValue : ReadStr(reader); break; case 0xd0: //ldtoken _value = _useConstValue ? _constValue : ReadToken(reader); break; default: throw global::XenoGears.Assertions.AssertionHelper.Fail(); } // verify that we've read exactly the amount of bytes we should var bytesRead = reader.BaseStream.Position - origPos; global::XenoGears.Assertions.AssertionHelper.AssertTrue(bytesRead == SizeOfOperand); // now when the initialization is completed verify that we've got only prefixes we support global::XenoGears.Assertions.AssertionHelper.AssertAll(Prefixes, prefix => { return(false); }); }
internal Cast(global::Truesight.Parser.Impl.MethodBody source, global::System.IO.BinaryReader reader, global::System.Collections.ObjectModel.ReadOnlyCollection <global::Truesight.Parser.Impl.ILOp> prefixes) : base(source, AssertSupportedOpCode(reader), (int)reader.BaseStream.Position - global::System.Linq.Enumerable.Sum(global::System.Linq.Enumerable.Select(prefixes ?? global::XenoGears.Functional.EnumerableExtensions.ToReadOnly(global::System.Linq.Enumerable.Empty <global::Truesight.Parser.Impl.ILOp>()), prefix => prefix.Size)), prefixes ?? global::XenoGears.Functional.EnumerableExtensions.ToReadOnly(global::System.Linq.Enumerable.Empty <global::Truesight.Parser.Impl.ILOp>())) { // this is necessary for further verification var origPos = reader.BaseStream.Position; // initializing _typeToken switch ((ushort)OpSpec.OpCode.Value) { case 0x67: //conv.i1 case 0x68: //conv.i2 case 0x69: //conv.i4 case 0x6a: //conv.i8 case 0x6b: //conv.r4 case 0x6c: //conv.r8 case 0x6d: //conv.u4 case 0x6e: //conv.u8 case 0x76: //conv.r.un case 0x82: //conv.ovf.i1.un case 0x83: //conv.ovf.i2.un case 0x84: //conv.ovf.i4.un case 0x85: //conv.ovf.i8.un case 0x86: //conv.ovf.u1.un case 0x87: //conv.ovf.u2.un case 0x88: //conv.ovf.u4.un case 0x89: //conv.ovf.u8.un case 0x8a: //conv.ovf.i.un case 0x8b: //conv.ovf.u.un case 0xb3: //conv.ovf.i1 case 0xb4: //conv.ovf.u1 case 0xb5: //conv.ovf.i2 case 0xb6: //conv.ovf.u2 case 0xb7: //conv.ovf.i4 case 0xb8: //conv.ovf.u4 case 0xb9: //conv.ovf.i8 case 0xba: //conv.ovf.u8 case 0xd1: //conv.u2 case 0xd2: //conv.u1 case 0xd3: //conv.i case 0xd4: //conv.ovf.i case 0xd5: //conv.ovf.u case 0xe0: //conv.u _typeToken = default(int); break; case 0x74: //castclass case 0x79: //unbox case 0x8c: //box case 0xa5: //unbox.any _typeToken = ReadMetadataToken(reader); break; default: throw global::XenoGears.Assertions.AssertionHelper.Fail(); } // verify that we've read exactly the amount of bytes we should var bytesRead = reader.BaseStream.Position - origPos; global::XenoGears.Assertions.AssertionHelper.AssertTrue(bytesRead == SizeOfOperand); // now when the initialization is completed verify that we've got only prefixes we support global::XenoGears.Assertions.AssertionHelper.AssertAll(Prefixes, prefix => { return(false); }); }