Exemple #1
0
        public void InvalidPrimitiveOperandShouldThrow(CilCode code, object operand)
        {
            var stream    = new MemoryStream();
            var writer    = new BinaryStreamWriter(stream);
            var assembler = new CilAssembler(writer, new MockOperandBuilder());

            Assert.ThrowsAny <ArgumentException>(() =>
                                                 assembler.WriteInstruction(new CilInstruction(code.ToOpCode(), operand)));
        }
Exemple #2
0
        public void TooLargeLocalShouldThrow()
        {
            var stream    = new MemoryStream();
            var writer    = new BinaryStreamWriter(stream);
            var assembler = new CilAssembler(writer, new MockOperandBuilder());

            Assert.ThrowsAny <OverflowException>(() =>
                                                 assembler.WriteInstruction(new CilInstruction(CilOpCodes.Ldloc_S, 0x12345)));
            assembler.WriteInstruction(new CilInstruction(CilOpCodes.Ldloc, 0x12345));
        }
Exemple #3
0
        public void BranchTooFarAwayShouldThrow()
        {
            var stream    = new MemoryStream();
            var writer    = new BinaryStreamWriter(stream);
            var assembler = new CilAssembler(writer, new MockOperandBuilder());

            Assert.ThrowsAny <OverflowException>(() =>
                                                 assembler.WriteInstruction(new CilInstruction(CilOpCodes.Br_S, new CilOffsetLabel(0x12345))));
            assembler.WriteInstruction(new CilInstruction(CilOpCodes.Br, new CilOffsetLabel(0x12345)));
        }
        private static byte[] BuildRawCodeStream(IMetadataTokenProvider provider, CilMethodBody body)
        {
            using var codeStream = new MemoryStream();

            var writer    = new BinaryStreamWriter(codeStream);
            var assembler = new CilAssembler(writer, new CilOperandBuilder(provider));

            assembler.WriteInstructions(body.Instructions);

            return(codeStream.ToArray());
        }
        private static byte[] BuildRawCodeStream(MethodBodySerializationContext context, CilMethodBody body)
        {
            using var codeStream = new MemoryStream();

            var writer    = new BinaryStreamWriter(codeStream);
            var assembler = new CilAssembler(writer, new CilOperandBuilder(context.TokenProvider, context.DiagnosticBag));

            assembler.WriteInstructions(body.Instructions);

            return(codeStream.ToArray());
        }
Exemple #6
0
        private static byte[] BuildRawCodeStream(MethodBodySerializationContext context, CilMethodBody body)
        {
            using var codeStream = new MemoryStream();
            var bag = context.ErrorListener;

            var writer    = new BinaryStreamWriter(codeStream);
            var assembler = new CilAssembler(
                writer,
                new CilOperandBuilder(context.TokenProvider, bag),
                body.Owner.SafeToString(),
                bag);

            assembler.WriteInstructions(body.Instructions);

            return(codeStream.ToArray());
        }