From 1c20ed2a1cbc77633c1aa21efe725da583f436a5 Mon Sep 17 00:00:00 2001 From: Mads Risager Date: Wed, 17 May 2023 10:08:01 +0200 Subject: [PATCH] Add mod and div error message --- src/main/interpreter/Visitor.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/main/interpreter/Visitor.java b/src/main/interpreter/Visitor.java index 35325fc..cfe4eea 100644 --- a/src/main/interpreter/Visitor.java +++ b/src/main/interpreter/Visitor.java @@ -424,7 +424,7 @@ public MSType visitFuncCall(MineScriptParser.FuncCallContext ctx) { } if (actualParams.size() != 1 || !(actualParams.get(0) instanceof MSBool b)) { - throw new RuntimeException(getFuncCallErrorMessage(id, new int[]{1}, "bool", actualParams)); + throw new RuntimeException(getFuncCallErrorMessage(id, new int[]{0, 1}, "bool", actualParams)); } shouldBreak = b.getValue(); @@ -689,8 +689,18 @@ private MSNumber calculateArithmeticExpression(MSNumber left, MSNumber right, St case "+" -> leftBig.add(rightBig); case "-" -> leftBig.subtract(rightBig); case "*" -> leftBig.multiply(rightBig); - case "/" -> leftBig.divide(rightBig); - case "%" -> leftBig.mod(rightBig); + case "/" -> { + if (rightBig.equals(BigInteger.ZERO)) { + throw new RuntimeException("Cannot divide by 0"); + } + yield leftBig.divide(rightBig); + } + case "%" -> { + if (rightBig.compareTo(BigInteger.ZERO) <= 0) { + throw new RuntimeException("Modulus must be positive"); + } + yield leftBig.mod(rightBig); + } case "^" -> leftBig.pow(rightBig.intValue()); default -> throw new RuntimeException("Unknown operator: " + operator); };