private object ExecuteUnary(object operand, Token op, ExecutionContext context)
        {
            if (op.Is(TokenId.TypeToken))
            {
                return(this.ExecuteConversion(operand, op));
            }
            switch (op.TokenText)
            {
            case "-":
                return(ParserOps.PolyMinus(context, op, (object)0, operand));

            case "+":
                return(ParserOps.PolyAdd(context, op, (object)0, operand));

            case "!":
            case "-not":
                return((object)!LanguagePrimitives.IsTrue(operand));

            case "-bnot":
                try
                {
                    return((object)~Parser.ConvertTo <int>(operand, op));
                }
                catch (Exception ex)
                {
                    CommandProcessorBase.CheckForSevereException(ex);
                    return((object)~Parser.ConvertTo <long>(operand, op));
                }

            case ",":
                return((object)new object[1] {
                    operand
                });

            case "-split":
                return(ParserOps.SplitOperator(context, op, operand));

            case "-join":
                return(ParserOps.JoinOperator(context, op, operand));

            default:
                throw InterpreterError.NewInterpreterException((object)op, typeof(RuntimeException), op, "UnexpectedUnaryOperator", (object)op);
            }
        }
        private object ExecutePrefixPostFix(Array input, Pipe outputPipe, ExecutionContext context)
        {
            if (this._prefix == null && this._postfix == null)
            {
                return((object)null);
            }
            Token errToken = this._prefix != null ? this._prefix : this._postfix;

            if (!(this._expression is IAssignableParseTreeNode expression))
            {
                throw InterpreterError.NewInterpreterException((object)errToken.TokenText, typeof(RuntimeException), errToken, "OperatorRequiresVariableOrProperty", (object)errToken.TokenText);
            }
            IAssignableValue assignableValue = expression.GetAssignableValue(input, context);
            object           obj1            = PSObject.Base(assignableValue.GetValue(context)) ?? (object)0;
            Type             type            = obj1.GetType();
            TypeCode         typeCode        = LanguagePrimitives.GetTypeCode(type);

            if (!LanguagePrimitives.IsNumeric(typeCode))
            {
                throw InterpreterError.NewInterpreterException(obj1, typeof(RuntimeException), errToken, "OperatorRequiresNumber", (object)errToken, (object)type);
            }
            object obj2;

            if (typeCode == TypeCode.Int32)
            {
                try
                {
                    obj2 = (object)checked ((int)obj1 + this.valueToAdd);
                }
                catch
                {
                    obj2 = ParserOps.PolyAdd(context, this.NodeToken, obj1, (object)this.valueToAdd);
                }
            }
            else
            {
                obj2 = ParserOps.PolyAdd(context, this.NodeToken, obj1, (object)this.valueToAdd);
            }
            assignableValue.SetValue(obj2, context);
            return(this._prefix != null ? obj2 : obj1);
        }