//----------------------------------------------------------------------------------------------------------------------------------------------------- internal NestedClassType(ClassType containingClass, string classFullName, Type baseType, ClosureDefinition closureDefinition = null) : base(containingClass.Module, null, classFullName, baseType, containingClass) { m_ContainingClass = containingClass; m_ClosureDefinition = closureDefinition; m_ContainingClass.AddNestedClass(this); }
//----------------------------------------------------------------------------------------------------------------------------------------------------- public ClosureDefinition GetClosureDefinition() { if (m_ClosureDefinition == null) { m_ClosureDefinition = new ClosureDefinition(this); } return(m_ClosureDefinition); }
//----------------------------------------------------------------------------------------------------------------------------------------------------- internal MethodMember(ClassType ownerClass, MethodFactoryBase methodFactory, ClosureDefinition closure) : base(ownerClass, methodFactory.MemberName) { m_MethodFactory = methodFactory; m_Closure = closure; m_Writers = new List <MethodWriterBase>(); m_Statements = new StatementBlock(); m_Locals = new List <ILocal>(); m_TransparentWriter = new TransparentMethodWriter(this); }
//----------------------------------------------------------------------------------------------------------------------------------------------------- #region IAnonymousMethodOperand Members public void CreateAnonymousMethod(ClassType ownerClass, ClosureDefinition closure, bool isStatic, bool isPublic) { Debug.Assert(m_Method == null, "CreateAnonymousMethod was already called."); var methodFactory = new AnonymousMethodFactory( ownerClass, hostMethod: m_HomeScopeBlock.OwnerMethod, argumentTypes: m_Signature.ArgumentType, returnType: m_Signature.ReturnType, isStatic: isStatic, isPublic: isPublic); m_Method = new MethodMember(ownerClass, methodFactory, closure); m_Method.SetBody(m_Statements); ownerClass.AddMember(m_Method); m_Signature = m_Method.Signature; var operandBinder = new BindToMethodOperandVisitor(m_Method); m_Method.AcceptVisitor(operandBinder); }