Ejemplo n.º 1
0
        private static MethodIL EmitInitBlock(MethodDesc method, bool unaligned)
        {
            ILEmitter    emit       = new ILEmitter();
            ILCodeStream codeStream = emit.NewCodeStream();

            codeStream.EmitLdArg(0);
            codeStream.EmitLdArg(1);
            codeStream.EmitLdArg(2);
            if (unaligned)
            {
                codeStream.EmitUnaligned();
            }
            codeStream.Emit(ILOpcode.initblk);
            codeStream.Emit(ILOpcode.ret);

            return(emit.Link(method));
        }
Ejemplo n.º 2
0
        private static MethodIL EmitReadWrite(MethodDesc method, bool write, bool unaligned = false)
        {
            Debug.Assert(method.Signature.IsStatic && method.Signature.Length == (write ? 2 : 1));

            TypeSystemContext context = method.Context;

            ILEmitter    emit       = new ILEmitter();
            ILCodeStream codeStream = emit.NewCodeStream();

            codeStream.EmitLdArg(0);
            if (write)
            {
                codeStream.EmitLdArg(1);
            }
            if (unaligned)
            {
                codeStream.EmitUnaligned();
            }
            codeStream.Emit(write ? ILOpcode.stobj : ILOpcode.ldobj,
                            emit.NewToken(context.GetSignatureVariable(0, method: true)));
            codeStream.Emit(ILOpcode.ret);
            return(emit.Link(method));
        }