private ConstructorBuilder EmitNonMetaConstructor(TypeBuilder fnTB, Type baseType)
{
Type[] ctorTypes = CtorTypes();
Type[] noMetaCtorTypes = new Type[ctorTypes.Length - 1];
for (int i = 1; i < ctorTypes.Length; i++)
noMetaCtorTypes[i - 1] = ctorTypes[i];
ConstructorBuilder cb = fnTB.DefineConstructor(MethodAttributes.Public, CallingConventions.HasThis, noMetaCtorTypes);
CljILGen gen = new CljILGen(cb.GetILGenerator());
gen.EmitLoadArg(0);
gen.EmitNull(); // null meta
for (int i = 0; i < noMetaCtorTypes.Length; i++)
gen.EmitLoadArg(i + 1);
gen.Emit(OpCodes.Call, CtorInfo);
gen.Emit(OpCodes.Ret);
return cb;
}