internal void PushPipeArguments() { var arguments = _availablePipeArguments.Count > 0 ? _availablePipeArguments.Pop() : new ScriptPipeArguments(1); _pipeArguments.Push(arguments); _currentPipeArguments = arguments; }
internal void PushPipeArguments() { ScriptPipeArguments pipeArguments = _availablePipeArguments.Count > 0 ? _availablePipeArguments.Pop() : new ScriptPipeArguments(4); _pipeArguments.Push(pipeArguments); _currentPipeArguments = pipeArguments; }
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); }
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; }
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(); }
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); }