Esempio n. 1
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        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);
        }
Esempio n. 2
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        public ClosureDefinition GetClosureDefinition()
        {
            if (m_ClosureDefinition == null)
            {
                m_ClosureDefinition = new ClosureDefinition(this);
            }

            return(m_ClosureDefinition);
        }
Esempio n. 3
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        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);
        }
Esempio n. 4
0
        //-----------------------------------------------------------------------------------------------------------------------------------------------------

        #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);
        }