Example #1
0
        internal void PushPipeArguments()
        {
            var arguments = _availablePipeArguments.Count > 0 ? _availablePipeArguments.Pop() : new ScriptPipeArguments(1);

            _pipeArguments.Push(arguments);
            _currentPipeArguments = arguments;
        }
Example #2
0
        internal void PushPipeArguments()
        {
            ScriptPipeArguments pipeArguments = _availablePipeArguments.Count > 0
                ? _availablePipeArguments.Pop()
                : new ScriptPipeArguments(4);

            _pipeArguments.Push(pipeArguments);
            _currentPipeArguments = pipeArguments;
        }
Example #3
0
        internal void PopPipeArguments()
        {
            if (_pipeArguments.Count == 0)
            {
                throw new InvalidOperationException("Cannot PopPipeArguments more than PushPipeArguments");
            }

            var pipeFrom = _pipeArguments.Pop();

            pipeFrom.Clear();
            _currentPipeArguments = _pipeArguments.Count > 0 ? _pipeArguments.Peek() : null;
            _availablePipeArguments.Push(pipeFrom);
        }
Example #4
0
        internal void PopPipeArguments()
        {
            if (_pipeArguments.Count == 0)
            {
                throw new InvalidOperationException("Cannot PopPipeArguments more than PushPipeArguments");
            }

            var pipeArguments = _pipeArguments.Pop();

            // Might be not null in case of an exception
            pipeArguments.Clear();
            _availablePipeArguments.Push(pipeArguments);
            _currentPipeArguments = _pipeArguments.Count > 0 ? _pipeArguments.Peek() : null;
        }
Example #5
0
        internal void PopPipeArguments()
        {
            if (_pipeArguments.Count == 1)
            {
                throw new InvalidOperationException(RS.PopPipeArgOverflow);
            }

            ScriptPipeArguments pipeArguments = _pipeArguments.Pop();

            // Might be not null in case of an exception
            pipeArguments.Clear();
            _availablePipeArguments.Push(pipeArguments);
            _currentPipeArguments = _pipeArguments.Peek();
        }
Example #6
0
        public override object Evaluate(TemplateContext context)
        {
            int beforePipeArgumentCount = context.PipeArguments.Count + 1;

            // We don't evaluate the From but we let the pipe evalute it later
            var leftResult = context.Evaluate(From);

            // Support for Parameters expansion
            var unaryExpression = From as ScriptUnaryExpression;

            if (unaryExpression != null && unaryExpression.Operator == ScriptUnaryOperator.FunctionParametersExpand)
            {
                // TODO: Pipe calls will not work correctly in case of (a | b) | ( c | d)
                var valueEnumerator = leftResult as IEnumerable;
                if (valueEnumerator != null)
                {
                    ScriptPipeArguments pipeArguments = context.PipeArguments;
                    foreach (var subValue in valueEnumerator)
                    {
                        pipeArguments.Add(subValue);
                    }
                }
                else
                {
                    context.PipeArguments.Add(leftResult);
                }
            }
            else
            {
                context.PipeArguments.Add(leftResult);
            }

            var result = context.Evaluate(To);

            int afterPipeArgumentCount = context.PipeArguments.Count;

            if (afterPipeArgumentCount >= beforePipeArgumentCount)
            {
                throw new ScriptRuntimeException(To.Span, string.Format(RS.PipeDestNotFunc, To));
            }

            return(result);
        }