예제 #1
0
 public ExpCallUse(ContextExp context, ZCallDesc expProcDesc, ZMethodInfo zmethod, ExpCall srcExp)
 {
     this.ExpContext     = context;
     this.ExpProcDesc    = expProcDesc;
     this.SearchedMethod = zmethod;
     this.SrcExp         = srcExp;
 }
예제 #2
0
        public bool CheckRunZLogo(ProjectCompileResult result)
        {
            if (result.CompiledTypes.Count == 0)
            {
                return(false);
            }
            ZClassType  zclass = result.CompiledTypes[0] as ZClassType;
            ZMethodInfo method = zclass.FindDeclaredZMethod("RunZLogo");

            return(method != null);
        }
예제 #3
0
 public override Exp Analy( )
 {
     if (SubjectExp.RetType is ZEnumType)
     {
         ErrorE(this.Postion, "约定类型没有过程");
     }
     else
     {
         SubjectZType = (SubjectExp.RetType as ZClassType);
         CallZMethod  = SubjectZType.SearchZMethod(ExpProcDesc);
         if (CallZMethod == null)
         {
             ErrorE(this.Postion, "没有找到对应的过程");
         }
         else
         {
             this.RetType = CallZMethod.RetZType;
         }
     }
     return(this);
 }
예제 #4
0
        public override void Emit()
        {
            var          zlistType   = TypeExp.RetType.SharpType;
            var          Constructor = zlistType.GetConstructor(new Type[] {});// ConstructorDesc.Constructor;
            LocalBuilder varLocal    = IL.DeclareLocal(zlistType);

            EmitHelper.NewObj(IL, Constructor);
            IL.Emit(OpCodes.Stloc, varLocal);

            MethodInfo  addMethod       = zlistType.GetMethod(CompileConstant.ZListAddMethodName);//"Add");
            ZMethodInfo exAddMethodInfo = new ZMethodInfo(addMethod);

            foreach (var exp in ArgExp.InneExps)
            {
                EmitHelper.LoadVar(IL, varLocal);//il.Emit(OpCodes.Ldloc, varLocal);
                exp.Emit();
                EmitHelper.CallDynamic(IL, exAddMethodInfo.SharpMethod);
            }
            EmitHelper.LoadVar(IL, varLocal);//il.Emit(OpCodes.Ldloc, varLocal);
            base.EmitConv();
        }
예제 #5
0
 public bool AddParameter(ZCParamInfo zcparam)
 {
     return(ZMethodInfo.AddParameter(zcparam));
 }
예제 #6
0
 public override ZCParamInfo AddParameterName(string paramName)
 {
     return(ZMethodInfo.AddParameter(paramName));
 }
예제 #7
0
 public override bool HasParameter(string name)
 {
     return(ZMethodInfo.HasParameter(name));
 }
예제 #8
0
 public override ZCParamInfo GetParameter(string paramName)
 {
     return(ZMethodInfo.GetParameter(paramName));
 }