public ContextNestedMethod(ContextNestedClass classContext) : base(classContext) { IsNested = true; //ZCClassInfo cclass = this.ClassContext.GetZCompilingType(); //ZMethodInfo = new ZCMethodInfo(cclass); //cclass.AddMethod(ZMethodInfo); }
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); }