System.Reflection.Emit.ILGenerator.BeginScope C# (CSharp) Method

BeginScope() public method

public BeginScope ( ) : void
return void
        public virtual void BeginScope() { }
        public virtual System.Reflection.Emit.LocalBuilder DeclareLocal(System.Type localType) { throw null; }

Usage Example

        public override void GenerateCode(ILGenerator codeGenerator, TypeBuilder typeBuilder, ModuleBuilder moduleBuilder)
        {
            Type elementType = Environment.GetCLRType(((ArrayType)ReturnType).ElementsType);

            codeGenerator.BeginScope();
            Label forStart = codeGenerator.DefineLabel();
            Label forEnd = codeGenerator.DefineLabel();
            LocalBuilder lengthBuilder = codeGenerator.DeclareLocal(typeof(int));
            LocalBuilder i = codeGenerator.DeclareLocal(typeof(int));
            codeGenerator.Emit(OpCodes.Ldc_I4_M1);
            codeGenerator.Emit(OpCodes.Stloc, i);

            SizeExp.GenerateCode(codeGenerator, typeBuilder, moduleBuilder);
            codeGenerator.Emit(OpCodes.Stloc, lengthBuilder);
            codeGenerator.Emit(OpCodes.Ldloc, lengthBuilder);
            codeGenerator.Emit(OpCodes.Newarr, elementType);

            codeGenerator.MarkLabel(forStart);

            // i++
            codeGenerator.Emit(OpCodes.Dup);
            codeGenerator.Emit(OpCodes.Ldloc, i);
            codeGenerator.Emit(OpCodes.Ldc_I4_1);
            codeGenerator.Emit(OpCodes.Add);
            codeGenerator.Emit(OpCodes.Stloc, i);
            codeGenerator.Emit(OpCodes.Ldloc, i);

            // if i >= lengthBuilder goto END
            codeGenerator.Emit(OpCodes.Ldloc, lengthBuilder);
            codeGenerator.Emit(OpCodes.Bge, forEnd);

            // Stack:   arrayRef / i / obj / Stelem
            codeGenerator.Emit(OpCodes.Ldloc, i);
            InitialValueExp.GenerateCode(codeGenerator, typeBuilder, moduleBuilder);
            codeGenerator.Emit(OpCodes.Stelem, elementType);

            codeGenerator.Emit(OpCodes.Br, forStart);

            codeGenerator.MarkLabel(forEnd);

            codeGenerator.Emit(OpCodes.Pop);
            codeGenerator.EndScope();
        }
All Usage Examples Of System.Reflection.Emit.ILGenerator::BeginScope