Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
        public Binary Copy()
        {
            Binary copy = new Binary(this.Value);

            copy.SetPos(this.Start_pos, this.End_pos);
            copy.SetContext(this.Context);
            return(copy);
        }