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))); }
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)); }
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()); }
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()); }