예제 #1
0
        ///-----------------------------------------------------------------
        private void GatherVariantsSlots(int s, int[] slots, List <FunctionVariant> variants, ScriptContent data, ClassContent contentSrc, ClassContent contentDst)
        {
            var varCount = contentSrc.VarCount + 1;

            for (var c = 0; c < varCount; c++)
            {
                slots[s] = c;
                if (s + 1 < slots.Length)
                {
                    GatherVariantsSlots(s + 1, slots, variants, data, contentSrc, contentDst);
                }
                else
                {
                    if (data.classDefaultExportOnly)
                    {
                        var foundValid = false;
                        for (var exp = 0; exp < slots.Length; exp++)
                        {
                            if (slots[exp] >= contentSrc.VarCount)
                            {
                                foundValid = true;
                                break;
                            }
                        }

                        if (!foundValid)
                        {
                            continue;
                        }
                    }

                    var sn      = 0;
                    var variant = new FunctionVariant(3);
                    variant[1] += Glossary.Code.argsV;
                    for (var v = 0; v < slots.Length; v++)
                    {
                        var sv = slots[v];
                        if (sv < contentSrc.VarCount)
                        {
                            var name = sv < contentSrc.NameCount ? contentSrc.names[sv] : contentSrc.variables[sv];
                            variant.Call = name;
                            var variable = contentSrc.variables[sv];
                            variant[2] = string.Format(Glossary.Code.varsV, variable);
                        }
                        else
                        {
                            variant.Call = Glossary.Code.callN;
                            variant[1]   = string.Format(Glossary.Code.argsNOpt, data.classDefaultType, sn, data.classDefaultValue);
                            variant[2]   = string.Format(Glossary.Code.varsN, sn);
                            sn++;
                        }
                    }

                    if (sn != slots.Length)
                    {
                        variants.Add(variant);
                    }
                }
            }
        }
        ///-----------------------------------------------------------------

        #region Rule internal
        protected override void GatherVariants(List <FunctionVariant> variants, ScriptContent scriptContent, ClassContent contentSrc, ClassContent contentDst)
        {
            keywords.Clear();
            identifiers.Clear();
            Glossary.Macros.GetTags(this);

            variants.Clear();
            if (scriptContent.functionContents.Count == 0)
            {
                return;
            }

            var result = string.Empty;

            for (var k = 0; k < keywords.Count; k++)
            {
                result += scriptContent.functionContents[0].body;
                result  = (Variables[0] + keywords[k]).Apply(result);
            }

            var variant = new FunctionVariant(result, 1);

            result = string.Empty;
            for (var i = 0; i < identifiers.Count; i++)
            {
                result += scriptContent.functionContents[0].body;
                result  = (Variables[0] + identifiers[i]).Apply(result);
            }

            variant[1] = result;
            variants.Add(variant);
        }
예제 #3
0
        ///-----------------------------------------------------------------
        private void GatherVariants(int s, int[] slots, List <FunctionVariant> variants, ScriptContent data, ClassContent contentSrc, ClassContent contentDst)
        {
            if (s < slots.Length)
            {
                for (var p = 0; p < 2; p++)
                {
                    slots[s] = p;
                    GatherVariants(s + 1, slots, variants, data, contentSrc, contentDst);
                }
            }
            else
            {
                var variant = new FunctionVariant(2);
                for (var sv = 0; sv < slots.Length; sv++)
                {
                    if (slots[sv] == 0)
                    {
                        for (var i = 0; i < data.functionContents.Count; i++)
                        {
                            var info = data.functionContents[i].body;
                            info       = (Names[0] + contentSrc.names[sv * 2 + 0]).Apply(info);
                            info       = (Names[1] + contentSrc.names[sv * 2 + 1]).Apply(info);
                            variant[i] = info;
                        }
                    }
                }

                if (variant.Call != string.Empty)
                {
                    variants.Add(variant);
                }
            }
        }
