From 30d3ce8402015db2a85a4bed35a20bd95bd0c283 Mon Sep 17 00:00:00 2001 From: jantuomi Date: Wed, 3 Aug 2016 09:31:36 +0300 Subject: Add FileNotFoundError, OutOfBoundsError, RecursiveIncludeError Change several GeneralError throws to utilize new error types --- .../jantuomi/tunkki/core/parser/ASTGenerator.java | 1 - .../tunkki/core/parser/ast/AdditionNode.java | 2 +- .../runtime/builtins/globals/GetBuiltinFunction.java | 4 ++-- .../builtins/globals/IncludeBuiltinFunction.java | 18 ++++++++++-------- .../exception/types/FileNotFoundTunkkiError.java | 20 ++++++++++++++++++++ .../exception/types/OutOfBoundsTunkkiError.java | 20 ++++++++++++++++++++ .../exception/types/RecursiveIncludeTunkkiError.java | 20 ++++++++++++++++++++ .../jantuomi/tunkki/exception/types/TunkkiError.java | 3 ++- 8 files changed, 75 insertions(+), 13 deletions(-) create mode 100644 src/main/com/jantuomi/tunkki/exception/types/FileNotFoundTunkkiError.java create mode 100644 src/main/com/jantuomi/tunkki/exception/types/OutOfBoundsTunkkiError.java create mode 100644 src/main/com/jantuomi/tunkki/exception/types/RecursiveIncludeTunkkiError.java 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 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; -- cgit v1.3