diff options
| author | Jan Tuomi <jan-sebastian.tuomi@aalto.fi> | 2016-08-02 23:07:23 +0300 |
|---|---|---|
| committer | Jan Tuomi <jan-sebastian.tuomi@aalto.fi> | 2016-08-02 23:07:23 +0300 |
| commit | 2132d8d8ead5619974976ca430d91ee760e0551b (patch) | |
| tree | e81eefc3afaea7395409687faabc8d8d0186f922 /src | |
| parent | 5ac4b67b7eba39bbb098b9b184dcacffe99baa2a (diff) | |
Refactor TunkkiError to subclasses
Make TunkkiError abstract and create a subclass for all error types
Change all TunkkiError throws to throw subclasses instead
Diffstat (limited to 'src')
75 files changed, 422 insertions, 205 deletions
diff --git a/src/main/com/jantuomi/tunkki/Tunkki.java b/src/main/com/jantuomi/tunkki/Tunkki.java index cae5644..3100d95 100644 --- a/src/main/com/jantuomi/tunkki/Tunkki.java +++ b/src/main/com/jantuomi/tunkki/Tunkki.java @@ -7,7 +7,7 @@ import com.jantuomi.tunkki.core.parser.ast.ASTNode; import com.jantuomi.tunkki.core.runtime.Interpreter; import com.jantuomi.tunkki.core.parser.tokenizer.Tokenizer; import com.jantuomi.tunkki.core.parser.tokenizer.token.Token; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; import com.jantuomi.tunkki.repl.Repl; import com.jantuomi.tunkki.utils.Utilities; import org.kohsuke.args4j.CmdLineException; diff --git a/src/main/com/jantuomi/tunkki/core/parser/ASTGenerator.java b/src/main/com/jantuomi/tunkki/core/parser/ASTGenerator.java index 4aee626..7d8e231 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/ASTGenerator.java +++ b/src/main/com/jantuomi/tunkki/core/parser/ASTGenerator.java @@ -2,7 +2,8 @@ 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.TunkkiError; +import com.jantuomi.tunkki.exception.types.GeneralTunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; import java.util.ArrayList; import java.util.List; @@ -34,7 +35,7 @@ public class ASTGenerator { try { root.print(0); } catch (NullPointerException ex) { - throw new TunkkiError(TunkkiError.ExceptionType.GeneralError, -1, "Malformed syntax tree."); + throw new GeneralTunkkiError(-1, "Malformed syntax tree."); } System.out.println("### AST Tree end ###"); diff --git a/src/main/com/jantuomi/tunkki/core/parser/Parser.java b/src/main/com/jantuomi/tunkki/core/parser/Parser.java index 6698bba..dfcf685 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/Parser.java +++ b/src/main/com/jantuomi/tunkki/core/parser/Parser.java @@ -4,7 +4,8 @@ import com.jantuomi.tunkki.core.parser.ast.ASTNode; import com.jantuomi.tunkki.core.parser.tokenizer.token.ArgumentInfo; import com.jantuomi.tunkki.core.parser.tokenizer.token.Token; import com.jantuomi.tunkki.exception.ExceptionManager; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.ExpectedDifferentTokenTunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; import java.util.ArrayList; import java.util.List; @@ -76,9 +77,7 @@ public class Parser { if (stack.size() > 0) { args.add(stack.pop()); } else { - ExceptionManager.raise(TunkkiError.ExceptionType.ExpectedDifferentTokenError, t.getLine(), - t.getText()); - return null; + throw new ExpectedDifferentTokenTunkkiError(t.getLine(), t.getText()); } } } diff --git a/src/main/com/jantuomi/tunkki/core/parser/ast/ASTNode.java b/src/main/com/jantuomi/tunkki/core/parser/ast/ASTNode.java index 99b68d6..cf7e271 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/ast/ASTNode.java +++ b/src/main/com/jantuomi/tunkki/core/parser/ast/ASTNode.java @@ -2,7 +2,7 @@ package com.jantuomi.tunkki.core.parser.ast; import com.jantuomi.tunkki.core.parser.datatype.Datatype; import com.jantuomi.tunkki.core.parser.tokenizer.token.Token; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; import java.util.List; 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 27b8662..58345cc 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/ast/AdditionNode.java +++ b/src/main/com/jantuomi/tunkki/core/parser/ast/AdditionNode.java @@ -3,7 +3,8 @@ package com.jantuomi.tunkki.core.parser.ast; import com.jantuomi.tunkki.core.parser.datatype.Datatype; import com.jantuomi.tunkki.core.parser.tokenizer.token.Token; import com.jantuomi.tunkki.exception.ExceptionManager; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; +import com.jantuomi.tunkki.exception.types.TypeTunkkiError; import java.util.Arrays; import java.util.List; @@ -26,9 +27,8 @@ public class AdditionNode extends BinaryOperatorNode { if (result != null) { return result; } else { - ExceptionManager.raise(TunkkiError.ExceptionType.TypeError, source.getLine(), - operand1.getType().toString(), operand2.getType().toString()); - return null; + throw new TypeTunkkiError(source.getLine(), + operand1.getType().toString(), operand2.getType().toString()); } } diff --git a/src/main/com/jantuomi/tunkki/core/parser/ast/AssignmentNode.java b/src/main/com/jantuomi/tunkki/core/parser/ast/AssignmentNode.java index cf705c1..38bb269 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/ast/AssignmentNode.java +++ b/src/main/com/jantuomi/tunkki/core/parser/ast/AssignmentNode.java @@ -3,7 +3,7 @@ package com.jantuomi.tunkki.core.parser.ast; import com.jantuomi.tunkki.core.parser.datatype.Datatype; import com.jantuomi.tunkki.core.runtime.State; import com.jantuomi.tunkki.core.parser.tokenizer.token.Token; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; import java.util.Arrays; import java.util.List; diff --git a/src/main/com/jantuomi/tunkki/core/parser/ast/BlockBodyNode.java b/src/main/com/jantuomi/tunkki/core/parser/ast/BlockBodyNode.java index b394223..25c10a9 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/ast/BlockBodyNode.java +++ b/src/main/com/jantuomi/tunkki/core/parser/ast/BlockBodyNode.java @@ -3,7 +3,7 @@ package com.jantuomi.tunkki.core.parser.ast; import com.jantuomi.tunkki.core.parser.datatype.Datatype; import com.jantuomi.tunkki.core.parser.datatype.VoidDatatype; import com.jantuomi.tunkki.core.parser.tokenizer.token.Token; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; /** * Created by jan on 17.6.2016. diff --git a/src/main/com/jantuomi/tunkki/core/parser/ast/BranchNode.java b/src/main/com/jantuomi/tunkki/core/parser/ast/BranchNode.java index adcd098..6bdd4c2 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/ast/BranchNode.java +++ b/src/main/com/jantuomi/tunkki/core/parser/ast/BranchNode.java @@ -3,7 +3,7 @@ package com.jantuomi.tunkki.core.parser.ast; import com.jantuomi.tunkki.core.parser.datatype.BooleanDatatype; import com.jantuomi.tunkki.core.parser.datatype.Datatype; import com.jantuomi.tunkki.core.parser.tokenizer.token.Token; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; import java.util.Arrays; import java.util.List; diff --git a/src/main/com/jantuomi/tunkki/core/parser/ast/CallNode.java b/src/main/com/jantuomi/tunkki/core/parser/ast/CallNode.java index 5e9cd01..be3f0be 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/ast/CallNode.java +++ b/src/main/com/jantuomi/tunkki/core/parser/ast/CallNode.java @@ -3,7 +3,7 @@ package com.jantuomi.tunkki.core.parser.ast; import com.jantuomi.tunkki.core.parser.datatype.CallableDatatype; import com.jantuomi.tunkki.core.parser.datatype.Datatype; import com.jantuomi.tunkki.core.parser.tokenizer.token.Token; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; /** * Created by jan on 30.7.2016. diff --git a/src/main/com/jantuomi/tunkki/core/parser/ast/DeclareAssignNode.java b/src/main/com/jantuomi/tunkki/core/parser/ast/DeclareAssignNode.java index ed841aa..206bbd9 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/ast/DeclareAssignNode.java +++ b/src/main/com/jantuomi/tunkki/core/parser/ast/DeclareAssignNode.java @@ -3,7 +3,8 @@ package com.jantuomi.tunkki.core.parser.ast; import com.jantuomi.tunkki.core.parser.datatype.Datatype; import com.jantuomi.tunkki.core.runtime.State; import com.jantuomi.tunkki.core.parser.tokenizer.token.Token; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.ExpectedDifferentTokenTunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; import java.util.Arrays; import java.util.List; @@ -23,7 +24,7 @@ public class DeclareAssignNode extends BinaryOperatorNode { var = (SymbolNode) lhs; } catch (Exception ex) { - throw new TunkkiError(TunkkiError.ExceptionType.ExpectedDifferentTokenError, getLine(), getText()); + throw new ExpectedDifferentTokenTunkkiError(getLine(), getText()); } State.getInstance().addSymbolToScope(var.getName()); diff --git a/src/main/com/jantuomi/tunkki/core/parser/ast/DivisionNode.java b/src/main/com/jantuomi/tunkki/core/parser/ast/DivisionNode.java index 0d233b4..2f7965e 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/ast/DivisionNode.java +++ b/src/main/com/jantuomi/tunkki/core/parser/ast/DivisionNode.java @@ -3,7 +3,9 @@ package com.jantuomi.tunkki.core.parser.ast; import com.jantuomi.tunkki.core.parser.datatype.Datatype; import com.jantuomi.tunkki.core.parser.tokenizer.token.Token; import com.jantuomi.tunkki.exception.ExceptionManager; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.DivisionByZeroTunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; +import com.jantuomi.tunkki.exception.types.TypeTunkkiError; import java.util.Arrays; import java.util.List; @@ -27,15 +29,14 @@ public class DivisionNode extends BinaryOperatorNode { result = operand1.divide(operand2); } catch (ArithmeticException ex) { - throw new TunkkiError(TunkkiError.ExceptionType.DivisionByZeroError, getLine()); + throw new DivisionByZeroTunkkiError(getLine()); } if (result != null) { return result; } else { - ExceptionManager.raise(TunkkiError.ExceptionType.TypeError, source.getLine(), + throw new TypeTunkkiError(source.getLine(), operand1.getType().toString(), operand2.getType().toString()); - return null; } } diff --git a/src/main/com/jantuomi/tunkki/core/parser/ast/FunctionDefineNode.java b/src/main/com/jantuomi/tunkki/core/parser/ast/FunctionDefineNode.java index f73fbf4..5c3ad94 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/ast/FunctionDefineNode.java +++ b/src/main/com/jantuomi/tunkki/core/parser/ast/FunctionDefineNode.java @@ -5,7 +5,8 @@ import com.jantuomi.tunkki.core.parser.datatype.Datatype; import com.jantuomi.tunkki.core.runtime.Function; import com.jantuomi.tunkki.core.runtime.State; import com.jantuomi.tunkki.core.parser.tokenizer.token.Token; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.ExpectedDifferentTokenTunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; import java.util.ArrayList; import java.util.List; @@ -41,7 +42,7 @@ public class FunctionDefineNode extends VarargOperatorNode { } } catch (Exception ex) { - throw new TunkkiError(TunkkiError.ExceptionType.ExpectedDifferentTokenError, getLine(), getText()); + throw new ExpectedDifferentTokenTunkkiError(getLine(), getText()); } Function function = new Function(argumentNames, (BlockBodyNode) body); function.setName(name); diff --git a/src/main/com/jantuomi/tunkki/core/parser/ast/MultiplicationNode.java b/src/main/com/jantuomi/tunkki/core/parser/ast/MultiplicationNode.java index 67bdf18..4ec1ef9 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/ast/MultiplicationNode.java +++ b/src/main/com/jantuomi/tunkki/core/parser/ast/MultiplicationNode.java @@ -3,7 +3,8 @@ package com.jantuomi.tunkki.core.parser.ast; import com.jantuomi.tunkki.core.parser.datatype.Datatype; import com.jantuomi.tunkki.core.parser.tokenizer.token.Token; import com.jantuomi.tunkki.exception.ExceptionManager; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; +import com.jantuomi.tunkki.exception.types.TypeTunkkiError; import java.util.Arrays; import java.util.List; @@ -26,9 +27,8 @@ public class MultiplicationNode extends BinaryOperatorNode { if (result != null) { return result; } else { - ExceptionManager.raise(TunkkiError.ExceptionType.TypeError, source.getLine(), + throw new TypeTunkkiError(source.getLine(), operand1.getType().toString(), operand2.getType().toString()); - return null; } } diff --git a/src/main/com/jantuomi/tunkki/core/parser/ast/NegationNode.java b/src/main/com/jantuomi/tunkki/core/parser/ast/NegationNode.java index e23b25b..273b615 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/ast/NegationNode.java +++ b/src/main/com/jantuomi/tunkki/core/parser/ast/NegationNode.java @@ -5,7 +5,8 @@ import com.jantuomi.tunkki.core.parser.datatype.Datatype; import com.jantuomi.tunkki.core.parser.datatype.IntegerDatatype; import com.jantuomi.tunkki.core.parser.tokenizer.token.Token; import com.jantuomi.tunkki.exception.ExceptionManager; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; +import com.jantuomi.tunkki.exception.types.TypeTunkkiError; /** * Created by jan on 21.6.2016. @@ -27,8 +28,7 @@ public class NegationNode extends UnaryOperatorNode { ((IntegerDatatype) d).getData() != 0 ); } - ExceptionManager.raise(TunkkiError.ExceptionType.TypeError, source.getLine(), "not", d.toString()); - return null; + throw new TypeTunkkiError(source.getLine(), "not", d.toString()); } } diff --git a/src/main/com/jantuomi/tunkki/core/parser/ast/SubtractionNode.java b/src/main/com/jantuomi/tunkki/core/parser/ast/SubtractionNode.java index 1362801..a88f5fc 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/ast/SubtractionNode.java +++ b/src/main/com/jantuomi/tunkki/core/parser/ast/SubtractionNode.java @@ -3,7 +3,8 @@ package com.jantuomi.tunkki.core.parser.ast; import com.jantuomi.tunkki.core.parser.datatype.Datatype; import com.jantuomi.tunkki.core.parser.tokenizer.token.Token; import com.jantuomi.tunkki.exception.ExceptionManager; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; +import com.jantuomi.tunkki.exception.types.TypeTunkkiError; import java.util.Arrays; import java.util.List; @@ -25,9 +26,8 @@ public class SubtractionNode extends BinaryOperatorNode { if (result != null) { return result; } else { - ExceptionManager.raise(TunkkiError.ExceptionType.TypeError, source.getLine(), + throw new TypeTunkkiError(source.getLine(), operand1.getType().toString(), operand2.getType().toString()); - return null; } } diff --git a/src/main/com/jantuomi/tunkki/core/parser/ast/SymbolNode.java b/src/main/com/jantuomi/tunkki/core/parser/ast/SymbolNode.java index a768d8d..ff4c256 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/ast/SymbolNode.java +++ b/src/main/com/jantuomi/tunkki/core/parser/ast/SymbolNode.java @@ -4,7 +4,8 @@ import com.jantuomi.tunkki.core.parser.datatype.Datatype; import com.jantuomi.tunkki.core.runtime.State; import com.jantuomi.tunkki.core.parser.tokenizer.token.Token; import com.jantuomi.tunkki.exception.ExceptionManager; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; +import com.jantuomi.tunkki.exception.types.UndeclaredSymbolTunkkiError; import java.util.ArrayList; import java.util.List; @@ -54,15 +55,14 @@ public class SymbolNode extends ASTNode { } /* If a TunkkiError is caught, pass it on with line information */ catch (TunkkiError ex) { - throw new TunkkiError(ex.getType(), getLine(), - ex.getArguments().toArray(new String[ex.getArguments().size()])); + ex.setLine(getLine()); + throw ex; } if (returnValue != null) { return returnValue; } else { - ExceptionManager.raise(TunkkiError.ExceptionType.UndeclaredSymbolError, getLine(), name); - return null; + throw new UndeclaredSymbolTunkkiError(getLine(), name); } } diff --git a/src/main/com/jantuomi/tunkki/core/parser/datatype/BooleanDatatype.java b/src/main/com/jantuomi/tunkki/core/parser/datatype/BooleanDatatype.java index 9a42897..d00b42a 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/datatype/BooleanDatatype.java +++ b/src/main/com/jantuomi/tunkki/core/parser/datatype/BooleanDatatype.java @@ -1,6 +1,6 @@ package com.jantuomi.tunkki.core.parser.datatype; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; /** * Created by jan on 16.6.2016. diff --git a/src/main/com/jantuomi/tunkki/core/parser/datatype/CallableDatatype.java b/src/main/com/jantuomi/tunkki/core/parser/datatype/CallableDatatype.java index d4b93d6..f4f2844 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/datatype/CallableDatatype.java +++ b/src/main/com/jantuomi/tunkki/core/parser/datatype/CallableDatatype.java @@ -1,7 +1,7 @@ package com.jantuomi.tunkki.core.parser.datatype; import com.jantuomi.tunkki.core.runtime.Function; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; import java.util.List; diff --git a/src/main/com/jantuomi/tunkki/core/parser/datatype/Datatype.java b/src/main/com/jantuomi/tunkki/core/parser/datatype/Datatype.java index dcbd66e..f2648c3 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/datatype/Datatype.java +++ b/src/main/com/jantuomi/tunkki/core/parser/datatype/Datatype.java @@ -1,6 +1,6 @@ package com.jantuomi.tunkki.core.parser.datatype; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; import java.util.List; import java.util.stream.Collectors; diff --git a/src/main/com/jantuomi/tunkki/core/parser/datatype/DoubleDatatype.java b/src/main/com/jantuomi/tunkki/core/parser/datatype/DoubleDatatype.java index 31a7f96..9652874 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/datatype/DoubleDatatype.java +++ b/src/main/com/jantuomi/tunkki/core/parser/datatype/DoubleDatatype.java @@ -1,6 +1,6 @@ package com.jantuomi.tunkki.core.parser.datatype; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; /** * Created by jan on 22.6.2016. diff --git a/src/main/com/jantuomi/tunkki/core/parser/datatype/IntegerDatatype.java b/src/main/com/jantuomi/tunkki/core/parser/datatype/IntegerDatatype.java index 51d9d4e..b363942 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/datatype/IntegerDatatype.java +++ b/src/main/com/jantuomi/tunkki/core/parser/datatype/IntegerDatatype.java @@ -1,6 +1,6 @@ package com.jantuomi.tunkki.core.parser.datatype; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; /** * Created by jan on 16.6.2016. diff --git a/src/main/com/jantuomi/tunkki/core/parser/datatype/ListDatatype.java b/src/main/com/jantuomi/tunkki/core/parser/datatype/ListDatatype.java index 8b4d44c..f097ee4 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/datatype/ListDatatype.java +++ b/src/main/com/jantuomi/tunkki/core/parser/datatype/ListDatatype.java @@ -1,6 +1,6 @@ package com.jantuomi.tunkki.core.parser.datatype; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; import java.util.ArrayList; import java.util.List; diff --git a/src/main/com/jantuomi/tunkki/core/parser/datatype/NadaDatatype.java b/src/main/com/jantuomi/tunkki/core/parser/datatype/NadaDatatype.java index 56c91b6..880d8ad 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/datatype/NadaDatatype.java +++ b/src/main/com/jantuomi/tunkki/core/parser/datatype/NadaDatatype.java @@ -1,6 +1,7 @@ package com.jantuomi.tunkki.core.parser.datatype; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.NadaTunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; /** * Created by jan on 29.7.2016. @@ -49,6 +50,6 @@ public class NadaDatatype extends Datatype<Integer> { } private void doOperation() throws TunkkiError { - throw new TunkkiError(TunkkiError.ExceptionType.NadaError, -1); + throw new NadaTunkkiError(-1); } } diff --git a/src/main/com/jantuomi/tunkki/core/parser/datatype/StringDatatype.java b/src/main/com/jantuomi/tunkki/core/parser/datatype/StringDatatype.java index 80dd527..4ffcb49 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/datatype/StringDatatype.java +++ b/src/main/com/jantuomi/tunkki/core/parser/datatype/StringDatatype.java @@ -1,6 +1,6 @@ package com.jantuomi.tunkki.core.parser.datatype; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; /** * Created by jan on 16.6.2016. diff --git a/src/main/com/jantuomi/tunkki/core/parser/datatype/VoidDatatype.java b/src/main/com/jantuomi/tunkki/core/parser/datatype/VoidDatatype.java index a65f6aa..ae3c8f9 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/datatype/VoidDatatype.java +++ b/src/main/com/jantuomi/tunkki/core/parser/datatype/VoidDatatype.java @@ -1,6 +1,6 @@ package com.jantuomi.tunkki.core.parser.datatype; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; /** * Created by jan on 17.6.2016. diff --git a/src/main/com/jantuomi/tunkki/core/parser/tokenizer/Tokenizer.java b/src/main/com/jantuomi/tunkki/core/parser/tokenizer/Tokenizer.java index 50936b5..4fb54bb 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/tokenizer/Tokenizer.java +++ b/src/main/com/jantuomi/tunkki/core/parser/tokenizer/Tokenizer.java @@ -3,7 +3,8 @@ package com.jantuomi.tunkki.core.parser.tokenizer; import com.jantuomi.tunkki.core.parser.tokenizer.token.Token; import com.jantuomi.tunkki.exception.ExceptionManager; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.IllegalTokenTunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; import java.util.ArrayList; import java.util.LinkedHashMap; @@ -95,7 +96,7 @@ public class Tokenizer { } if (erroneousTokenTypes.contains(token.getTokenType())) { - ExceptionManager.raise(TunkkiError.ExceptionType.IllegalTokenError, line, token.getText()); + throw new IllegalTokenTunkkiError(line, token.getText()); } String tokenRawText = token.getRawText(); diff --git a/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/Token.java b/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/Token.java index 17d3cf1..720efcd 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/Token.java +++ b/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/Token.java @@ -2,7 +2,8 @@ package com.jantuomi.tunkki.core.parser.tokenizer.token; import com.jantuomi.tunkki.core.parser.ast.ASTNode; import com.jantuomi.tunkki.exception.ExceptionManager; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.IllegalTokenTunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; @@ -163,9 +164,7 @@ abstract public class Token { token.setLine(line); } else { - ExceptionManager.raise(TunkkiError.ExceptionType.IllegalTokenError, line, - type.toString() - ); + throw new IllegalTokenTunkkiError(line, type.toString()); } return token; diff --git a/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/AdditionToken.java b/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/AdditionToken.java index 5379ffa..01d2fab 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/AdditionToken.java +++ b/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/AdditionToken.java @@ -2,7 +2,7 @@ package com.jantuomi.tunkki.core.parser.tokenizer.token.types; import com.jantuomi.tunkki.core.parser.ast.ASTNode; import com.jantuomi.tunkki.core.parser.ast.AdditionNode; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; /** * Created by jan on 15.6.2016. diff --git a/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/AssignmentToken.java b/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/AssignmentToken.java index e70e258..3167664 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/AssignmentToken.java +++ b/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/AssignmentToken.java @@ -4,7 +4,8 @@ import com.jantuomi.tunkki.core.parser.ast.ASTNode; import com.jantuomi.tunkki.core.parser.ast.AssignmentNode; import com.jantuomi.tunkki.core.parser.ast.SymbolNode; import com.jantuomi.tunkki.exception.ExceptionManager; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.SyntaxTunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; /** * Created by jan on 20.6.2016. @@ -22,8 +23,7 @@ public class AssignmentToken extends BinaryOperatorToken { ASTNode lhsNode = lhs.generateNode(); if (!(lhsNode instanceof SymbolNode)) { - ExceptionManager.raise(TunkkiError.ExceptionType.SyntaxError, getLine(), "non-symbol " + toString()); - return null; + throw new SyntaxTunkkiError(getLine(), "non-symbol " + toString()); } AssignmentNode node = new AssignmentNode(this, diff --git a/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/BlockBodyToken.java b/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/BlockBodyToken.java index 35e1a29..48332f2 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/BlockBodyToken.java +++ b/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/BlockBodyToken.java @@ -3,7 +3,7 @@ package com.jantuomi.tunkki.core.parser.tokenizer.token.types; import com.jantuomi.tunkki.core.parser.ast.ASTNode; import com.jantuomi.tunkki.core.parser.ast.BlockBodyNode; import com.jantuomi.tunkki.core.parser.tokenizer.token.Token; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; import java.util.ArrayList; import java.util.List; diff --git a/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/BranchToken.java b/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/BranchToken.java index e9f8bcb..c4dfaf4 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/BranchToken.java +++ b/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/BranchToken.java @@ -4,7 +4,7 @@ import com.jantuomi.tunkki.core.parser.ast.ASTNode; import com.jantuomi.tunkki.core.parser.ast.BlockBodyNode; import com.jantuomi.tunkki.core.parser.ast.BranchNode; import com.jantuomi.tunkki.core.parser.tokenizer.token.Token; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; import java.util.Arrays; import java.util.List; diff --git a/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/CallToken.java b/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/CallToken.java index d59ad80..2b34cd7 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/CallToken.java +++ b/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/CallToken.java @@ -3,7 +3,7 @@ package com.jantuomi.tunkki.core.parser.tokenizer.token.types; import com.jantuomi.tunkki.core.parser.ast.ASTNode; import com.jantuomi.tunkki.core.parser.ast.CallNode; import com.jantuomi.tunkki.core.parser.tokenizer.token.Token; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; import java.util.ArrayList; import java.util.List; diff --git a/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/DeclareAssignToken.java b/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/DeclareAssignToken.java index dc55896..5821dd3 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/DeclareAssignToken.java +++ b/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/DeclareAssignToken.java @@ -4,7 +4,8 @@ import com.jantuomi.tunkki.core.parser.ast.ASTNode; import com.jantuomi.tunkki.core.parser.ast.DeclareAssignNode; import com.jantuomi.tunkki.core.parser.ast.SymbolNode; import com.jantuomi.tunkki.exception.ExceptionManager; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.SyntaxTunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; /** * Created by jan on 28.7.2016. @@ -19,8 +20,7 @@ public class DeclareAssignToken extends BinaryOperatorToken { ASTNode lhsNode = lhs.generateNode(); if (!(lhsNode instanceof SymbolNode)) { - ExceptionManager.raise(TunkkiError.ExceptionType.SyntaxError, getLine(), "non-symbol " + toString()); - return null; + throw new SyntaxTunkkiError(getLine(), "non-symbol " + toString()); } DeclareAssignNode node = new DeclareAssignNode(this, diff --git a/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/DivisionToken.java b/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/DivisionToken.java index cd3100f..1c2d8f7 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/DivisionToken.java +++ b/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/DivisionToken.java @@ -2,7 +2,7 @@ package com.jantuomi.tunkki.core.parser.tokenizer.token.types; import com.jantuomi.tunkki.core.parser.ast.ASTNode; import com.jantuomi.tunkki.core.parser.ast.DivisionNode; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; /** * Created by jan on 15.6.2016. diff --git a/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/FunctionDefineToken.java b/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/FunctionDefineToken.java index ad7fa14..8050692 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/FunctionDefineToken.java +++ b/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/FunctionDefineToken.java @@ -3,7 +3,8 @@ package com.jantuomi.tunkki.core.parser.tokenizer.token.types; import com.jantuomi.tunkki.core.parser.ast.ASTNode; import com.jantuomi.tunkki.core.parser.ast.BlockBodyNode; import com.jantuomi.tunkki.core.parser.ast.FunctionDefineNode; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.ExpectedDifferentTokenTunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; import java.util.ArrayList; import java.util.List; @@ -21,7 +22,7 @@ public class FunctionDefineToken extends VarargOperatorToken { FunctionDefineNode node = new FunctionDefineNode(this); if (args.size() == 0) { - throw new TunkkiError(TunkkiError.ExceptionType.ExpectedDifferentTokenError, getLine(), getText()); + throw new ExpectedDifferentTokenTunkkiError(getLine(), getText()); } node.setName(args.get(0).getText()); @@ -37,7 +38,7 @@ public class FunctionDefineToken extends VarargOperatorToken { bodyNode = (BlockBodyNode) args.get(args.size() - 1).generateNode(); } catch (Exception ex) { - throw new TunkkiError(TunkkiError.ExceptionType.ExpectedDifferentTokenError, getLine(), getText()); + throw new ExpectedDifferentTokenTunkkiError(getLine(), getText()); } node.setBody(bodyNode); return node; diff --git a/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/MultiplicationToken.java b/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/MultiplicationToken.java index e8e3721..69c153f 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/MultiplicationToken.java +++ b/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/MultiplicationToken.java @@ -2,7 +2,7 @@ package com.jantuomi.tunkki.core.parser.tokenizer.token.types; import com.jantuomi.tunkki.core.parser.ast.ASTNode; import com.jantuomi.tunkki.core.parser.ast.MultiplicationNode; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; /** * Created by jan on 15.6.2016. diff --git a/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/NegationToken.java b/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/NegationToken.java index a094f02..46098c1 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/NegationToken.java +++ b/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/NegationToken.java @@ -2,7 +2,7 @@ package com.jantuomi.tunkki.core.parser.tokenizer.token.types; import com.jantuomi.tunkki.core.parser.ast.ASTNode; import com.jantuomi.tunkki.core.parser.ast.NegationNode; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; /** * Created by jan on 21.6.2016. diff --git a/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/StringLiteralToken.java b/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/StringLiteralToken.java index de916c2..aacb2e8 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/StringLiteralToken.java +++ b/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/StringLiteralToken.java @@ -2,7 +2,7 @@ package com.jantuomi.tunkki.core.parser.tokenizer.token.types; import com.jantuomi.tunkki.core.parser.ast.ASTNode; import com.jantuomi.tunkki.core.parser.ast.StringLiteralNode; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; /** * Created by jan on 21.6.2016. diff --git a/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/SubtractionToken.java b/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/SubtractionToken.java index f5ff1b4..a94a46a 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/SubtractionToken.java +++ b/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/SubtractionToken.java @@ -2,7 +2,7 @@ package com.jantuomi.tunkki.core.parser.tokenizer.token.types; import com.jantuomi.tunkki.core.parser.ast.ASTNode; import com.jantuomi.tunkki.core.parser.ast.SubtractionNode; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; /** * Created by jan on 16.6.2016. diff --git a/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/SymbolToken.java b/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/SymbolToken.java index 613ebc5..bca3711 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/SymbolToken.java +++ b/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/SymbolToken.java @@ -2,7 +2,7 @@ package com.jantuomi.tunkki.core.parser.tokenizer.token.types; import com.jantuomi.tunkki.core.parser.ast.ASTNode; import com.jantuomi.tunkki.core.parser.ast.SymbolNode; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; /** * Created by jan on 16.6.2016. diff --git a/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/VariableDeclareToken.java b/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/VariableDeclareToken.java index 46c5b6a..a9d6160 100644 --- a/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/VariableDeclareToken.java +++ b/src/main/com/jantuomi/tunkki/core/parser/tokenizer/token/types/VariableDeclareToken.java @@ -3,7 +3,7 @@ package com.jantuomi.tunkki.core.parser.tokenizer.token.types; import com.jantuomi.tunkki.core.parser.ast.ASTNode; import com.jantuomi.tunkki.core.parser.ast.SymbolNode; import com.jantuomi.tunkki.core.parser.ast.VariableDeclareNode; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; /** * Created by jan on 20.6.2016. diff --git a/src/main/com/jantuomi/tunkki/core/runtime/Function.java b/src/main/com/jantuomi/tunkki/core/runtime/Function.java index 7108fdc..b104dd0 100644 --- a/src/main/com/jantuomi/tunkki/core/runtime/Function.java +++ b/src/main/com/jantuomi/tunkki/core/runtime/Function.java @@ -2,7 +2,7 @@ package com.jantuomi.tunkki.core.runtime; import com.jantuomi.tunkki.core.parser.ast.BlockBodyNode; import com.jantuomi.tunkki.core.parser.datatype.Datatype; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; import java.util.List; diff --git a/src/main/com/jantuomi/tunkki/core/runtime/Interpreter.java b/src/main/com/jantuomi/tunkki/core/runtime/Interpreter.java index 7160b04..ef9a2c6 100644 --- a/src/main/com/jantuomi/tunkki/core/runtime/Interpreter.java +++ b/src/main/com/jantuomi/tunkki/core/runtime/Interpreter.java @@ -2,7 +2,7 @@ package com.jantuomi.tunkki.core.runtime; import com.jantuomi.tunkki.core.parser.ast.ASTNode; import com.jantuomi.tunkki.core.parser.datatype.Datatype; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; import java.util.List; diff --git a/src/main/com/jantuomi/tunkki/core/runtime/Scope.java b/src/main/com/jantuomi/tunkki/core/runtime/Scope.java index 0565227..4bdd71b 100644 --- a/src/main/com/jantuomi/tunkki/core/runtime/Scope.java +++ b/src/main/com/jantuomi/tunkki/core/runtime/Scope.java @@ -2,7 +2,7 @@ package com.jantuomi.tunkki.core.runtime; import com.jantuomi.tunkki.core.parser.datatype.CallableDatatype; import com.jantuomi.tunkki.core.parser.datatype.Datatype; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; import java.util.HashMap; import java.util.List; diff --git a/src/main/com/jantuomi/tunkki/core/runtime/State.java b/src/main/com/jantuomi/tunkki/core/runtime/State.java index 742e603..968f8c9 100644 --- a/src/main/com/jantuomi/tunkki/core/runtime/State.java +++ b/src/main/com/jantuomi/tunkki/core/runtime/State.java @@ -3,7 +3,7 @@ package com.jantuomi.tunkki.core.runtime; import com.jantuomi.tunkki.core.parser.datatype.Datatype; import com.jantuomi.tunkki.core.parser.datatype.NadaDatatype; import com.jantuomi.tunkki.core.runtime.builtins.BuiltinManager; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; import java.util.Arrays; import java.util.List; diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinManager.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinManager.java index f139025..a039121 100644 --- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinManager.java +++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/BuiltinManager.java @@ -5,7 +5,8 @@ import com.jantuomi.tunkki.core.runtime.builtins.globals.*; import com.jantuomi.tunkki.core.runtime.builtins.globals.cast.AsBooleanBuiltinFunction; import com.jantuomi.tunkki.core.runtime.builtins.globals.cast.AsIntBuiltinFunction; import com.jantuomi.tunkki.core.runtime.builtins.math.PowerBuiltinFunction; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.IncludeTunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; import java.util.*; @@ -53,7 +54,7 @@ public class BuiltinManager { return getFunctionsFromMathModule(); } else { - throw new TunkkiError(TunkkiError.ExceptionType.IncludeError, -1, name); + throw new IncludeTunkkiError(-1, name); } } diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/BuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/BuiltinFunction.java index 96c9ebe..8cb8c41 100644 --- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/BuiltinFunction.java +++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/BuiltinFunction.java @@ -2,8 +2,7 @@ package com.jantuomi.tunkki.core.runtime.builtins.globals; import com.jantuomi.tunkki.core.parser.datatype.Datatype; import com.jantuomi.tunkki.core.runtime.Function; -import com.jantuomi.tunkki.core.runtime.builtins.BuiltinManager; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; import java.util.List; diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ConcatBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ConcatBuiltinFunction.java index 30becdc..677ed32 100644 --- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ConcatBuiltinFunction.java +++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ConcatBuiltinFunction.java @@ -2,7 +2,7 @@ package com.jantuomi.tunkki.core.runtime.builtins.globals; import com.jantuomi.tunkki.core.parser.datatype.Datatype; import com.jantuomi.tunkki.core.parser.datatype.StringDatatype; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; import java.util.Arrays; import java.util.List; diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ContainsBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ContainsBuiltinFunction.java index ef67921..c6eb589 100644 --- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ContainsBuiltinFunction.java +++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ContainsBuiltinFunction.java @@ -4,7 +4,8 @@ import com.jantuomi.tunkki.core.parser.datatype.BooleanDatatype; import com.jantuomi.tunkki.core.parser.datatype.Datatype; import com.jantuomi.tunkki.core.parser.datatype.ListDatatype; import com.jantuomi.tunkki.core.parser.datatype.StringDatatype; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.FunctionArgumentTunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; import java.util.Arrays; import java.util.List; @@ -20,7 +21,7 @@ public class ContainsBuiltinFunction extends BuiltinFunction { @Override public Datatype evaluate(List<Datatype> params) throws TunkkiError { if (params.size() != 2) { - throw new TunkkiError(TunkkiError.ExceptionType.FunctionArgumentError, -1, getName(), Datatype.toString(params)); + throw new FunctionArgumentTunkkiError(-1, getName(), Datatype.toString(params)); } if (params.get(0).getType() == Datatype.Type.List) { @@ -29,7 +30,7 @@ public class ContainsBuiltinFunction extends BuiltinFunction { else if (params.get(0).getType() == Datatype.Type.String) { return evaluateOnString(params); } - throw new TunkkiError(TunkkiError.ExceptionType.FunctionArgumentError, -1, getName(), Datatype.toString(params)); + throw new FunctionArgumentTunkkiError(-1, getName(), Datatype.toString(params)); } private Datatype evaluateOnList(List<Datatype> params) throws TunkkiError { @@ -46,7 +47,7 @@ public class ContainsBuiltinFunction extends BuiltinFunction { private Datatype evaluateOnString(List<Datatype> params) throws TunkkiError { if (params.get(1).getType() != Datatype.Type.String) { - throw new TunkkiError(TunkkiError.ExceptionType.FunctionArgumentError, -1, getName(), Datatype.toString(params)); + throw new FunctionArgumentTunkkiError(-1, getName(), Datatype.toString(params)); } StringDatatype string = (StringDatatype) params.get(0); diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/EqualsBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/EqualsBuiltinFunction.java index b9a62cb..1d5ca64 100644 --- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/EqualsBuiltinFunction.java +++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/EqualsBuiltinFunction.java @@ -2,7 +2,9 @@ package com.jantuomi.tunkki.core.runtime.builtins.globals; import com.jantuomi.tunkki.core.parser.datatype.BooleanDatatype; import com.jantuomi.tunkki.core.parser.datatype.Datatype; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.FunctionArgumentTunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; +import com.jantuomi.tunkki.exception.types.TypeTunkkiError; import java.util.Arrays; import java.util.List; @@ -18,7 +20,7 @@ public class EqualsBuiltinFunction extends BuiltinFunction { @Override public Datatype evaluate(List<Datatype> params) throws TunkkiError { if (params.size() != 2) { - throw new TunkkiError(TunkkiError.ExceptionType.FunctionArgumentError, -1, getName(), Datatype.toString(params)); + throw new FunctionArgumentTunkkiError(-1, getName(), Datatype.toString(params)); } Datatype lhs = params.get(0); @@ -28,7 +30,7 @@ public class EqualsBuiltinFunction extends BuiltinFunction { if (isEqual != null) { return isEqual; } else { - throw new TunkkiError(TunkkiError.ExceptionType.TypeError, -1, lhs.getType().toString(), rhs.getType().toString()); + throw new TypeTunkkiError(-1, lhs.getType().toString(), rhs.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 2dd388d..a7bf925 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 @@ -3,7 +3,9 @@ package com.jantuomi.tunkki.core.runtime.builtins.globals; 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.TunkkiError; +import com.jantuomi.tunkki.exception.types.FunctionArgumentTunkkiError; +import com.jantuomi.tunkki.exception.types.GeneralTunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; import java.util.Arrays; import java.util.List; @@ -19,15 +21,15 @@ public class GetBuiltinFunction extends BuiltinFunction { @Override public Datatype evaluate(List<Datatype> params) throws TunkkiError { if (params.size() != 2) { - throw new TunkkiError(TunkkiError.ExceptionType.FunctionArgumentError, -1, getName(), params.toString()); + throw new FunctionArgumentTunkkiError(-1, getName(), params.toString()); } if (params.get(0).getType() != Datatype.Type.List) { - throw new TunkkiError(TunkkiError.ExceptionType.FunctionArgumentError, -1, getName(), Datatype.toString(params)); + throw new FunctionArgumentTunkkiError(-1, getName(), Datatype.toString(params)); } if (params.get(1).getType() != Datatype.Type.Integer) { - throw new TunkkiError(TunkkiError.ExceptionType.FunctionArgumentError, -1, getName(), Datatype.toString(params)); + throw new FunctionArgumentTunkkiError(-1, getName(), Datatype.toString(params)); } ListDatatype list = (ListDatatype) params.get(0); @@ -37,7 +39,7 @@ public class GetBuiltinFunction extends BuiltinFunction { return list.getData().get(index.getData()); } catch (Exception ex) { - throw new TunkkiError(TunkkiError.ExceptionType.GeneralError, -1, "List index out of bounds."); + throw new GeneralTunkkiError(-1, "List index out of bounds."); } } 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 6c200e5..96a1a80 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 @@ -6,17 +6,16 @@ import com.jantuomi.tunkki.core.CommandLineArgumentContainer; import com.jantuomi.tunkki.core.parser.datatype.Datatype; import com.jantuomi.tunkki.core.parser.datatype.StringDatatype; import com.jantuomi.tunkki.core.parser.datatype.VoidDatatype; -import com.jantuomi.tunkki.core.runtime.Function; 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.TunkkiError; +import com.jantuomi.tunkki.exception.types.GeneralTunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; import java.util.Arrays; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; -import java.util.stream.Collectors; /** * Created by jan on 28.6.2016. @@ -33,13 +32,12 @@ public class IncludeBuiltinFunction extends BuiltinFunction { if (params.size() == 1 && params.get(0).getType() == Datatype.Type.String) { filename = ((StringDatatype) params.get(0)).getData(); } else { - ExceptionManager.raise(TunkkiError.ExceptionType.GeneralError, -1, "Include argument must be a valid file name string."); - return null; + throw new GeneralTunkkiError(-1, "Include argument must be a valid file name string."); } if (BuiltinManager.getInstance().BUILTIN_MODULES.contains(filename)) { - BuiltinManager.getInstance().getFunctionsFromModule(filename).stream() + BuiltinManager.getInstance().getFunctionsFromModule(filename) .forEach( f -> State.getInstance().addFunctionToScope(f.getName(), f) ); } @@ -54,8 +52,7 @@ public class IncludeBuiltinFunction extends BuiltinFunction { Pattern pattern = Pattern.compile(regex, Pattern.DOTALL); Matcher matcher = pattern.matcher(contents); if (matcher.matches()) { - ExceptionManager.raise(TunkkiError.ExceptionType.GeneralError, -1, "Recursive include detected, aborting."); - return null; + throw new GeneralTunkkiError(-1, "Recursive include detected, aborting."); } Tunkki.getInstance().run(contents); diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/InputBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/InputBuiltinFunction.java index 40ce3ab..c5c8e56 100644 --- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/InputBuiltinFunction.java +++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/InputBuiltinFunction.java @@ -2,7 +2,7 @@ package com.jantuomi.tunkki.core.runtime.builtins.globals; import com.jantuomi.tunkki.core.parser.datatype.Datatype; import com.jantuomi.tunkki.core.parser.datatype.StringDatatype; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; import java.util.Arrays; import java.util.List; diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ListBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ListBuiltinFunction.java index 3743bbd..60d9b50 100644 --- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ListBuiltinFunction.java +++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/ListBuiltinFunction.java @@ -2,7 +2,7 @@ package com.jantuomi.tunkki.core.runtime.builtins.globals; import com.jantuomi.tunkki.core.parser.datatype.Datatype; import com.jantuomi.tunkki.core.parser.datatype.ListDatatype; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; import java.util.Arrays; import java.util.List; diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/OutputBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/OutputBuiltinFunction.java index e3b1e15..aa511ce 100644 --- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/OutputBuiltinFunction.java +++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/OutputBuiltinFunction.java @@ -2,7 +2,7 @@ package com.jantuomi.tunkki.core.runtime.builtins.globals; import com.jantuomi.tunkki.core.parser.datatype.Datatype; import com.jantuomi.tunkki.core.parser.datatype.VoidDatatype; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; import java.util.Arrays; import java.util.List; diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsBooleanBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsBooleanBuiltinFunction.java index ed47b6e..632d25f 100644 --- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsBooleanBuiltinFunction.java +++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsBooleanBuiltinFunction.java @@ -2,7 +2,8 @@ package com.jantuomi.tunkki.core.runtime.builtins.globals.cast; import com.jantuomi.tunkki.core.parser.datatype.*; import com.jantuomi.tunkki.core.runtime.builtins.globals.BuiltinFunction; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.CastTunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; import java.util.Arrays; import java.util.List; @@ -35,7 +36,7 @@ public class AsBooleanBuiltinFunction extends BuiltinFunction { case Boolean: return new BooleanDatatype(((BooleanDatatype) param).getData()); default: - throw new TunkkiError(TunkkiError.ExceptionType.CastError, -1, "Boolean", param.toString()); + throw new CastTunkkiError(-1, "Boolean", param.toString()); } } diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsIntBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsIntBuiltinFunction.java index 55e542d..4bd13a0 100644 --- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsIntBuiltinFunction.java +++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/globals/cast/AsIntBuiltinFunction.java @@ -2,7 +2,8 @@ package com.jantuomi.tunkki.core.runtime.builtins.globals.cast; import com.jantuomi.tunkki.core.parser.datatype.*; import com.jantuomi.tunkki.core.runtime.builtins.globals.BuiltinFunction; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.CastTunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; import java.util.Arrays; import java.util.List; @@ -35,7 +36,7 @@ public class AsIntBuiltinFunction extends BuiltinFunction { i = Integer.parseInt(((StringDatatype) param).getData()); } catch (NumberFormatException ex) { - throw new TunkkiError(TunkkiError.ExceptionType.CastError, -1, "Integer", ((StringDatatype) param).getData()); + throw new CastTunkkiError(-1, "Integer", ((StringDatatype) param).getData()); } return new IntegerDatatype(i); case Integer: @@ -45,7 +46,7 @@ public class AsIntBuiltinFunction extends BuiltinFunction { case Double: return new IntegerDatatype((int) Math.round(((DoubleDatatype) param).getData())); default: - throw new TunkkiError(TunkkiError.ExceptionType.CastError, -1, "Integer", param.toString()); + throw new CastTunkkiError(-1, "Integer", param.toString()); } } diff --git a/src/main/com/jantuomi/tunkki/core/runtime/builtins/math/PowerBuiltinFunction.java b/src/main/com/jantuomi/tunkki/core/runtime/builtins/math/PowerBuiltinFunction.java index 9c4db2b..ffd81f8 100644 --- a/src/main/com/jantuomi/tunkki/core/runtime/builtins/math/PowerBuiltinFunction.java +++ b/src/main/com/jantuomi/tunkki/core/runtime/builtins/math/PowerBuiltinFunction.java @@ -4,7 +4,8 @@ import com.jantuomi.tunkki.core.parser.datatype.Datatype; import com.jantuomi.tunkki.core.parser.datatype.DoubleDatatype; import com.jantuomi.tunkki.core.parser.datatype.IntegerDatatype; import com.jantuomi.tunkki.core.runtime.builtins.globals.BuiltinFunction; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.FunctionArgumentTunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; import java.util.Arrays; import java.util.List; @@ -20,7 +21,7 @@ public class PowerBuiltinFunction extends BuiltinFunction { @Override public Datatype evaluate(List<Datatype> params) throws TunkkiError { if (params.size() != 2) { - throw new TunkkiError(TunkkiError.ExceptionType.FunctionArgumentError, -1, getName(), Datatype.toString(params)); + throw new FunctionArgumentTunkkiError(-1, getName(), Datatype.toString(params)); } Datatype lhs = params.get(0); @@ -34,7 +35,7 @@ public class PowerBuiltinFunction extends BuiltinFunction { return new DoubleDatatype(result); } catch (Exception ex) { - throw new TunkkiError(TunkkiError.ExceptionType.FunctionArgumentError, -1, getName(), Datatype.toString(params)); + throw new FunctionArgumentTunkkiError(-1, getName(), Datatype.toString(params)); } } @@ -46,7 +47,7 @@ public class PowerBuiltinFunction extends BuiltinFunction { number = ((DoubleDatatype) dt).getData(); } else { - throw new TunkkiError(TunkkiError.ExceptionType.FunctionArgumentError, -1, getName(), Datatype.toString(params)); + throw new FunctionArgumentTunkkiError(-1, getName(), Datatype.toString(params)); } return number; } diff --git a/src/main/com/jantuomi/tunkki/exception/ExceptionManager.java b/src/main/com/jantuomi/tunkki/exception/ExceptionManager.java index 9cfdd2e..b26c3b0 100644 --- a/src/main/com/jantuomi/tunkki/exception/ExceptionManager.java +++ b/src/main/com/jantuomi/tunkki/exception/ExceptionManager.java @@ -1,5 +1,7 @@ package com.jantuomi.tunkki.exception; +import com.jantuomi.tunkki.exception.types.TunkkiError; + /** * Created by jan on 10.6.2016. */ @@ -13,9 +15,4 @@ public class ExceptionManager { public static ExceptionManager getInstance() { return instance; } - - public static void raise(TunkkiError.ExceptionType ex, int line, String... args) throws TunkkiError { - TunkkiError e = new TunkkiError(ex, line, args); - throw e; - } } diff --git a/src/main/com/jantuomi/tunkki/exception/TunkkiError.java b/src/main/com/jantuomi/tunkki/exception/TunkkiError.java deleted file mode 100644 index b5a36a7..0000000 --- a/src/main/com/jantuomi/tunkki/exception/TunkkiError.java +++ /dev/null @@ -1,81 +0,0 @@ -package com.jantuomi.tunkki.exception; - - -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -/** - * Created by jan on 12.6.2016. - */ -public class TunkkiError extends Exception { - - public enum ExceptionType { - IllegalTokenError, - SyntaxError, - TypeError, - FunctionArgumentError, - ExpectedDifferentTokenError, - UndeclaredSymbolError, - IncludeError, - GeneralError, - CastError, - DivisionByZeroError, - NadaError - } - - private static Map<ExceptionType, String> errorTexts = new HashMap<>(); - - static { - errorTexts.put(ExceptionType.IllegalTokenError, "Unknown or illegal token %s found."); - errorTexts.put(ExceptionType.SyntaxError, "Unexpected %s."); - errorTexts.put(ExceptionType.TypeError, "Incompatible types %s and %s."); - errorTexts.put(ExceptionType.ExpectedDifferentTokenError, "Token '%s' expects a different token stack."); - errorTexts.put(ExceptionType.FunctionArgumentError, "The parameter list given to function %s is either of wrong length or the parameters are of wrong type. Actual: %s"); - errorTexts.put(ExceptionType.UndeclaredSymbolError, "No symbol %s defined in the current scope."); - errorTexts.put(ExceptionType.IncludeError, "File or module %s could not be included."); - errorTexts.put(ExceptionType.GeneralError, "%s"); - errorTexts.put(ExceptionType.NadaError, "Can't do operation with a nada value."); - errorTexts.put(ExceptionType.CastError, "Illegal cast to type %s from value %s."); - errorTexts.put(ExceptionType.DivisionByZeroError, "Division by zero."); - } - - private ExceptionType exceptionType; - private String completeMessage; - private List<String> arguments; - - public TunkkiError(ExceptionType exceptionType, int line, String... args) { - super(exceptionType.toString(), null, false, false); - this.exceptionType = exceptionType; - this.arguments = Arrays.asList(args); - this.completeMessage = formatMessage(exceptionType.toString() + ": " + what(exceptionType), line, args); - } - - private static String formatMessage(String message, int line, String... parameters) { - - message = String.format(message, parameters); - if (line == -1) { - return "\n" + message; - } else { - return String.format("\nLine #%d: ", line) + message; - } - } - - public static String what(ExceptionType type) { - return errorTexts.get(type); - } - - @Override - public void printStackTrace() { - System.err.println(completeMessage); - } - - public ExceptionType getType() { - return exceptionType; - } - - public List<String> getArguments() { - return this.arguments; - } -} diff --git a/src/main/com/jantuomi/tunkki/exception/types/CastTunkkiError.java b/src/main/com/jantuomi/tunkki/exception/types/CastTunkkiError.java new file mode 100644 index 0000000..f5312d8 --- /dev/null +++ b/src/main/com/jantuomi/tunkki/exception/types/CastTunkkiError.java @@ -0,0 +1,20 @@ +package com.jantuomi.tunkki.exception.types; + +/** + * Created by jan on 2.8.2016. + */ +public class CastTunkkiError extends TunkkiError { + public CastTunkkiError(int line, String... args) { + super(line, args); + } + + @Override + public String what() { + return "Illegal cast to type %s from value %s."; + } + + @Override + ExceptionType getType() { + return ExceptionType.CastError; + } +} diff --git a/src/main/com/jantuomi/tunkki/exception/types/DivisionByZeroTunkkiError.java b/src/main/com/jantuomi/tunkki/exception/types/DivisionByZeroTunkkiError.java new file mode 100644 index 0000000..0fb0767 --- /dev/null +++ b/src/main/com/jantuomi/tunkki/exception/types/DivisionByZeroTunkkiError.java @@ -0,0 +1,20 @@ +package com.jantuomi.tunkki.exception.types; + +/** + * Created by jan on 2.8.2016. + */ +public class DivisionByZeroTunkkiError extends TunkkiError { + public DivisionByZeroTunkkiError(int line, String... args) { + super(line, args); + } + + @Override + public String what() { + return "Division by zero."; + } + + @Override + public ExceptionType getType() { + return ExceptionType.DivisionByZeroError; + } +} diff --git a/src/main/com/jantuomi/tunkki/exception/types/ExpectedDifferentTokenTunkkiError.java b/src/main/com/jantuomi/tunkki/exception/types/ExpectedDifferentTokenTunkkiError.java new file mode 100644 index 0000000..c56a011 --- /dev/null +++ b/src/main/com/jantuomi/tunkki/exception/types/ExpectedDifferentTokenTunkkiError.java @@ -0,0 +1,20 @@ +package com.jantuomi.tunkki.exception.types; + +/** + * Created by jan on 2.8.2016. + */ +public class ExpectedDifferentTokenTunkkiError extends TunkkiError { + public ExpectedDifferentTokenTunkkiError(int line, String... args) { + super(line, args); + } + + @Override + public String what() { + return "Token '%s' expects a different token stack."; + } + + @Override + ExceptionType getType() { + return ExceptionType.ExpectedDifferentTokenError; + } +} diff --git a/src/main/com/jantuomi/tunkki/exception/types/FunctionArgumentTunkkiError.java b/src/main/com/jantuomi/tunkki/exception/types/FunctionArgumentTunkkiError.java new file mode 100644 index 0000000..1b61c86 --- /dev/null +++ b/src/main/com/jantuomi/tunkki/exception/types/FunctionArgumentTunkkiError.java @@ -0,0 +1,20 @@ +package com.jantuomi.tunkki.exception.types; + +/** + * Created by jan on 2.8.2016. + */ +public class FunctionArgumentTunkkiError extends TunkkiError { + public FunctionArgumentTunkkiError(int line, String... args) { + super(line, args); + } + + @Override + public String what() { + return "The parameter list given to function %s is either of wrong length or the parameters are of wrong type. Actual: %s"; + } + + @Override + ExceptionType getType() { + return ExceptionType.FunctionArgumentError; + } +} diff --git a/src/main/com/jantuomi/tunkki/exception/types/GeneralTunkkiError.java b/src/main/com/jantuomi/tunkki/exception/types/GeneralTunkkiError.java new file mode 100644 index 0000000..b49c404 --- /dev/null +++ b/src/main/com/jantuomi/tunkki/exception/types/GeneralTunkkiError.java @@ -0,0 +1,20 @@ +package com.jantuomi.tunkki.exception.types; + +/** + * Created by jan on 2.8.2016. + */ +public class GeneralTunkkiError extends TunkkiError { + public GeneralTunkkiError(int line, String... args) { + super(line, args); + } + + @Override + public String what() { + return "%s"; + } + + @Override + ExceptionType getType() { + return ExceptionType.GeneralError; + } +} diff --git a/src/main/com/jantuomi/tunkki/exception/types/IllegalTokenTunkkiError.java b/src/main/com/jantuomi/tunkki/exception/types/IllegalTokenTunkkiError.java new file mode 100644 index 0000000..dc19911 --- /dev/null +++ b/src/main/com/jantuomi/tunkki/exception/types/IllegalTokenTunkkiError.java @@ -0,0 +1,20 @@ +package com.jantuomi.tunkki.exception.types; + +/** + * Created by jan on 2.8.2016. + */ +public class IllegalTokenTunkkiError extends TunkkiError { + public IllegalTokenTunkkiError(int line, String... args) { + super(line, args); + } + + @Override + public String what() { + return "Unknown or illegal token %s found."; + } + + @Override + ExceptionType getType() { + return ExceptionType.IllegalTokenError; + } +} diff --git a/src/main/com/jantuomi/tunkki/exception/types/IncludeTunkkiError.java b/src/main/com/jantuomi/tunkki/exception/types/IncludeTunkkiError.java new file mode 100644 index 0000000..db95110 --- /dev/null +++ b/src/main/com/jantuomi/tunkki/exception/types/IncludeTunkkiError.java @@ -0,0 +1,20 @@ +package com.jantuomi.tunkki.exception.types; + +/** + * Created by jan on 2.8.2016. + */ +public class IncludeTunkkiError extends TunkkiError { + public IncludeTunkkiError(int line, String... args) { + super(line, args); + } + + @Override + public String what() { + return "File or module %s could not be included."; + } + + @Override + ExceptionType getType() { + return ExceptionType.IncludeError; + } +} diff --git a/src/main/com/jantuomi/tunkki/exception/types/NadaTunkkiError.java b/src/main/com/jantuomi/tunkki/exception/types/NadaTunkkiError.java new file mode 100644 index 0000000..2edc13b --- /dev/null +++ b/src/main/com/jantuomi/tunkki/exception/types/NadaTunkkiError.java @@ -0,0 +1,20 @@ +package com.jantuomi.tunkki.exception.types; + +/** + * Created by jan on 2.8.2016. + */ +public class NadaTunkkiError extends TunkkiError { + public NadaTunkkiError(int line, String... args) { + super(line, args); + } + + @Override + public String what() { + return "Can't do operation with a nada value."; + } + + @Override + public ExceptionType getType() { + return ExceptionType.NadaError; + } +} diff --git a/src/main/com/jantuomi/tunkki/exception/types/SyntaxTunkkiError.java b/src/main/com/jantuomi/tunkki/exception/types/SyntaxTunkkiError.java new file mode 100644 index 0000000..08d230b --- /dev/null +++ b/src/main/com/jantuomi/tunkki/exception/types/SyntaxTunkkiError.java @@ -0,0 +1,20 @@ +package com.jantuomi.tunkki.exception.types; + +/** + * Created by jan on 2.8.2016. + */ +public class SyntaxTunkkiError extends TunkkiError { + public SyntaxTunkkiError(int line, String... args) { + super(line, args); + } + + @Override + public String what() { + return "Unexpected %s."; + } + + @Override + ExceptionType getType() { + return ExceptionType.SyntaxError; + } +} diff --git a/src/main/com/jantuomi/tunkki/exception/types/TunkkiError.java b/src/main/com/jantuomi/tunkki/exception/types/TunkkiError.java new file mode 100644 index 0000000..0124d37 --- /dev/null +++ b/src/main/com/jantuomi/tunkki/exception/types/TunkkiError.java @@ -0,0 +1,72 @@ +package com.jantuomi.tunkki.exception.types; + + +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by jan on 12.6.2016. + */ +abstract public class TunkkiError extends Exception { + + public enum ExceptionType { + IllegalTokenError, + SyntaxError, + TypeError, + FunctionArgumentError, + ExpectedDifferentTokenError, + UndeclaredSymbolError, + IncludeError, + GeneralError, + CastError, + DivisionByZeroError, + NadaError + } + + private static Map<ExceptionType, String> errorTexts = new HashMap<>(); + + + private List<String> arguments; + private int line; + private String[] args; + + public TunkkiError(int line, String... args) { + super(); + this.arguments = Arrays.asList(args); + this.line = line; + this.args = args; + } + + private static String formatMessage(String message, int line, String... parameters) { + + message = String.format(message, parameters); + if (line == -1) { + return "\n" + message; + } else { + return String.format("\nLine #%d: ", line) + message; + } + } + + abstract public String what(); + + abstract ExceptionType getType(); + + public void setLine(int line) { + this.line = line; + } + + protected String completeMessage() { + return formatMessage(getType().toString() + ": " + what(), line, args); + } + + @Override + public void printStackTrace() { + System.err.println(completeMessage()); + } + + public List<String> getArguments() { + return this.arguments; + } +} diff --git a/src/main/com/jantuomi/tunkki/exception/types/TypeTunkkiError.java b/src/main/com/jantuomi/tunkki/exception/types/TypeTunkkiError.java new file mode 100644 index 0000000..a90483c --- /dev/null +++ b/src/main/com/jantuomi/tunkki/exception/types/TypeTunkkiError.java @@ -0,0 +1,20 @@ +package com.jantuomi.tunkki.exception.types; + +/** + * Created by jan on 2.8.2016. + */ +public class TypeTunkkiError extends TunkkiError { + public TypeTunkkiError(int line, String... args) { + super(line, args); + } + + @Override + public String what() { + return "Incompatible types %s and %s."; + } + + @Override + ExceptionType getType() { + return ExceptionType.TypeError; + } +} diff --git a/src/main/com/jantuomi/tunkki/exception/types/UndeclaredSymbolTunkkiError.java b/src/main/com/jantuomi/tunkki/exception/types/UndeclaredSymbolTunkkiError.java new file mode 100644 index 0000000..5b50ca8 --- /dev/null +++ b/src/main/com/jantuomi/tunkki/exception/types/UndeclaredSymbolTunkkiError.java @@ -0,0 +1,20 @@ +package com.jantuomi.tunkki.exception.types; + +/** + * Created by jan on 2.8.2016. + */ +public class UndeclaredSymbolTunkkiError extends TunkkiError { + public UndeclaredSymbolTunkkiError(int line, String... args) { + super(line, args); + } + + @Override + public String what() { + return "No symbol %s defined in the current scope."; + } + + @Override + ExceptionType getType() { + return ExceptionType.UndeclaredSymbolError; + } +} diff --git a/src/main/com/jantuomi/tunkki/repl/Repl.java b/src/main/com/jantuomi/tunkki/repl/Repl.java index 3b63b6e..aeb620b 100644 --- a/src/main/com/jantuomi/tunkki/repl/Repl.java +++ b/src/main/com/jantuomi/tunkki/repl/Repl.java @@ -1,8 +1,7 @@ package com.jantuomi.tunkki.repl; import com.jantuomi.tunkki.Tunkki; -import com.jantuomi.tunkki.core.parser.datatype.IntegerDatatype; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; import jline.console.*; import java.io.IOException; diff --git a/src/test/com/jantuomi/tunkki/MainTest.java b/src/test/com/jantuomi/tunkki/MainTest.java index 5d04000..a642fd5 100644 --- a/src/test/com/jantuomi/tunkki/MainTest.java +++ b/src/test/com/jantuomi/tunkki/MainTest.java @@ -1,6 +1,6 @@ package com.jantuomi.tunkki; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; import org.junit.After; import org.junit.Before; import org.junit.Test; diff --git a/src/test/com/jantuomi/tunkki/core/parser/tokenizer/TokenizerTest.java b/src/test/com/jantuomi/tunkki/core/parser/tokenizer/TokenizerTest.java index 1ce55b2..47fbd02 100644 --- a/src/test/com/jantuomi/tunkki/core/parser/tokenizer/TokenizerTest.java +++ b/src/test/com/jantuomi/tunkki/core/parser/tokenizer/TokenizerTest.java @@ -2,7 +2,7 @@ package com.jantuomi.tunkki.core.parser.tokenizer; import com.jantuomi.tunkki.core.parser.tokenizer.token.Token; import com.jantuomi.tunkki.core.parser.tokenizer.token.types.IntegerLiteralToken; -import com.jantuomi.tunkki.exception.TunkkiError; +import com.jantuomi.tunkki.exception.types.TunkkiError; import org.junit.Test; import java.util.List; |