예제 #4
0
        protected override void GatherVariants(List <FunctionVariant> variants, ScriptContent scriptContent, ClassContent contentSrc, ClassContent contentDst)
        {
            variants.Clear();

            for (int r = 0; r < repeatCount; r++)
            {
                var variant = new FunctionVariant(scriptContent.functionContents.Count);
                for (var fc = 0; fc < scriptContent.functionContents.Count; fc++)
                {
                    var functionContent = scriptContent.functionContents[fc];
                    for (var v = 0; v < contentSrc.names.Count; v++)
                    {
                        var functionBody = functionContent.body;

                        if (Defaults[0].CanSwap(functionBody))
                        {
                            var swap = Defaults[0] + scriptContent.classDefaultType;
                            functionBody = swap.Apply(functionBody);
                        }

                        if (Defaults[1].CanSwap(functionBody))
                        {
                            var swap = Defaults[1] + (r + 1).ToString();
                            functionBody = swap.Apply(functionBody);
                        }

                        if (Names.DefaultSymbol.CanSwap(functionBody))
                        {
                            var swap = Names.DefaultSymbol + contentSrc.names[v] + r.ToString();
                            functionBody = swap.Apply(functionBody);
                        }

                        if (Variables.DefaultSymbol.CanSwap(functionBody))
                        {
                            var swap = Variables.DefaultSymbol + r.ToString();
                            functionBody = swap.Apply(functionBody);
                        }

                        variant[fc] = functionBody;
                    }
                }

                variants.Add(variant);
            }
        }
예제 #5
0
        ///-----------------------------------------------------------------
        private void GatherVariants(int s, int[] slots, int count, List <FunctionVariant> variants, ScriptContent data, ClassContent contentSrc)
        {
            var classCount = data.classInfos.Count + 1;

            for (var c = 0; c < classCount; c++)
            {
                var varCount = c == 0 ? 1 : data.classInfos[c - 1].VarCount;
                slots[s] = c;
                if (count - varCount > 0)
                {
                    GatherVariants(s + 1, slots, count - varCount, variants, data, contentSrc);
                }
                else if (count - varCount == 0)
                {
                    var sn      = 0;
                    var sv      = 0;
                    var variant = new FunctionVariant(contentSrc.names[0], 2);
                    for (var v = 0; v < slots.Length && v < s + 1; v++)
                    {
                        var sl = slots[v];
                        if (sl == 0)
                        {
                            variant[1] = string.Format(Glossary.Code.argsN, data.classDefaultType, sn);
                            variant[2] = string.Format(Glossary.Code.varsN, sn);
                            sn++;
                        }
                        else
                        {
                            sl -= 1;
                            var info = data.classInfos[sl];
                            variant[1] = string.Format(Glossary.Code.argsV_, info.className, sv);
                            for (var vr = 0; vr < info.VarCount; vr++)
                            {
                                variant[2] = string.Format(Glossary.Code.varsV_, sv, info.variables[vr]);
                            }

                            sv++;
                        }
                    }

                    variants.Add(variant);
                }
            }
        }
        ///-----------------------------------------------------------------

        #region Rule internal
        protected override void GatherVariants(List <FunctionVariant> variants, ScriptContent scriptContent, ClassContent contentSrc, ClassContent contentDst)
        {
            infos.Clear();
            Glossary.Macros.GetTags(this);

            variants.Clear();
            if (scriptContent.functionContents.Count == 0)
            {
                return;
            }

            var result  = string.Empty;
            var variant = new FunctionVariant(result);

            for (var k = 0; k < infos.Count; k++)
            {
                result += scriptContent.functionContents[0].body;
                result  = (Variables[0] + infos[k].name).Apply(result);
            }

            variant[0] = result;
            variants.Add(variant);
        }
예제 #7
0
        ///-----------------------------------------------------------------

        #region Rule internal
        protected override void GatherVariants(List <FunctionVariant> variants, ScriptContent scriptContent, ClassContent contentSrc, ClassContent contentDst)
        {
            var slots = new int[contentSrc.VarCount];

            for (var s = 0; s < slots.Length; s++)
            {
                slots[s] = 0;
            }

            variants.Clear();
            GatherVariants(0, slots, slots.Length, variants, scriptContent, contentSrc);

            //Add Default vec(f)
            var variant = new FunctionVariant(contentSrc.names[0], 2);

            variant[1] = string.Format(Glossary.Code.argsN, scriptContent.classDefaultType, 0);
            for (var v = 0; v < contentSrc.VarCount; v++)
            {
                variant[2] = string.Format(Glossary.Code.varsN, 0);
            }

            variants.Add(variant);
        }
