aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/com/jantuomi/tunkki
diff options
context:
space:
mode:
authorjantuomi <jans.tuomi@gmail.com>2016-08-03 09:31:36 +0300
committerjantuomi <jans.tuomi@gmail.com>2016-08-03 09:54:46 +0300
commit30d3ce8402015db2a85a4bed35a20bd95bd0c283 (patch)
tree36ff5d63adec2eb2c4f0e169f98de8f09a5a2d21 /src/main/com/jantuomi/tunkki
parent1f41c228222cd3dcd4f746fc9dc1aeffa224fde8 (diff)
Add FileNotFoundError, OutOfBoundsError, RecursiveIncludeError
Change several GeneralError throws to utilize new error types
Diffstat (limited to 'src/main/com/jantuomi/tunkki')
-rw-r--r--src/main/com/jantuomi/tunkki/core/parser/ASTGenerator.java1
-rw-r--r--src/main/com/jantuomi/tunkki/core/parser/ast/AdditionNode.java2
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/GetBuiltinFunction.java4
-rw-r--r--src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/IncludeBuiltinFunction.java18
-rw-r--r--src/main/com/jantuomi/tunkki/exception/types/FileNotFoundTunkkiError.java20
-rw-r--r--src/main/com/jantuomi/tunkki/exception/types/OutOfBoundsTunkkiError.java20
-rw-r--r--src/main/com/jantuomi/tunkki/exception/types/RecursiveIncludeTunkkiError.java20
-rw-r--r--src/main/com/jantuomi/tunkki/exception/types/TunkkiError.java3
8 files changed, 75 insertions, 13 deletions
diff --git a/src/main/com/jantuomi/tunkki/core/parser/ASTGenerator.java b/src/main/com/jantuomi/tunkki/core/parser/ASTGenerator.java
index d1221df..6245c9f 100644
--- a/src/main/com/jantuomi/tunkki/core/parser/ASTGenerator.java
+++ b/src/main/com/jantuomi/tunkki/core/parser/ASTGenerator.java
@@ -2,7 +2,6 @@ package com.jantuomi.tunkki.core.parser;
import com.jantuomi.tunkki.core.parser.ast.ASTNode;
import com.jantuomi.tunkki.core.parser.tokenizer.token.Token;
-import com.jantuomi.tunkki.exception.types.GeneralTunkkiError;
import com.jantuomi.tunkki.exception.types.SyntaxTunkkiError;
import com.jantuomi.tunkki.exception.types.TunkkiError;
diff --git a/src/main/com/jantuomi/tunkki/core/parser/ast/AdditionNode.java b/src/main/com/jantuomi/tunkki/core/parser/ast/AdditionNode.java
index 58345cc..e0d4828 100644
--- a/src/main/com/jantuomi/tunkki/core/parser/ast/AdditionNode.java
+++ b/src/main/com/jantuomi/tunkki/core/parser/ast/AdditionNode.java
@@ -28,7 +28,7 @@ public class AdditionNode extends BinaryOperatorNode {
return result;
} else {
throw new TypeTunkkiError(source.getLine(),
- operand1.getType().toString(), operand2.getType().toString());
+ operand2.getType().toString(), operand1.getType().toString());
}
}
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/GetBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/GetBuiltinFunction.java
index a7bf925..5298e60 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/GetBuiltinFunction.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/GetBuiltinFunction.java
@@ -4,7 +4,7 @@ import com.jantuomi.tunkki.core.parser.datatype.Datatype;
import com.jantuomi.tunkki.core.parser.datatype.IntegerDatatype;
import com.jantuomi.tunkki.core.parser.datatype.ListDatatype;
import com.jantuomi.tunkki.exception.types.FunctionArgumentTunkkiError;
-import com.jantuomi.tunkki.exception.types.GeneralTunkkiError;
+import com.jantuomi.tunkki.exception.types.OutOfBoundsTunkkiError;
import com.jantuomi.tunkki.exception.types.TunkkiError;
import java.util.Arrays;
@@ -39,7 +39,7 @@ public class GetBuiltinFunction extends BuiltinFunction {
return list.getData().get(index.getData());
}
catch (Exception ex) {
- throw new GeneralTunkkiError(-1, "List index out of bounds.");
+ throw new OutOfBoundsTunkkiError(-1, index.toString());
}
}
diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/IncludeBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/IncludeBuiltinFunction.java
index 96a1a80..0788142 100644
--- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/IncludeBuiltinFunction.java
+++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/IncludeBuiltinFunction.java
@@ -9,8 +9,7 @@ import com.jantuomi.tunkki.core.parser.datatype.VoidDatatype;
import com.jantuomi.tunkki.core.runtime.State;
import com.jantuomi.tunkki.core.runtime.builtins.BuiltinManager;
import com.jantuomi.tunkki.exception.ExceptionManager;
-import com.jantuomi.tunkki.exception.types.GeneralTunkkiError;
-import com.jantuomi.tunkki.exception.types.TunkkiError;
+import com.jantuomi.tunkki.exception.types.*;
import java.util.Arrays;
import java.util.List;
@@ -28,13 +27,16 @@ public class IncludeBuiltinFunction extends BuiltinFunction {
@Override
public Datatype evaluate(List<Datatype> params) throws TunkkiError {
- String filename;
- if (params.size() == 1 && params.get(0).getType() == Datatype.Type.String) {
- filename = ((StringDatatype) params.get(0)).getData();
- } else {
- throw new GeneralTunkkiError(-1, "Include argument must be a valid file name string.");
+ if (params.size() != 1) {
+ throw new FunctionArgumentTunkkiError(-1, getName(), Datatype.toString(params));
}
+ if (params.get(0).getType() != Datatype.Type.String) {
+ throw new TypeTunkkiError(-1, params.get(0).getType().toString(), getName());
+ }
+
+ String filename = ((StringDatatype) params.get(0)).getData();
+
if (BuiltinManager.getInstance().BUILTIN_MODULES.contains(filename)) {
BuiltinManager.getInstance().getFunctionsFromModule(filename)
@@ -52,7 +54,7 @@ public class IncludeBuiltinFunction extends BuiltinFunction {
Pattern pattern = Pattern.compile(regex, Pattern.DOTALL);
Matcher matcher = pattern.matcher(contents);
if (matcher.matches()) {
- throw new GeneralTunkkiError(-1, "Recursive include detected, aborting.");
+ throw new RecursiveIncludeTunkkiError(-1, filename);
}
Tunkki.getInstance().run(contents);
diff --git a/src/main/com/jantuomi/tunkki/exception/types/FileNotFoundTunkkiError.java b/src/main/com/jantuomi/tunkki/exception/types/FileNotFoundTunkkiError.java
new file mode 100644
index 0000000..6bd60d6
--- /dev/null
+++ b/src/main/com/jantuomi/tunkki/exception/types/FileNotFoundTunkkiError.java
@@ -0,0 +1,20 @@
+package com.jantuomi.tunkki.exception.types;
+
+/**
+ * Created by jan on 3.8.2016.
+ */
+public class FileNotFoundTunkkiError extends TunkkiError {
+ public FileNotFoundTunkkiError(int line, String... args) {
+ super(line, args);
+ }
+
+ @Override
+ public String what() {
+ return "File %s could not be found.";
+ }
+
+ @Override
+ ExceptionType getType() {
+ return ExceptionType.FileNotFoundError;
+ }
+}
diff --git a/src/main/com/jantuomi/tunkki/exception/types/OutOfBoundsTunkkiError.java b/src/main/com/jantuomi/tunkki/exception/types/OutOfBoundsTunkkiError.java
new file mode 100644
index 0000000..16c30ae
--- /dev/null
+++ b/src/main/com/jantuomi/tunkki/exception/types/OutOfBoundsTunkkiError.java
@@ -0,0 +1,20 @@
+package com.jantuomi.tunkki.exception.types;
+
+/**
+ * Created by jan on 3.8.2016.
+ */
+public class OutOfBoundsTunkkiError extends TunkkiError {
+ public OutOfBoundsTunkkiError(int line, String... args) {
+ super(line, args);
+ }
+
+ @Override
+ public String what() {
+ return "Index %s is out of bounds.";
+ }
+
+ @Override
+ ExceptionType getType() {
+ return ExceptionType.OutOfBoundsError;
+ }
+}
diff --git a/src/main/com/jantuomi/tunkki/exception/types/RecursiveIncludeTunkkiError.java b/src/main/com/jantuomi/tunkki/exception/types/RecursiveIncludeTunkkiError.java
new file mode 100644
index 0000000..3cb359d
--- /dev/null
+++ b/src/main/com/jantuomi/tunkki/exception/types/RecursiveIncludeTunkkiError.java
@@ -0,0 +1,20 @@
+package com.jantuomi.tunkki.exception.types;
+
+/**
+ * Created by jan on 3.8.2016.
+ */
+public class RecursiveIncludeTunkkiError extends TunkkiError {
+ public RecursiveIncludeTunkkiError(int line, String... args) {
+ super(line, args);
+ }
+
+ @Override
+ public String what() {
+ return "Recursive include with module name '%s' detected.";
+ }
+
+ @Override
+ ExceptionType getType() {
+ return ExceptionType.RecursiveIncludeError;
+ }
+}
diff --git a/src/main/com/jantuomi/tunkki/exception/types/TunkkiError.java b/src/main/com/jantuomi/tunkki/exception/types/TunkkiError.java
index 62c2114..c99e8f9 100644
--- a/src/main/com/jantuomi/tunkki/exception/types/TunkkiError.java
+++ b/src/main/com/jantuomi/tunkki/exception/types/TunkkiError.java
@@ -22,7 +22,8 @@ abstract public class TunkkiError extends Exception {
GeneralError,
CastError,
DivisionByZeroError,
- NadaError
+ RecursiveIncludeError,
+ OutOfBoundsError, FileNotFoundError, NadaError
}
private int line;