public bool IsSameProperty(ISourceValuePointer p) { MathNodeMethodPointer mp = p as MathNodeMethodPointer; if (mp != null) { return(mp.ID == this.ID); } return(false); }
protected override MathNode OnCreateClone(MathNode parent) { MathNodeMethodPointer node = (MathNodeMethodPointer)base.OnCreateClone(parent); if (_methodPointer != null) { node.Method = (IActionMethodPointer)_methodPointer.Clone(); } node._id = _id; return(node); }
public override CodeExpression ExportCode(IMethodCompile method) { MathNode.Trace("{0}.ExportCode", this.GetType().Name); if (_methodPointer == null) { MathNode.Trace("Warning: method pointer is null"); return(null); } bool isWeb = false; if (_methodPointer.Owner != null && _methodPointer.Owner.RootPointer != null) { isWeb = _methodPointer.Owner.RootPointer.IsWebPage; } if (isWeb && _methodPointer.RunAt == EnumWebRunAt.Client) { CodeMethodInvokeExpression cmie = new CodeMethodInvokeExpression( new CodeVariableReferenceExpression("clientRequest"), "GetStringValue", new CodePrimitiveExpression(DataPassingCodeName)); return(cmie); } if (method == null) { throw new DesignerException("Calling {0}.ExportCode with null method", this.GetType().Name); } if (method.MethodCode == null) { throw new DesignerException("Calling {0}.ExportCode with null method.MethodCode", this.GetType().Name); } CodeStatementCollection supprtStatements = method.MethodCode.Statements; int n = ChildNodeCount; CodeExpression[] ps; if (n > 0) { IList <IParameter> pList = _methodPointer.MethodPointed.MethodParameterTypes;; //_methodPointer.MethodPointed. ps = new CodeExpression[n]; for (int i = 0; i < n; i++) { this[i].CompileDataType = new RaisDataType(pList[i].ParameterLibType); if (typeof(string).Equals(pList[i].ParameterLibType)) { if (this[i].Parent != null) { MathNodeMethodPointer mmp = this[i].Parent as MathNodeMethodPointer; if (mmp != null && mmp.Method != null && mmp.Method.Owner != null) { if (typeof(DateTime).Equals(mmp.Method.Owner.ObjectType)) { if (this[i].ActualCompiledType != null && typeof(CultureInfo).Equals(this[i].ActualCompiledType.LibType)) { this[i].CompileDataType = this[i].ActualCompiledType; } } } } } ps[i] = this[i].ExportCode(method); } } else { ps = new CodeExpression[] { }; } _methodPointer.SetParameterExpressions(ps); CodeExpression ce = _methodPointer.GetReferenceCode(method, supprtStatements, true); if (_methodPointer.ReturnBaseType != null && this.CompileDataType != null && this.CompileDataType.Type != null) { DataTypePointer targetType = new DataTypePointer(this.CompileDataType.Type); DataTypePointer sourceType = new DataTypePointer(_methodPointer.ReturnBaseType); IGenericTypePointer igp = _methodPointer as IGenericTypePointer; if (igp != null) { if (targetType.IsGenericType || targetType.IsGenericParameter) { DataTypePointer dtp = igp.GetConcreteType(targetType.BaseClassType); if (dtp != null) { targetType = dtp; } } if (sourceType.IsGenericType || sourceType.IsGenericParameter) { DataTypePointer dtp = igp.GetConcreteType(sourceType.BaseClassType); if (dtp != null) { sourceType = dtp; } } } if (!targetType.IsAssignableFrom(sourceType)) { ce = CompilerUtil.GetTypeConversion(targetType, ce, sourceType, supprtStatements); } } return(ce); }