Ejemplo n.º 1
0
 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>()))
 {
 }
Ejemplo n.º 2
0
        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);
            });
        }
Ejemplo n.º 3
0
        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);
            });
        }
Ejemplo n.º 4
0
        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);
            });
        }
Ejemplo n.º 5
0
        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);
            });
        }