IKVM.Internal.CodeEmitter.DoEmit C# (CSharp) Method

DoEmit() private method

private DoEmit ( ) : void
return void
        internal void DoEmit()
        {
            OptimizePatterns();
            CLRv4_x64_JIT_Workaround();
            RemoveRedundantMemoryBarriers();

            if (experimentalOptimizations)
            {
                for (int i = 0; i < 4; i++)
                {
                    RemoveJumpNext();
                    ChaseBranches();
                    RemoveUnusedLabels();
                    SortPseudoOpCodes();
                    AnnihilatePops();
                    AnnihilateStoreReleaseTempLocals();
                    DeduplicateBranchSourceTargetCode();
                    OptimizeStackTransfer();
                    MergeExceptionBlocks();
                    RemoveDeadCode();
                }
            }

            #if STATIC_COMPILER
            OptimizeEncodings();
            OptimizeBranchSizes();
            #endif

            int ilOffset = 0;
            int lineNumber = -1;
            for (int i = 0; i < code.Count; i++)
            {
                code[i].RealEmit(ilOffset, this, ref lineNumber);
            #if STATIC_COMPILER || NET_4_0
                ilOffset = ilgen_real.ILOffset;
            #else
                ilOffset += code[i].Size;
            #endif
            }
        }

Usage Example

示例#1
0
        private static ConstructorInfo AddConstructor(TypeBuilder tb, MethodWrapper defaultConstructor, ConstructorInfo serializationConstructor, bool callReadObject)
        {
            ConstructorBuilder ctor = tb.DefineConstructor(MethodAttributes.Family, CallingConventions.Standard, new Type[] { JVM.Import(typeof(SerializationInfo)), JVM.Import(typeof(StreamingContext)) });

            AttributeHelper.HideFromJava(ctor);
            ctor.AddDeclarativeSecurity(SecurityAction.Demand, psetSerializationFormatter);
            CodeEmitter ilgen = CodeEmitter.Create(ctor);

            ilgen.Emit(OpCodes.Ldarg_0);
            if (defaultConstructor != null)
            {
                defaultConstructor.EmitCall(ilgen);
            }
            else
            {
                ilgen.Emit(OpCodes.Ldarg_1);
                ilgen.Emit(OpCodes.Ldarg_2);
                ilgen.Emit(OpCodes.Call, serializationConstructor);
            }
            if (callReadObject)
            {
                ilgen.Emit(OpCodes.Ldarg_0);
                ilgen.Emit(OpCodes.Ldarg_1);
                TypeWrapper   serializationHelper = ClassLoaderWrapper.LoadClassCritical("ikvm.internal.Serialization");
                MethodWrapper mw = serializationHelper.GetMethodWrapper("readObject", "(Ljava.lang.Object;Lcli.System.Runtime.Serialization.SerializationInfo;)V", false);
                mw.Link();
                mw.EmitCall(ilgen);
            }
            ilgen.Emit(OpCodes.Ret);
            ilgen.DoEmit();
            return(ctor);
        }
All Usage Examples Of IKVM.Internal.CodeEmitter::DoEmit