public InterpreterResult Visit(UnaryOpNode node, Context context) { InterpreterResult numResult = Visit(node.Node, context); if (numResult.Error != null) { return(numResult); } if (node.Op_tok.Matches(TokenType.KEYWORD, "not")) { if (!(numResult.Result is Binary)) { return(new InterpreterResult(null, new RuntimeError($"Expected boolean expression", node.Node.Pos_Start, node.Node.Pos_End, context))); } Binary bin = numResult.Result; return(bin.SetPos(node.Pos_Start, node.Pos_End).Notted()); } else { Number num = numResult.Result; if (node.Op_tok.Type == TokenType.Minus) { return(num.SetPos(node.Pos_Start, node.Pos_End).Multed_by(new Number(-1))); } return(num); } }
public Binary Copy() { Binary copy = new Binary(this.Value); copy.SetPos(this.Start_pos, this.End_pos); copy.SetContext(this.Context); return(copy); }