clojure.lang.CljCompiler.Ast.ObjExpr.EmitConstructorForDefType C# (CSharp) Method

EmitConstructorForDefType() private method

private EmitConstructorForDefType ( TypeBuilder fnTB, Type baseType ) : ConstructorBuilder
fnTB System.Reflection.Emit.TypeBuilder
baseType System.Type
return System.Reflection.Emit.ConstructorBuilder
        private ConstructorBuilder EmitConstructorForDefType(TypeBuilder fnTB, Type baseType)
        {
            ConstructorBuilder cb = fnTB.DefineConstructor(MethodAttributes.Public, CallingConventions.HasThis, CtorTypes());
            CljILGen gen = new CljILGen(cb.GetILGenerator());

            GenContext.EmitDebugInfo(gen, SpanMap);

            // Pass closed-overs to base class ctor

            gen.EmitLoadArg(0);             // gen.Emit(OpCodes.Ldarg_0);
            int a = 0;
            for (ISeq s = RT.keys(Closes); s != null; s = s.next(), a++)
            {
                //LocalBinding lb = (LocalBinding)s.first();
                //FieldBuilder fb = _closedOverFields[a];
                //bool isVolatile = IsVolatile(_closedOverFieldsToBindingsMap[fb]);

                gen.EmitLoadArg(a + 1);         // gen.Emit(OpCodes.Ldarg, a + 1);
            }
            gen.Emit(OpCodes.Call, BaseClassClosedOverCtor);

            gen.Emit(OpCodes.Ret);

            return cb;
        }