コード例 #1
0
ファイル: IndexedSetter.cs プロジェクト: toddcoder/Orange2
        public override Value Evaluate()
        {
            var value1    = getValue();
            var arguments = new Arguments();

            arguments.AddArgument(index);
            var assignedValue = expression.AssignmentValue();
            var message       = insert ? "insertSet" : SetterName("item");

            if (verb.If(out var value))
            {
                var value2 = SendMessage(value1, GetterName("item"), arguments);
                var stack  = State.Stack;
                stack.Push(value2);
                stack.Push(assignedValue);
                var evaluated = value.Evaluate();
                arguments.AddArgument(evaluated);
                SendMessage(value1, message, arguments);
            }
            else
            {
                arguments.AddArgument(assignedValue);
                SendMessage(value1, message, arguments);
            }

            result   = value1.ToString();
            typeName = value1.Type.ToString();
            return(null);
        }
コード例 #2
0
        private string BuildArgs(IPEndPoint endpoint, NetworkCredential credentials)
        {
            var args = CustomArgs + " ";

            if (endpoint == null)
            {
                throw new InvalidProgramException("Endpoint must be set before calling Connect()");
            }

            args += Arguments.AddArgument(Args.Host, endpoint.Address);
            args += Arguments.AddArgument(Args.Port, endpoint.Port);

            if (credentials != null)
            {
                if (!String.IsNullOrEmpty(credentials.UserName))
                {
                    args += Arguments.AddArgument(Args.User, credentials.UserName);
                    //No point in checking password if no username specified.
                    if (!String.IsNullOrEmpty(credentials.UserName))
                    {
                        args += Arguments.AddArgument(Args.Pass, credentials.Password);
                    }
                }
            }

            if (FullScreen)
            {
                args += Arguments.AddSwitch(Args.Fullscreen);
            }
            return(args);
        }
コード例 #3
0
        public override Verb CreateVerb(string[] tokens)
        {
            var functionName = tokens[2];

            Color(position, tokens[1].Length, Whitespaces);
            Color(functionName.Length, IsClassName(functionName) ? Types : Invokeables);
            Color(tokens[3].Length, Structures);
            Color(tokens[4].Length, Whitespaces);

            if (GetExpression(source, NextPosition, CloseParenthesis()) is Some <(Block, int)> some)
            {
                (var block, var index) = some.Value;
                var arguments           = new Arguments(block);
                var blockOrLambdaParser = new BlockOrLambdaParser();
                if (blockOrLambdaParser.Scan(source, index))
                {
                    index = blockOrLambdaParser.Position;
                    var value = blockOrLambdaParser.Value;
                    arguments.AddArgument(value);
                }
                overridePosition = index;
                return(new FunctionInvoke(functionName, arguments));
            }

            return(null);
        }
コード例 #4
0
        public override void InternalConnect(IPEndPoint endpoint, NetworkCredential credential)
        {
            var path = Environment.GetEnvironmentVariable("windir");

            StartInfo.FileName = path + "\\system32\\mstsc.exe";

            var serverArg = String.Format("{0}:{1}", endpoint.Address, endpoint.Port);

            StartInfo.Arguments +=
                Arguments.AddArgument(Args.Server, serverArg);
            Start();
        }
コード例 #5
0
        private Arguments ProcessBookFromXToY(SpeechRecognitionResult res)
        {
            Arguments args = new Arguments(null);

            args.AddType(VoiceCommandType.BOOK_ME_A_CAB_FROM_X_TO_Y, true);
            try
            {
                var source      = res.SemanticInterpretation.Properties["bookFromX"];
                var destination = res.SemanticInterpretation.Properties["bookFromY"];
                args.AddArgument("source", source.FirstOrDefault());
                args.AddArgument("destination", destination.FirstOrDefault());
                ReadSpeech(new MediaElement(), "All Success ");
            }
            catch (Exception ex)
            {
                args.AddArgument("source", "Auntys Place");
                args.AddArgument("destination", "Home");
                //ReadSpeech(new MediaElement(), ex.ToString());
            }
            return(args);
        }
コード例 #6
0
        public override Verb CreateVerb(string[] tokens)
        {
            var message = tokens[2];

            Color(position, tokens[1].Length, Structures);
            Color(message.Length, Messaging);

            Block      actualArguments;
            Block      executable = null;
            Parameters parameters = null;
            var        index      = position + length;
            var        bracket    = tokens[3];
            Lambda     lambda     = null;

            if (bracket == "(")
            {
                Color(1, Structures);
                if (GetExpression(source, index, CloseParenthesis()).If(out actualArguments, out var newIndex))
                {
                    index = newIndex;
                }
                else
                {
                    actualArguments = new Block();
                }
            }
            else
            {
                actualArguments = new Block();
            }

            if (blockOrLambdaParser.Scan(source, index))
            {
                overridePosition = blockOrLambdaParser.Result.Position;
                if (blockOrLambdaParser.Result.Verb is IExecutable e)
                {
                    parameters = e.Parameters;
                    executable = e.Action;
                    MessagingState.RegisterMessageCall(message);
                    var arguments = new Arguments(actualArguments, executable, parameters);
                    if (lambda != null)
                    {
                        arguments.AddArgument(lambda);
                    }

                    result.Value = new Message(message, arguments);
                }
            }

            return(new NullOp());
        }
