aboutsummaryrefslogtreecommitdiffstats
path: root/main/core/parser/ast
diff options
context:
space:
mode:
Diffstat (limited to 'main/core/parser/ast')
-rw-r--r--main/core/parser/ast/AdditionNode.java9
-rw-r--r--main/core/parser/ast/NegationNode.java2
-rw-r--r--main/core/parser/ast/SubtractionNode.java9
-rw-r--r--main/core/parser/ast/SymbolNode.java12
4 files changed, 28 insertions, 4 deletions
diff --git a/main/core/parser/ast/AdditionNode.java b/main/core/parser/ast/AdditionNode.java
index 0820370..00db230 100644
--- a/main/core/parser/ast/AdditionNode.java
+++ b/main/core/parser/ast/AdditionNode.java
@@ -2,6 +2,7 @@ package com.jantuomi.interpreter.main.core.parser.ast;
import com.jantuomi.interpreter.main.core.parser.datatype.DataContainer;
import com.jantuomi.interpreter.main.core.tokenizer.token.Token;
+import com.jantuomi.interpreter.main.exception.ExceptionManager;
import com.jantuomi.interpreter.main.exception.InterpreterException;
import java.util.Arrays;
@@ -22,7 +23,13 @@ public class AdditionNode extends BinaryOperatorNode {
DataContainer operand2 = rhs.evaluate();
DataContainer result = operand1.add(operand2);
- return result;
+ if (result != null) {
+ return result;
+ } else {
+ ExceptionManager.raise(InterpreterException.ExceptionType.TypeError, source.getLine(),
+ operand1.getType().toString(), operand2.getType().toString());
+ return null;
+ }
}
@Override
diff --git a/main/core/parser/ast/NegationNode.java b/main/core/parser/ast/NegationNode.java
index ec3be2a..1d381cb 100644
--- a/main/core/parser/ast/NegationNode.java
+++ b/main/core/parser/ast/NegationNode.java
@@ -27,7 +27,7 @@ public class NegationNode extends UnaryOperatorNode {
((IntegerDataContainer) d).getData() != 0
);
}
- ExceptionManager.raise(InterpreterException.ExceptionType.TypeError, -1, "not", d.toString());
+ ExceptionManager.raise(InterpreterException.ExceptionType.TypeError, source.getLine(), "not", d.toString());
return null;
}
diff --git a/main/core/parser/ast/SubtractionNode.java b/main/core/parser/ast/SubtractionNode.java
index b234d0d..6b05073 100644
--- a/main/core/parser/ast/SubtractionNode.java
+++ b/main/core/parser/ast/SubtractionNode.java
@@ -2,6 +2,7 @@ package com.jantuomi.interpreter.main.core.parser.ast;
import com.jantuomi.interpreter.main.core.parser.datatype.DataContainer;
import com.jantuomi.interpreter.main.core.tokenizer.token.Token;
+import com.jantuomi.interpreter.main.exception.ExceptionManager;
import com.jantuomi.interpreter.main.exception.InterpreterException;
import java.util.Arrays;
@@ -21,7 +22,13 @@ public class SubtractionNode extends BinaryOperatorNode {
DataContainer operand2 = rhs.evaluate();
DataContainer result = operand1.subtract(operand2);
- return result;
+ if (result != null) {
+ return result;
+ } else {
+ ExceptionManager.raise(InterpreterException.ExceptionType.TypeError, source.getLine(),
+ operand1.getType().toString(), operand2.getType().toString());
+ return null;
+ }
}
@Override
diff --git a/main/core/parser/ast/SymbolNode.java b/main/core/parser/ast/SymbolNode.java
index c44d41b..5a4346a 100644
--- a/main/core/parser/ast/SymbolNode.java
+++ b/main/core/parser/ast/SymbolNode.java
@@ -3,11 +3,14 @@ package com.jantuomi.interpreter.main.core.parser.ast;
import com.jantuomi.interpreter.main.core.parser.datatype.DataContainer;
import com.jantuomi.interpreter.main.core.runtime.State;
import com.jantuomi.interpreter.main.core.tokenizer.token.Token;
+import com.jantuomi.interpreter.main.exception.ExceptionManager;
import com.jantuomi.interpreter.main.exception.InterpreterException;
+import com.sun.deploy.util.StringUtils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import java.util.stream.Collectors;
/**
* Created by jan on 17.6.2016.
@@ -46,7 +49,14 @@ public class SymbolNode extends ASTNode {
paramValues.add(param.evaluate());
}
}
- return State.getInstance().getSymbolValue(name, paramValues);
+ DataContainer returnValue = State.getInstance().getSymbolValue(name, paramValues);
+ if (returnValue != null) {
+ return returnValue;
+ } else {
+ ExceptionManager.raise(InterpreterException.ExceptionType.UndeclaredSymbolError, source.getLine(), name,
+ StringUtils.join(paramValues.stream().map(dataContainer -> dataContainer.toString()).collect(Collectors.toList()), ","));
+ return null;
+ }
}
@Override