From 0dfa5973c998e18bc62ee5d908711a47df15b896 Mon Sep 17 00:00:00 2001 From: "Flavio S. Glock" Date: Fri, 18 Oct 2024 15:47:11 +0200 Subject: [PATCH] improve error messages --- src/main/java/org/perlonjava/codegen/EmitVariable.java | 2 +- .../java/org/perlonjava/codegen/EmitterMethodCreator.java | 5 +++-- src/main/java/org/perlonjava/perlmodule/Exporter.java | 8 ++++---- src/main/java/org/perlonjava/perlmodule/Parent.java | 2 +- .../java/org/perlonjava/runtime/FileTestOperator.java | 2 +- src/main/java/org/perlonjava/runtime/NameNormalizer.java | 2 +- .../java/org/perlonjava/runtime/RuntimeVecLvalue.java | 2 +- src/main/java/org/perlonjava/runtime/ScalarUtils.java | 4 ++-- src/main/java/org/perlonjava/runtime/Vec.java | 4 ++-- 9 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/main/java/org/perlonjava/codegen/EmitVariable.java b/src/main/java/org/perlonjava/codegen/EmitVariable.java index 985321b8..3176bae4 100644 --- a/src/main/java/org/perlonjava/codegen/EmitVariable.java +++ b/src/main/java/org/perlonjava/codegen/EmitVariable.java @@ -192,7 +192,7 @@ static void handleAssignOperator(EmitterVisitor emitterVisitor, BinaryOperatorNo mv.visitMethodInsn(Opcodes.INVOKEINTERFACE, "org/perlonjava/runtime/RuntimeDataProvider", "setFromList", "(Lorg/perlonjava/runtime/RuntimeList;)Lorg/perlonjava/runtime/RuntimeArray;", true); break; default: - throw new IllegalArgumentException("Unsupported assignment context: " + lvalueContext); + throw new PerlCompilerException("Unsupported assignment context: " + lvalueContext); } if (emitterVisitor.ctx.contextType == RuntimeContextType.VOID) { // Remove the value from the stack diff --git a/src/main/java/org/perlonjava/codegen/EmitterMethodCreator.java b/src/main/java/org/perlonjava/codegen/EmitterMethodCreator.java index 9556d6fc..81ae540a 100644 --- a/src/main/java/org/perlonjava/codegen/EmitterMethodCreator.java +++ b/src/main/java/org/perlonjava/codegen/EmitterMethodCreator.java @@ -3,6 +3,7 @@ import org.objectweb.asm.*; import org.objectweb.asm.util.TraceClassVisitor; import org.perlonjava.astnode.Node; +import org.perlonjava.runtime.PerlCompilerException; import org.perlonjava.runtime.RuntimeContextType; import java.io.PrintWriter; @@ -36,7 +37,7 @@ public static String generateClassName() { public static String getVariableDescriptor(String varName) { // Ensure the variable name is not empty if (varName == null || varName.isEmpty()) { - throw new IllegalArgumentException("Variable name cannot be null or empty"); + throw new PerlCompilerException("Variable name cannot be null or empty"); } // Extract the first character of the variable name @@ -63,7 +64,7 @@ public static String getVariableDescriptor(String varName) { public static String getVariableClassName(String varName) { // Ensure the variable name is not empty if (varName == null || varName.isEmpty()) { - throw new IllegalArgumentException("Variable name cannot be null or empty"); + throw new PerlCompilerException("Variable name cannot be null or empty"); } // Extract the first character of the variable name diff --git a/src/main/java/org/perlonjava/perlmodule/Exporter.java b/src/main/java/org/perlonjava/perlmodule/Exporter.java index 80990abb..809c1345 100644 --- a/src/main/java/org/perlonjava/perlmodule/Exporter.java +++ b/src/main/java/org/perlonjava/perlmodule/Exporter.java @@ -33,7 +33,7 @@ public static void initialize() { public static RuntimeList importSymbols(RuntimeArray args, int ctx) { if (args.size() < 1) { - throw new IllegalArgumentException("Not enough arguments for import"); + throw new PerlCompilerException("Not enough arguments for import"); } // System.out.println("importSymbols: " + args); @@ -65,7 +65,7 @@ public static RuntimeList importSymbols(RuntimeArray args, int ctx) { if (tagSymbols != null) { tagArray.elements.addAll(tagSymbols.elements); } else { - throw new IllegalArgumentException("Unknown export tag: " + tagName); + throw new PerlCompilerException("Unknown export tag: " + tagName); } } else { tagArray.elements.add(symbolObj); @@ -86,10 +86,10 @@ public static RuntimeList importSymbols(RuntimeArray args, int ctx) { if (symbolRef.type == RuntimeScalarType.CODE) { getGlobalCodeRef(caller + "::" + symbolString).set(symbolRef); } else { - throw new IllegalArgumentException("Subroutine " + symbolString + " not found in package " + packageName); + throw new PerlCompilerException("Subroutine " + symbolString + " not found in package " + packageName); } } else { - throw new IllegalArgumentException("Subroutine " + symbolString + " not allowed for export in package " + packageName); + throw new PerlCompilerException("Subroutine " + symbolString + " not allowed for export in package " + packageName); } } diff --git a/src/main/java/org/perlonjava/perlmodule/Parent.java b/src/main/java/org/perlonjava/perlmodule/Parent.java index e2ebee95..ca46c049 100644 --- a/src/main/java/org/perlonjava/perlmodule/Parent.java +++ b/src/main/java/org/perlonjava/perlmodule/Parent.java @@ -31,7 +31,7 @@ public static void initialize() { public static RuntimeList importParent(RuntimeArray args, int ctx) { if (args.size() < 1) { - throw new IllegalArgumentException("Not enough arguments for parent::import"); + throw new PerlCompilerException("Not enough arguments for parent::import"); } RuntimeScalar packageScalar = args.shift(); diff --git a/src/main/java/org/perlonjava/runtime/FileTestOperator.java b/src/main/java/org/perlonjava/runtime/FileTestOperator.java index a9debcac..a795fbe4 100644 --- a/src/main/java/org/perlonjava/runtime/FileTestOperator.java +++ b/src/main/java/org/perlonjava/runtime/FileTestOperator.java @@ -183,7 +183,7 @@ private static RuntimeScalar getFileTimeDifference(Path path, String operator) t fileTime = ((FileTime) Files.getAttribute(path, "creationTime", LinkOption.NOFOLLOW_LINKS)).toMillis(); break; default: - throw new IllegalArgumentException("Invalid time operator: " + operator); + throw new PerlCompilerException("Invalid time operator: " + operator); } double daysDifference = (currentTime - fileTime) / (1000.0 * 60 * 60 * 24); diff --git a/src/main/java/org/perlonjava/runtime/NameNormalizer.java b/src/main/java/org/perlonjava/runtime/NameNormalizer.java index 1d0d949a..c0ce8682 100644 --- a/src/main/java/org/perlonjava/runtime/NameNormalizer.java +++ b/src/main/java/org/perlonjava/runtime/NameNormalizer.java @@ -83,7 +83,7 @@ public static String normalizeVariableName(String variable, String defaultPackag public static String moduleToFilename(String moduleName) { if (moduleName == null || moduleName.isEmpty()) { - throw new IllegalArgumentException("Module name cannot be null or empty"); + throw new PerlCompilerException("Module name cannot be null or empty"); } // Replace '::' with '/' and append '.pm' diff --git a/src/main/java/org/perlonjava/runtime/RuntimeVecLvalue.java b/src/main/java/org/perlonjava/runtime/RuntimeVecLvalue.java index 8c1e6c78..10084095 100644 --- a/src/main/java/org/perlonjava/runtime/RuntimeVecLvalue.java +++ b/src/main/java/org/perlonjava/runtime/RuntimeVecLvalue.java @@ -63,7 +63,7 @@ public RuntimeScalar set(RuntimeScalar value) { try { // Use Vec.set to update the parent string Vec.set(args, new RuntimeScalar(newValue)); - } catch (IllegalArgumentException e) { + } catch (PerlCompilerException e) { throw new RuntimeException("Invalid vec operation: " + e.getMessage()); } diff --git a/src/main/java/org/perlonjava/runtime/ScalarUtils.java b/src/main/java/org/perlonjava/runtime/ScalarUtils.java index fcdf169d..ed03b3ff 100644 --- a/src/main/java/org/perlonjava/runtime/ScalarUtils.java +++ b/src/main/java/org/perlonjava/runtime/ScalarUtils.java @@ -30,11 +30,11 @@ public class ScalarUtils { * * @param str The input string to be incremented * @return The incremented string - * @throws IllegalArgumentException if the input string is null or empty + * @throws PerlCompilerException if the input string is null or empty */ public static String incrementPlainString(String str) { if (str == null || str.isEmpty()) { - return str; // Consider throwing an IllegalArgumentException instead + return str; // Consider throwing an PerlCompilerException instead } char lastChar = str.charAt(str.length() - 1); diff --git a/src/main/java/org/perlonjava/runtime/Vec.java b/src/main/java/org/perlonjava/runtime/Vec.java index 6335be59..4ec5497c 100644 --- a/src/main/java/org/perlonjava/runtime/Vec.java +++ b/src/main/java/org/perlonjava/runtime/Vec.java @@ -4,7 +4,7 @@ import java.nio.ByteOrder; public class Vec { - public static RuntimeScalar vec(RuntimeList args) throws IllegalArgumentException { + public static RuntimeScalar vec(RuntimeList args) throws PerlCompilerException { RuntimeScalar strScalar = (RuntimeScalar) args.elements.get(0); String str = strScalar.toString(); int offset = ((RuntimeScalar) args.elements.get(1)).getInt(); @@ -52,7 +52,7 @@ public static RuntimeScalar vec(RuntimeList args) throws IllegalArgumentExceptio return new RuntimeVecLvalue(strScalar, offset, bits, value); } - public static RuntimeScalar set(RuntimeList args, RuntimeScalar value) throws IllegalArgumentException { + public static RuntimeScalar set(RuntimeList args, RuntimeScalar value) throws PerlCompilerException { String str = args.elements.get(0).toString(); int offset = ((RuntimeScalar) args.elements.get(1)).getInt(); int bits = ((RuntimeScalar) args.elements.get(2)).getInt();