예제 #8
0
        ///-----------------------------------------------------------------

        #region Rule internal
        protected override void GatherVariants(List <FunctionVariant> variants, ScriptContent scriptContent, ClassContent contentSrc, ClassContent contentDst)
        {
            variants.Clear();
            if (scriptContent.functionContents.Count == 0)
            {
                variants.Add(new FunctionVariant());
            }
            else
            {
                var variant = new FunctionVariant(scriptContent.functionContents.Count);
                for (var d = 0; d < scriptContent.functionContents.Count; d++)
                {
                    var functionContent = scriptContent.functionContents[d];
                    for (var v = 0; v < contentSrc.variables.Count; v++)
                    {
                        var functionData = functionContent.body;
                        if (Variables.DefaultSymbol.CanSwap(functionContent.body))
                        {
                            var swap = Variables.DefaultSymbol + contentSrc.variables[v];
                            functionData = swap.Apply(functionData);
                        }

                        var currentVariable = Variables[v];
                        if (currentVariable.CanSwap(functionContent.body))
                        {
                            var swap = currentVariable + contentSrc.variables[v];
                            functionData = swap.Apply(functionData);
                        }

                        variant[d] = functionData;
                    }
                }

                variants.Add(variant);
            }
        }
예제 #9
0
        ///-----------------------------------------------------------------
        protected override void GatherVariants(List <FunctionVariant> variants, ScriptContent scriptContent, ClassContent contentSrc, ClassContent contentDst)
        {
            variants.Clear();

            var isDefault = contentSrc.VarCount == 0;

            for (var d = 0; d < scriptContent.functionContents.Count; d++)
            {
                for (var p = 0; p < (isDefault ? 1 : 2); p++)
                {
                    if (scriptContent.classDefaultExportOnly && (isDefault || p == 0))
                    {
                        continue;
                    }

                    var funcInfo = scriptContent.functionContents[d];
                    var variant  = new FunctionVariant(funcInfo.funcName, 2);

                    var varsCount = Variables.FindCount(funcInfo.body);
                    if (p == 1 && varsCount == 1)
                    {
                        continue;
                    }

                    var vars = funcInfo.body;
                    for (var a = 0; a < varsCount; a++)
                    {
                        if (isDefault)
                        {
                            variant[1] = string.Format(Glossary.Code.argsN, scriptContent.classDefaultType, a);
                            vars       = (Variables[a] + string.Format(Glossary.Code.varsN, a)).Apply(vars);
                        }
                        else
                        {
                            variant[1] = p == 1 && a != 0
                                ? string.Format(Glossary.Code.argsN, scriptContent.classDefaultType, a)
                                : string.Format(Glossary.Code.argsV_, contentSrc.className, a);
                        }
                    }

                    if (isDefault)
                    {
                        variant[2] = vars;
                    }
                    else
                    {
                        for (var v = 0; v < contentSrc.VarCount; v++)
                        {
                            var varsA = vars;
                            for (var a = 0; a < varsCount; a++)
                            {
                                varsA = p == 1 && a != 0
                                    ? (Variables[a] + string.Format(Glossary.Code.varsN, a)).Apply(varsA)
                                    : (Variables[a] + string.Format(Glossary.Code.varsV_, a, contentSrc.variables[v])).Apply(varsA);
                            }

                            variant[2] = varsA;
                        }

                        var v2 = new FunctionVariant(variant.Call, 2);
                        v2[1]   = variant[1];
                        v2[2]   = Glossary.Code.varNew + contentSrc.className + Strings.Separator.ParenthesisOpen.C() + variant[2] + Strings.Separator.ParenthesisClose.C();
                        variant = v2;
                    }

                    variants.Add(variant);
                }
            }
        }