public ExpCallUse(ContextExp context, ZCallDesc expProcDesc, ZMethodInfo zmethod, ExpCall srcExp) { this.ExpContext = context; this.ExpProcDesc = expProcDesc; this.SearchedMethod = zmethod; this.SrcExp = srcExp; }
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); }
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); }
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(); }
public bool AddParameter(ZCParamInfo zcparam) { return(ZMethodInfo.AddParameter(zcparam)); }
public override ZCParamInfo AddParameterName(string paramName) { return(ZMethodInfo.AddParameter(paramName)); }
public override bool HasParameter(string name) { return(ZMethodInfo.HasParameter(name)); }
public override ZCParamInfo GetParameter(string paramName) { return(ZMethodInfo.GetParameter(paramName)); }