static List <OpSignature> GetMathMethods() { var funcNames = Enum.GetNames(typeof(MathOps)).Select(s => s.ToLower()).ToHashSet(); var mathMethods = typeof(math).GetMethods(BindingFlags.Public | BindingFlags.Static); var res = new List <OpSignature>(mathMethods.Length); foreach (var m in mathMethods) { if (funcNames.Contains(m.Name)) { ValueType returnType = TypeToValueType(m.ReturnType); if (returnType != ValueType.Unknown) { var paramTypes = m.GetParameters().Select(p => TypeToValueType(p.ParameterType)).ToArray(); if (paramTypes.All(p => p != ValueType.Unknown)) { res.Add(new OpSignature(returnType, m.Name.Capitalize(), paramTypes)); } } } } return(res); }
public static OpSignature LinearBinOp(CustomOps opType, ValueType valueType) { return(new OpSignature(valueType, opType, valueType, valueType)); }
public OpSignature(ValueType @return, string opType, params ValueType[] @params) { Params = @params; Return = @return; OpType = opType; }
public OpSignature(ValueType @return, CustomOps opType, params ValueType[] @params) : this(@return, opType.ToString(), @params) { }