コード例 #1
0
ファイル: References.cs プロジェクト: f0829/2calgo.Library
        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);
        }
コード例 #2
0
        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));
                }
            }
        }
コード例 #3
0
        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));
                }
            }
        }
コード例 #4
0
        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);
        }