internal StructTypeAliasDelegate(ModuleContext declaredModule, string name, string description,
                                         List <StructField> fields)
        {
            this.declaredModule = declaredModule;
            Name          = name;
            Description   = description;
            this.fields   = fields;
            structContext = declaredModule.DefineSubContext(name, typeof(object));

            ConstructorBuilder constructorBuilder = structContext.typeBuilder.DefineConstructor(
                MethodAttributes.Public, CallingConventions.Standard, Type.EmptyTypes);
            IILEmitter constructorEmitter = new GeneratorILEmitter(constructorBuilder.GetILGenerator());

            constructorEmitter.EmitReturn(typeof(void));

            realizedType = new RecordStructType(declaredModule.moduleName, name, description, structContext.typeBuilder,
                                                Enumerable.Empty <RecordStructField>(),
                                                new OperatorCollection(),
                                                new OperatorCollection(),
                                                new Dictionary <string, IMethodInvokeFactory>(),
                                                new Dictionary <string, IFieldAccessFactory>(),
                                                constructorBuilder);
        }