Beispiel #1
0
        public ContextMethod(ContextClass classContext) : base(classContext)
        {
            ZCClassInfo cclass = this.ClassContext.GetZCompilingType();

            ZMethodInfo = new ZCMethodInfo(cclass);
            cclass.AddMethod(ZMethodInfo);
        }
Beispiel #2
0
        //private void EmitGetNested()
        //{
        //    if (this.NestedFieldSymbol != null)
        //    {
        //        EmitHelper.EmitThis(IL, false);
        //        EmitSymbolHelper.EmitLoad(IL, this.NestedFieldSymbol);
        //        base.EmitConv();
        //    }
        //    else
        //    {
        //        throw new CCException();
        //    }
        //}

        public override void EmitSet(Exp valueExp)
        {
            if (this.ClassContext is ContextNestedClass)
            {
                FieldBuilder fieldBuilder = this.ProcContext.ClassContext.GetZCompilingType()
                                            .SearchDeclaredZField(VarName).FieldBuilder;

                EmitHelper.EmitThis(IL, false);
                EmitValueExp(valueExp);
                EmitHelper.StormField(IL, fieldBuilder);
            }
            else if (LocalVarSymbol.IsReplaceToNestedFiled)
            {
                ZCClassInfo  classType    = this.ProcContext.GetNestedClassContext().GetZCompilingType();
                FieldBuilder fieldBuilder = classType.SearchDeclaredZField(VarName).FieldBuilder;
                ZCLocalVar   instanceVar  = this.ProcContext.NestedInstance;

                EmitSymbolHelper.EmitLoad(IL, instanceVar);
                EmitValueExp(valueExp);
                EmitHelper.StormField(IL, fieldBuilder);
                base.EmitConv();
            }
            else
            {
                EmitValueExp(valueExp);
                EmitSymbolHelper.EmitStorm(IL, LocalVarSymbol);
            }
        }
Beispiel #3
0
        public void ImportZCompiling(ZCClassInfo zclassype)
        {
            string zname = zclassype.ZTypeName;

            CompilingClassDict.Add(zname, zclassype);
            FileSegementer.AddWord(zname);
            ArgSegementer.AddWord(zname);
        }
Beispiel #4
0
 private void AnalyMember(ZCClassInfo zclass)
 {
     memberSymbol = zclass.SearchProperty(propertyName);
     if (memberSymbol != null)
     {
         RetType = ((ZAPropertyInfo)memberSymbol).GetZPropertyType();
     }
 }
Beispiel #5
0
        public void Analy(ClassAST ast)
        {
            ClassTree = ast;
            base.AnalyRaw(ast);
            this.ClassTree.ClassContext.SetClassName(TypeName);
            ZCClassInfo cclass = this.ClassTree.ClassContext.GetZCompilingType();

            this.FileContext.ImportUseContext.ImportZCompiling(cclass);
        }
Beispiel #6
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);
        }
Beispiel #7
0
 public override Exp Analy()
 {
     if (this.IsAnalyed)
     {
         return(this);
     }
     VarName       = VarToken.Text;
     CompilingType = SearchValue(VarName);
     RetType       = CompilingType;
     IsAnalyed     = true;
     return(this);
 }
Beispiel #8
0
        public bool IsThisProperty(string name)
        {
            ZCClassInfo zct = this.ClassContext.GetZCompilingType();//.ThisCompilingType;

            foreach (ZCPropertyInfo member in zct.ZPropertys)
            {
                if (member.HasZName(name))
                {
                    return(true);
                }
            }
            return(false);
        }
Beispiel #9
0
        private static ZTypeCompareEnum Compare(ZLClassInfo z1, ZCClassInfo z2)
        {
            ZTypeCompareEnum result = Compare(z1, z2.BaseZClass);

            if (result == ZTypeCompareEnum.EQ)
            {
                return(ZTypeCompareEnum.SuperOf);
            }
            else if (result == ZTypeCompareEnum.SuperOf)
            {
                return(ZTypeCompareEnum.SuperOf);
            }
            else
            {
                return(ZTypeCompareEnum.NEQ);
            }
        }
Beispiel #10
0
        public void ImportStruct(ZCClassInfo zclassype)
        {
            /* Z语言程序生成的库没有field,所以不需要导入field */
            foreach (ZCPropertyInfo memberItem in zclassype.ZPropertys)
            {
                string[] itemNames = memberItem.GetZPropertyZNames();
                foreach (var name in itemNames)
                {
                    //ZLPropertyDict.Add(name, memberItem);
                    FileSegementer.AddWord(name);
                }
            }

            foreach (ZCMethodInfo item in zclassype.ZMethods)
            {
                ImportZMethod(item);
            }
        }
Beispiel #11
0
 protected ContextClass( )
 {
     EmitContext       = new ClassEmitContext();
     SelfCompilingType = new ZCClassInfo();
 }
Beispiel #12
0
 public void ImportZCompiling(ZCClassInfo classCompilingType)
 {
     ContextFileManager.ImportZCompiling(classCompilingType);
 }
Beispiel #13
0
 private static ZTypeCompareEnum Compare(ZCClassInfo z1, ZCClassInfo z2)
 {
     return(ZTypeCompareEnum.NEQ);
 }