Exemple #1
0
            public SkryptObject Sort(SkryptEngine engine, SkryptObject self, SkryptObject[] values)
            {
                var m = TypeConverter.ToMethod(values, 0);

                if (m.Parameters.Count < 2)
                {
                    engine.ThrowError("Input function must have 2 parameters!");
                }

                ((Array)self).List.Sort((x, y) => {
                    var scope         = SkryptMethod.GetPopulatedScope(m, new[] { x, y });
                    scope.ParentScope = ScopeContext;

                    var r = m.Execute(engine, self, new[] { x, y }, scope);

                    if (r.ReturnObject.ToBoolean())
                    {
                        return(1);
                    }
                    else
                    {
                        return(-1);
                    }
                });

                return(self);
            }
Exemple #2
0
            public SkryptObject Map(SkryptEngine engine, SkryptObject self, SkryptObject[] values)
            {
                var m = TypeConverter.ToMethod(values, 0);

                var newArray = engine.Create <Array>(((Array)self).List);

                if (m.GetType() == typeof(SkryptMethod) && m.Parameters.Count != 1)
                {
                    engine.ThrowError("Input function must have 1 parameter!");
                }

                var scope = SkryptMethod.GetPopulatedScope(m, new[] { new Null() });

                scope.ParentScope = engine.CurrentScope;
                var name = scope.Variables.Keys.First();

                for (int i = 0; i < newArray.List.Count; i++)
                {
                    var x = newArray.List[i];

                    scope.Variables[name].Value = x;

                    var r = m.Execute(engine, self, new[] { x }, scope);

                    ((Array)self).List[i] = scope.Variables[name].Value;
                }

                var iterator = new Dictionary <string, SkryptObject>(((Array)self).Table);

                foreach (var p in iterator)
                {
                    var x = p.Value;

                    scope.Variables[name].Value = x;

                    var r = m.Execute(engine, self, new[] { x }, scope);

                    newArray.Table[p.Key] = scope.Variables[name].Value;
                }

                return(newArray);
            }