internal TypeEntry(ClassType classType) { classType.Compile(); this.DynamicType = classType.CompiledType; this.FactoryMethods = classType.GetFactoryMethods(); }
//----------------------------------------------------------------------------------------------------------------------------------------------------- private void CompileClosureClass() { m_ClosureClass = new NestedClassType( containingClass: m_OwnerClass, classFullName: m_HostMethod.Name + "<Closure>", baseType: typeof(object), closureDefinition: this); m_ClosureClassConstructor = m_ClosureClass.TypeBuilder.DefineDefaultConstructor( MethodAttributes.Public | MethodAttributes.ReuseSlot | MethodAttributes.SpecialName | MethodAttributes.RTSpecialName | MethodAttributes.HideBySig); var closureWriter = new ImplementationClassWriter <object>(m_ClosureClass); if (m_Parent != null) { m_ParentField = closureWriter.DefineField( name: "Parent", isStatic: false, isPublic: true, fieldType: m_Parent.ClosureClass.TypeBuilder); } foreach (var capture in m_Captures.Where(c => c.HoistingClosure == this)) { capture.DefineHoistedField(closureWriter); } foreach (var anonymousMethodOperand in m_AnonymousMethodsToHoist) { anonymousMethodOperand.CreateAnonymousMethod(m_ClosureClass, closure: this, isStatic: false, isPublic: true); anonymousMethodOperand.AnonymousMethod.AcceptVisitor(new ClosureHoistedMethodRewritingVisitor(anonymousMethodOperand.AnonymousMethod, this)); } m_ClosureClass.Compile(); }