public static string AddRefModifiers(this string code) { var functions = FunctionsParser.Parse(code); foreach (var function in functions .ToArray() .Where(f => f.Parameters.Any(p => p.ByReference))) { var f = function; foreach (var methodCall in MethodCallsParser.Parse(code) .Where(call => call.MethodName == f.Name) .ToArray()) { foreach (var parameter in f.Parameters.Where(p => p.ByReference)) { var parameterValue = methodCall.Parameters[parameter.Index]; if (parameter.Type != "IMq4DoubleArray") { methodCall.Parameters[parameter.Index] = "ref " + parameterValue; } } code = code.Replace(methodCall.OriginalText, methodCall.ToCSharpCode()); } } return(code); }
public override IEnumerable <ParsingError> FindErrors(string code) { var methodCalls = MethodCallsParser.Parse(code).ToArray(); foreach (var methodError in MethodErrors) { if (methodCalls.Any(call => call.MethodName == methodError.MethodName)) { yield return(new ParsingError(methodError.ErrorType, methodError.MethodName + "()", null)); } } }
public override IEnumerable <ParsingError> FindErrors(string code) { var methodCalls = MethodCallsParser.Parse(code).ToArray(); foreach (var call in methodCalls.Where(c => c.MethodName == "FileSeek")) { if (call.Parameters[1] != "0" || (call.Parameters[2] != "SEEK_END" && call.Parameters[2] != "2")) { yield return(new ParsingError(ErrorType.NotSupportedError, "FileSeek", call.OriginalText)); } } }
public static string AddTypeParameterToICustom(this string code, out string[] customIndicators) { var resultIndicators = new List <string>(); var methodCalls = MethodCallsParser.Parse(code) .Where(mc => mc.MethodName == "iCustom") .ToArray(); foreach (var methodCall in methodCalls) { var nameParameter = methodCall.Parameters[2]; var simplifiedName = AlgoNameProvider.GetSimplifiedName(nameParameter, AlgoType.Indicator); var stringToReplace = methodCall.OriginalText.Replace("iCustom", string.Format("iCustom<{0}>", simplifiedName)); code = code.Replace(methodCall.OriginalText, stringToReplace); resultIndicators.Add(simplifiedName); } customIndicators = resultIndicators.Distinct().ToArray(); return(code); }