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

EmitFieldOnlyConstructorWithHash() private method

private EmitFieldOnlyConstructorWithHash ( TypeBuilder fnTB ) : void
fnTB System.Reflection.Emit.TypeBuilder
return void
        private void EmitFieldOnlyConstructorWithHash(TypeBuilder fnTB)
        {
            Type[] ctorTypes = CtorTypes();
            Type[] altCtorTypes = new Type[ctorTypes.Length - AltCtorDrops];
            for (int i = 0; i < altCtorTypes.Length; i++)
                altCtorTypes[i] = ctorTypes[i];

            ConstructorBuilder cb = fnTB.DefineConstructor(MethodAttributes.Public, CallingConventions.HasThis, altCtorTypes);
            CljILGen gen = new CljILGen(cb.GetILGenerator());

            //Call full constructor
            gen.EmitLoadArg(0);                     // gen.Emit(OpCodes.Ldarg_0);
            for (int i = 0; i < altCtorTypes.Length; i++)
                gen.EmitLoadArg(i + 1);

            //for (int i = 0; i < AltCtorDrops; i++)
            //    gen.EmitNull();
            gen.EmitNull();                    // __meta
            gen.EmitNull();                    // __extmap
            gen.Emit(OpCodes.Ldc_I4_0);        // __hash
            gen.Emit(OpCodes.Ldc_I4_0);        // __hasheq

            gen.Emit(OpCodes.Call, CtorInfo);

            gen.Emit(OpCodes.Ret);
        }