Exemple #1
0
        public static IValue For(IExecutionContext ctx, IList<IArgument> arguments)
        {
            var args = CommandUtilities.ManageArguments(arguments)
                .Exactly(4)
                .CanConvert<IExecutable>()
                .Results();

            IExecutionContext outerCtx = ctx.CreateChildContext();
            IExecutable initializer = args[0].GetValue<IExecutable>();
            IExecutable check = args[1].GetValue<IExecutable>();
            IExecutable increment = args[2].GetValue<IExecutable>();
            IExecutable execute = args[3].GetValue<IExecutable>();

            outerCtx.Execute(initializer);

            IValue lastValue = GenericValue<object>.Default;

            while(outerCtx.Execute(check).GetValue<bool>())
            {
                IExecutionContext innerCtx = outerCtx.CreateChildContext();
                lastValue = innerCtx.Execute(execute, breakable: true);

                if (execute.DidBreak())
                    break;

                outerCtx.Execute(increment);
            }

            return lastValue;
        }
        public override object Eval(IExecutionContext context)
        {
            this.Context = context.CreateChildContext();

            Parameters.Run(context);

            if(this.Name != null)
                context.InitVariable(this.Name, this);

            return this;
        }
 public override void Run(IExecutionContext context)
 {
     foreach(object val in (IEnumerable)enumerable.Eval(context))
     {
         using(IExecutionContext child_context = context.CreateChildContext())
         {
             variable.Run(context);
             variable.AssignValue(context, val);
             if(ExecuteSingleIteration(child_context, false) == TerminationReason.Break)
                 break;
         }
     }
 }
Exemple #4
0
 public override void Run(IExecutionContext context)
 {
     IExecutionContext child_context =
         CreateChildContext ? context.CreateChildContext() : context;
     try
     {
         Statements.Run(child_context);
     }
     finally
     {
         if(CreateChildContext)
             child_context.Dispose();
     }
 }
Exemple #5
0
        public static IValue Time(IExecutionContext ctx, IList<IArgument> arguments)
        {
            var args = CommandUtilities.ManageArguments(arguments)
                .Exactly(1)
                .CanConvert<IExecutable>()
                .Results();

            IExecutable execute = args[0].GetValue<IExecutable>();
            IExecutionContext localCtx = ctx.CreateChildContext();
            Stopwatch stopwatch = new Stopwatch();
            stopwatch.Start();
            execute.Execute(localCtx);
            stopwatch.Stop();

            return new GenericValue<double>(stopwatch.Elapsed.TotalSeconds);
        }
Exemple #6
0
        public static IValue CreateNew(IExecutionContext ctx, IList<IArgument> arguments)
        {
            var args = CommandUtilities.ManageArguments(arguments)
                .Exactly(0)
                .Results();

            IExecutionContext dict = ctx.CreateChildContext();

            dict.DefineVariable("+object", new ConstantVariable(new GenericValue<Dictionary<IValue, IValue>>(new Dictionary<IValue, IValue>())));
            dict.RegisterCommand("add", Add);
            dict.RegisterCommand("get", Get);
            dict.RegisterCommand("clear", Clear);
            dict.RegisterCommand("containsKey", ContainsKey);
            dict.RegisterCommand("containsValue", ContainsValue);

            return new GenericValue<IExecutionContext>(dict);
        }
Exemple #7
0
 public static IExecutionContext CreateEmptyModule(IExecutionContext ctx, string name)
 {
     IExecutionContext module = ctx.CreateChildContext();
     ctx.DefineVariable(name, new ConstantVariable(new GenericValue<IExecutionContext>(module)));
     return module;
 }
 public TerminationReason ExecuteSingleIteration(IExecutionContext context, bool create_child_context)
 {
     IExecutionContext child_context = create_child_context ? context.CreateChildContext() : context;
     try
     {
         IterationBody.Run(child_context);
     }
     catch(IterationTermination info)
     {
         switch(info.Reason)
         {
         case TerminationReason.Continue:
         case TerminationReason.Break:
             return info.Reason;
         default:
             throw info;
         }
     }
     finally
     {
         if(create_child_context)
             child_context.Dispose();
     }
     return TerminationReason.None;
 }
Exemple #9
0
        public static IValue CreateContext(IExecutionContext ctx, IList<IArgument> arguments)
        {
            var args = CommandUtilities.ManageArguments(arguments)
                .Exactly(0)
                .Results();

            return new GenericValue<IExecutionContext>(ctx.CreateChildContext());
        }
Exemple #10
0
        public static IValue Execute(IExecutionContext ctx, IList<IArgument> arguments)
        {
            var args = CommandUtilities.ManageArguments(arguments)
                .Exactly(1)
                .CanConvert<IExecutable>(0)
                .Results();

            IExecutionContext localCtx = ctx.CreateChildContext();

            return localCtx.Execute(args[0].GetValue<IExecutable>(), true);
        }
Exemple #11
0
        public static IValue ifStm(IExecutionContext ctx, IList<IArgument> arguments)
        {
            var args = CommandUtilities.ManageArguments(arguments)
                .Between(2, 3)
                .CanConvert<bool>(0)
                .Results();

            if(args[0].GetValue<bool>())
            {
                if (args[1].CanConvert<IExecutable>())
                {
                    IExecutionContext localCtx = ctx.CreateChildContext();
                    return localCtx.Execute(arguments[1].GetValue().GetValue<IExecutable>());
                }
                else
                {
                    return args[1];
                }
            }
            else if(args.Length == 3)
            {
                if (args[2].CanConvert<IExecutable>())
                {
                    IExecutionContext localCtx = ctx.CreateChildContext();
                    return localCtx.Execute(arguments[2].GetValue().GetValue<IExecutable>());
                }
                else
                {
                    return args[2];
                }
            }

            return GenericValue<object>.Default;
        }