From c3909ca1e05f97dc139b6d72bbb8c4c1472fc5f6 Mon Sep 17 00:00:00 2001 From: Astrash Date: Fri, 27 Oct 2023 14:21:50 +1100 Subject: [PATCH] Make error handler only handle compilation exceptions --- .../terra/addons/terrascript/v2/ErrorHandler.java | 10 ++++++---- .../semanticanalysis/InvalidArgumentsException.java | 11 +++++++++++ .../semanticanalysis/InvalidCalleeException.java | 11 +++++++++++ .../terrascript/v2/semanticanalysis/TypeChecker.java | 5 +++-- 4 files changed, 31 insertions(+), 6 deletions(-) create mode 100644 common/addons/structure-terrascript-v2/src/main/java/com/dfsek/terra/addons/terrascript/v2/exception/semanticanalysis/InvalidArgumentsException.java create mode 100644 common/addons/structure-terrascript-v2/src/main/java/com/dfsek/terra/addons/terrascript/v2/exception/semanticanalysis/InvalidCalleeException.java diff --git a/common/addons/structure-terrascript-v2/src/main/java/com/dfsek/terra/addons/terrascript/v2/ErrorHandler.java b/common/addons/structure-terrascript-v2/src/main/java/com/dfsek/terra/addons/terrascript/v2/ErrorHandler.java index 4d16c2eae..7f0d2011b 100644 --- a/common/addons/structure-terrascript-v2/src/main/java/com/dfsek/terra/addons/terrascript/v2/ErrorHandler.java +++ b/common/addons/structure-terrascript-v2/src/main/java/com/dfsek/terra/addons/terrascript/v2/ErrorHandler.java @@ -1,19 +1,21 @@ package com.dfsek.terra.addons.terrascript.v2; +import com.dfsek.terra.addons.terrascript.v2.exception.CompilationException; + import java.util.ArrayList; import java.util.List; public class ErrorHandler { - private final List exceptions = new ArrayList<>(); + private final List exceptions = new ArrayList<>(); - public void add(Exception e) { + public void add(CompilationException e) { exceptions.add(e); } - public void throwAny() throws Exception { - for(Exception e : exceptions) { + public void throwAny() throws CompilationException { + for(CompilationException e : exceptions) { throw e; } } diff --git a/common/addons/structure-terrascript-v2/src/main/java/com/dfsek/terra/addons/terrascript/v2/exception/semanticanalysis/InvalidArgumentsException.java b/common/addons/structure-terrascript-v2/src/main/java/com/dfsek/terra/addons/terrascript/v2/exception/semanticanalysis/InvalidArgumentsException.java new file mode 100644 index 000000000..823d82cae --- /dev/null +++ b/common/addons/structure-terrascript-v2/src/main/java/com/dfsek/terra/addons/terrascript/v2/exception/semanticanalysis/InvalidArgumentsException.java @@ -0,0 +1,11 @@ +package com.dfsek.terra.addons.terrascript.v2.exception.semanticanalysis; + +import com.dfsek.terra.addons.terrascript.v2.exception.CompilationException; +import com.dfsek.terra.addons.terrascript.v2.lexer.SourcePosition; + + +public class InvalidArgumentsException extends CompilationException { + public InvalidArgumentsException(String message, SourcePosition position) { + super(message, position); + } +} diff --git a/common/addons/structure-terrascript-v2/src/main/java/com/dfsek/terra/addons/terrascript/v2/exception/semanticanalysis/InvalidCalleeException.java b/common/addons/structure-terrascript-v2/src/main/java/com/dfsek/terra/addons/terrascript/v2/exception/semanticanalysis/InvalidCalleeException.java new file mode 100644 index 000000000..d97809e4e --- /dev/null +++ b/common/addons/structure-terrascript-v2/src/main/java/com/dfsek/terra/addons/terrascript/v2/exception/semanticanalysis/InvalidCalleeException.java @@ -0,0 +1,11 @@ +package com.dfsek.terra.addons.terrascript.v2.exception.semanticanalysis; + +import com.dfsek.terra.addons.terrascript.v2.exception.CompilationException; +import com.dfsek.terra.addons.terrascript.v2.lexer.SourcePosition; + + +public class InvalidCalleeException extends CompilationException { + public InvalidCalleeException(String message, SourcePosition position) { + super(message, position); + } +} diff --git a/common/addons/structure-terrascript-v2/src/main/java/com/dfsek/terra/addons/terrascript/v2/semanticanalysis/TypeChecker.java b/common/addons/structure-terrascript-v2/src/main/java/com/dfsek/terra/addons/terrascript/v2/semanticanalysis/TypeChecker.java index 8ba81ff27..17a894618 100644 --- a/common/addons/structure-terrascript-v2/src/main/java/com/dfsek/terra/addons/terrascript/v2/semanticanalysis/TypeChecker.java +++ b/common/addons/structure-terrascript-v2/src/main/java/com/dfsek/terra/addons/terrascript/v2/semanticanalysis/TypeChecker.java @@ -17,6 +17,7 @@ import com.dfsek.terra.addons.terrascript.v2.ast.Expr.Void; import com.dfsek.terra.addons.terrascript.v2.ast.Stmt; import com.dfsek.terra.addons.terrascript.v2.ast.TypedExpr; import com.dfsek.terra.addons.terrascript.v2.ast.TypedStmt; +import com.dfsek.terra.addons.terrascript.v2.exception.semanticanalysis.InvalidArgumentsException; import com.dfsek.terra.addons.terrascript.v2.exception.semanticanalysis.InvalidCalleeException; import com.dfsek.terra.addons.terrascript.v2.exception.semanticanalysis.InvalidFunctionDeclarationException; import com.dfsek.terra.addons.terrascript.v2.exception.semanticanalysis.InvalidTypeException; @@ -62,7 +63,7 @@ public class TypeChecker implements Visitor, Stmt.Visitor if(leftType.typeOf(Type.STRING) || rightType.typeOf(Type.STRING)) { yield Type.STRING; } - errorHandler.add(new RuntimeException("Addition operands must be either both of type '" + Type.NUMBER + "', or one of type '" + Type.STRING + "'")); + errorHandler.add(new InvalidTypeException("Addition operands must be either both of type '" + Type.NUMBER + "', or one of type '" + Type.STRING + "'", expr.position)); yield Type.VOID; } case SUBTRACT, MULTIPLY, DIVIDE, MODULO -> { @@ -114,7 +115,7 @@ public class TypeChecker implements Visitor, Stmt.Visitor List parameters = functionType.getParameters(); if(arguments.size() != parameters.size()) - errorHandler.add(new ParseException( + errorHandler.add(new InvalidArgumentsException( "Provided " + arguments.size() + " arguments to function call, expected " + parameters.size() + " arguments", expr.position)); for(int i = 0; i < parameters.size(); i++) {