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); }