Exemplo n.º 1
0
 public ContextNestedMethod(ContextNestedClass classContext)
     : base(classContext)
 {
     IsNested = true;
     //ZCClassInfo cclass = this.ClassContext.GetZCompilingType();
     //ZMethodInfo = new ZCMethodInfo(cclass);
     //cclass.AddMethod(ZMethodInfo);
 }
Exemplo n.º 2
0
        public ContextNestedClass CreateNestedClassContext()
        {
            if (_NestedClassContext == null)
            {
                _NestedClassContext = new ContextNestedClass(this);
                _NestedClassContext.SetClassName(this.CreateNestedClassName());
                var nestedClassInstanceName = _NestedClassContext.ClassName + "_0";

                var            packageName        = this.ClassContext.FileContext.ProjectContext.ProjectModel.ProjectPackageName;
                string         fullName           = packageName + "." + _NestedClassContext.ClassName;
                TypeAttributes typeAttrs          = TypeAttributes.NestedPrivate | TypeAttributes.Sealed;
                TypeBuilder    NestedClassBuilder = this.ClassContext.SelfCompilingType.ClassBuilder.DefineNestedType(fullName, typeAttrs);
                _NestedClassContext.SetTypeBuilder(NestedClassBuilder);

                ZCClassInfo ztype = _NestedClassContext.SelfCompilingType;
                if (NestedInstance == null)
                {
                    NestedInstance = new ZCLocalVar(nestedClassInstanceName, ztype, true)
                    {
                        IsNestedClassInstance = true
                    };
                    this.LocalManager.Add(NestedInstance);
                }

                if (!this.IsStatic())
                {
                    ZCFieldInfo zf2 = _NestedClassContext.SelfCompilingType.DefineFieldPublic
                                          (ContextNestedClass.MasterClassFieldName, this.ClassContext.SelfCompilingType);
                    _NestedClassContext.MasterClassField = zf2;
                }

                if (this.ArgList.Count > 0)
                {
                    foreach (var arg in this.ArgList)
                    {
                        ZCParamInfo zp  = this.GetParameter(arg);
                        ZCFieldInfo zf3 = _NestedClassContext.SelfCompilingType.DefineFieldPublic
                                              (arg, zp.GetZClass());
                        _NestedClassContext.MasterArgDict.Add(arg, zf3);
                    }
                }
                /* 生成内部类默认构造函数 */
                {
                    ConstructorBuilder NewBuilder = NestedClassBuilder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, new Type[] { });
                    var il = NewBuilder.GetILGenerator();
                    il.Emit(OpCodes.Ret);
                    ZCConstructorInfo zcc = new ZCConstructorInfo(this._NestedClassContext.SelfCompilingType)
                    {
                        ConstructorBuilder = NewBuilder
                    };
                    this._NestedClassContext.SelfCompilingType.AddConstructord(zcc);
                    this._NestedClassContext.DefaultConstructorBuilder = NewBuilder;
                }
            }
            return(_NestedClassContext);
        }