Exemple #1
0
        static public Variable ExecuteMethod(node methodNode, List <Variable> scopeContext)
        {
            if (!MethodHandler.Exists(methodNode.body))
            {
                throw new SkryptMethodDoesNotExistException(methodNode.body);
            }

            Method       method   = MethodHandler.Get(methodNode.body);
            SkryptMethod skmethod = MethodHandler.GetSk(methodNode.body);

            string      type     = methodNode.nodes[0].body;
            List <node> argNodes = null;

            object[]        args       = new object[0];
            List <Variable> scopedVars = new List <Variable>();

            if (method.arguments.Length > 0 && method.arguments != null)
            {
                argNodes = methodNode.nodes[1].nodes;
                args     = new object[argNodes.Count];

                int i = 0;

                foreach (node argNode in argNodes)
                {
                    node     Expr   = argNode.nodes[0];
                    Variable solved = ExecuteExpression(Expr, scopedVars);

                    args[i] = solved.Value;

                    i++;
                }
            }

            Variable returnVariable;

            if (method.predefined)
            {
                returnVariable = method.Run(args);
            }
            else
            {
                if (argNodes != null)
                {
                    int i = 0;

                    foreach (node argNode in argNodes)
                    {
                        node     Expr   = argNode.nodes[0];
                        Variable solved = ExecuteExpression(Expr, scopedVars);
                        solved.Identifier = argNode.body;

                        if (Variables.Exists(x => x.Identifier == argNode.body))
                        {
                            Variables[Variables.IndexOf(Variables.Find(x => x.Identifier == argNode.body))].Value = solved.Value;
                        }

                        scopedVars.Add(solved);

                        i++;
                    }
                }

                returnVariable = skmethod.Run(scopedVars);
                DeleteVariables(scopedVars);
            }

            return(returnVariable);
        }