コード例 #7
0
        public override Value Evaluate()
        {
            if (affinity == 0)
            {
                return(lambda.Invoke(new Arguments()));
            }

            var stack = Runtime.State.Stack;

            if (affinity == 1)
            {
                var value = stack.Pop(true, LOCATION);
                return(lambda.Invoke(new Arguments(value)));
            }

            var right     = stack.Pop(true, LOCATION);
            var left      = stack.Pop(true, LOCATION);
            var arguments = new Arguments();

            arguments.AddArgument(left);
            arguments.AddArgument(right);
            return(lambda.Invoke(arguments));
        }
コード例 #8
0
        public override Value Evaluate(Arguments arguments, Value instance = null, bool register = true, bool setArguments = true)
        {
            if (parameters.Length <= 1)
            {
                return(base.Evaluate(arguments, instance, register, setArguments));
            }

            var allParameters  = parameters.GetParameters();
            var firstParameter = allParameters[0];
            var blocks         = arguments.Blocks;
            var passedValue    = blocks.Length > 0 ? blocks[0] : firstParameter.DefaultValue;

            passedValue.Expression = true;
            var builder = new CodeBuilder();

            builder.AssignToNewField(true, firstParameter.Name, passedValue);
            builder.End();
            for (var i = 1; i < allParameters.Length; i++)
            {
                var parameter = allParameters[i];
                builder.Parameter(parameter);
            }

            builder.Inline(block);
            var curryingLambda = builder.CurryingLambda();

            if (blocks.Length > 1)
            {
                var newArguments = new Arguments();
                for (var i = 1; i < blocks.Length; i++)
                {
                    var value = blocks[i].Evaluate();
                    if (value is IInvokable invokeable)
                    {
                        value = invokeable.Invoke(new Arguments());
                    }

                    newArguments.AddArgument(value);
                }

                return(curryingLambda.Evaluate(newArguments, instance, register, setArguments));
            }

            return(curryingLambda);
        }
コード例 #9
0
        public override bool TryParse(Word w, Parser p)
        {
            Arguments arg = new Arguments();

            // 始まりの括弧が見つかる迄
            StartArgsMarker m = p.Stack.Peek() as StartArgsMarker;

            if (m == null)
            {
                while (!p.Stack.IsEmpty)
                {
                    if (p.Stack.IsTopPrefix)
                    {
                        // Prefix の適用先が見つからない
                        return(false);
                    }

                    if (p.Stack.IsTopExpression)
                    {
                        if (!arg.AddArgument(p.Stack.PopOperand(-1, false)))
                        {
                            // 引数が同じスロットに上書きされた時
                            p.ReportError(w, "引数と引数の間に区切りが入っていない可能性があります。");
                        }
                        continue;
                    }

                    DelimArgsMarker d = p.Stack.Peek() as DelimArgsMarker;
                    if (d != null)
                    {
                        p.Stack.Pop();
                        arg.AddDelim(d.Word);
                        continue;
                    }

                    m = p.Stack.Peek() as StartArgsMarker;
                    if (m != null)
                    {
                        break;
                    }

                    break;
                }
            }

            if (m != null)
            {
                p.Stack.Pop();
                p.PopContext();

#if PAREN_MATCH
                if (m.StartParen != this.start_paren)
                {
                    // ※ 区間などの場合には始まりと終わりが食い違っても OK
                    p.ReportError(w, "始まりの括弧と終わりの括弧が一致しません。");
                    return(true);
                }
#endif

                p.Stack.Push(new ExpressionElement(
                                 new Tree.FunctionCallExpression(
                                     m.StartParen + w.word,
                                     m.FunctionExpression,
                                     arg.GetArguments(),
                                     arg.GetDelims()
                                     )
                                 ));

                return(true);
            }
            else
            {
                p.ReportError(w, "対応する始まりの括弧が見つかりません。");
                return(true);
            }
        }
コード例 #10
0
        public override Verb CreateVerb(string[] tokens)
        {
            var whitespace = tokens[1];

            Color(position, whitespace.Length, Whitespaces);
            var type = tokens[2];

            Color(type.Length, Structures);
            var message = tokens[3];

            Color(message.Length, Messaging);
            Block      actualArguments;
            Block      executable = null;
            Parameters parameters = null;
            var        index      = position + length;
            var        bracket    = tokens[4];
            Lambda     lambda     = null;

            if (bracket == "(")
            {
                Color(1, Structures);
                int newIndex;
                if (GetExpression(source, index, "").Assign(out actualArguments, out newIndex))
                {
                    index = newIndex;
                }
                else
                {
                    actualArguments = new Block();
                }
            }
            else
            {
                actualArguments = new Block();
            }
            if (lambdaParser.Scan(source, index))
            {
                var messageClosure = (Lambda)lambdaParser.Result.Value;
                parameters = messageClosure.Parameters;
                executable = messageClosure.Block;
                index      = lambdaParser.Result.Position;
            }
            else if (blockParser.Scan(source, index))
            {
                executable = (Block)blockParser.Result.Value;
                index      = blockParser.Result.Position;
            }
            if (attachedLambdaParser.Scan(source, index))
            {
                lambda = (Lambda)attachedLambdaParser.Result.Value;
                index  = attachedLambdaParser.Result.Position;
            }
            overridePosition = index;
            MessagingState.RegisterMessageCall(message);
            var arguments = new Arguments(actualArguments, executable, parameters);

            if (lambda != null)
            {
                arguments.AddArgument(lambda);
            }
            return(new ApplyMessageToDefaultVariable(new Message(message, arguments)));
        }