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); }