diff options
| author | Jan Tuomi <jans.tuomi@gmail.com> | 2016-06-21 21:37:09 +0300 |
|---|---|---|
| committer | Jan Tuomi <jans.tuomi@gmail.com> | 2016-07-26 19:47:06 +0300 |
| commit | 50dd5dc0caa4e37a37123845cb2f8cf02a7dd945 (patch) | |
| tree | d4107b9cf961e660f1e6eabee6b33f462abfed23 /main/core/parser/ast/NegationNode.java | |
| parent | 885fb97dae384112110eb2980d80f45937637896 (diff) | |
Add negation operator
Diffstat (limited to 'main/core/parser/ast/NegationNode.java')
| -rw-r--r-- | main/core/parser/ast/NegationNode.java | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/main/core/parser/ast/NegationNode.java b/main/core/parser/ast/NegationNode.java new file mode 100644 index 0000000..ec3be2a --- /dev/null +++ b/main/core/parser/ast/NegationNode.java @@ -0,0 +1,34 @@ +package com.jantuomi.interpreter.main.core.parser.ast; + +import com.jantuomi.interpreter.main.core.parser.datatype.BooleanDataContainer; +import com.jantuomi.interpreter.main.core.parser.datatype.DataContainer; +import com.jantuomi.interpreter.main.core.parser.datatype.IntegerDataContainer; +import com.jantuomi.interpreter.main.core.tokenizer.token.Token; +import com.jantuomi.interpreter.main.exception.ExceptionManager; +import com.jantuomi.interpreter.main.exception.InterpreterException; + +/** + * Created by jan on 21.6.2016. + */ +public class NegationNode extends UnaryOperatorNode { + public NegationNode(Token token, ASTNode operand) { + super(token, operand); + } + + @Override + public DataContainer evaluate() throws InterpreterException { + DataContainer d = getOperand().evaluate(); + + if (d instanceof BooleanDataContainer) { + return new BooleanDataContainer(!((BooleanDataContainer) d).getData()); + } + else if (d instanceof IntegerDataContainer) { + return new BooleanDataContainer( + ((IntegerDataContainer) d).getData() != 0 + ); + } + ExceptionManager.raise(InterpreterException.ExceptionType.TypeError, -1, "not", d.toString()); + return null; + + } +} |
