From 025cee42eaf5f8b1c409e1a3a8fe3df8dac8d262 Mon Sep 17 00:00:00 2001 From: Elias Haugsbakk Date: Mon, 21 Sep 2026 15:38:24 +0200 Subject: refactor exception handling to differentiate internal exceptions from compilation failer --- .../kompilator/IRGeneration/IRGenerationException.java | 16 ++++++++-------- .../kompilator/IRGeneration/IRGenerator.java | 16 ++++++++-------- 2 files changed, 16 insertions(+), 16 deletions(-) (limited to 'src/main/java/no/eliashaugsbakk/kompilator/IRGeneration') diff --git a/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGenerationException.java b/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGenerationException.java index 4fef546..0df2ef2 100644 --- a/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGenerationException.java +++ b/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGenerationException.java @@ -1,15 +1,15 @@ package no.eliashaugsbakk.kompilator.IRGeneration; +import no.eliashaugsbakk.kompilator.CompilationException; import no.eliashaugsbakk.kompilator.tokenization.Position; -public class IRGenerationException extends RuntimeException { +public class IRGenerationException extends CompilationException { public IRGenerationException(Position position, String message) { - String pos; - if (position == null) { - pos = "ukjent posisjon"; - } else { - pos = position.line() + ":" + position.column(); - } - super(pos + ", " + message); + super(format(position, message)); + } + + private static String format(Position position, String message) { + String pos = position == null ? "ukjent posisjon" : position.line() + ":" + position.column(); + return pos + ", " + message; } } diff --git a/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGenerator.java b/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGenerator.java index 04e8564..ec2733e 100644 --- a/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGenerator.java +++ b/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGenerator.java @@ -28,7 +28,7 @@ public class IRGenerator { this.ast = ast; } - public List generate() { + public List generate() throws IRGenerationException { Program program = (Program) ast.root(); for (Statement stmt : program.statements) { @@ -42,7 +42,7 @@ public class IRGenerator { return ir; } - private void generateStatement(Statement stmt) { + private void generateStatement(Statement stmt) throws IRGenerationException { if (stmt instanceof ExpressionStatement exprStmt) { generateExpression(exprStmt.expression); } else if (stmt instanceof Assignment assignment) { @@ -52,7 +52,7 @@ public class IRGenerator { } } - private void generateAssignment(Assignment assignment) { + private void generateAssignment(Assignment assignment) throws IRGenerationException { String value; if (assignment.expression instanceof StringLiteral stringLiteral) { value = stringLiteral.value; @@ -62,7 +62,7 @@ public class IRGenerator { ir.add(new Assign(assignment.identifier, value)); } - private void generateIdentifierDecl(IdentifierDeclaration identifierDecl) { + private void generateIdentifierDecl(IdentifierDeclaration identifierDecl) throws IRGenerationException { String value; if (identifierDecl.initializer instanceof StringLiteral stringLiteral) { value = stringLiteral.value; @@ -73,7 +73,7 @@ public class IRGenerator { value)); } - private void generateExpression(Expression expr) { + private void generateExpression(Expression expr) throws IRGenerationException { if (expr instanceof FunctionCall call) { generateFunctionCall(call); } else { @@ -82,10 +82,10 @@ public class IRGenerator { } - private void generateFunctionCall(FunctionCall fnCall) { + private void generateFunctionCall(FunctionCall fnCall) throws IRGenerationException { List arguments = new ArrayList<>(); - fnCall.arguments.forEach(arg -> { + for (Expression arg : fnCall.arguments) { if (arg instanceof StringLiteral stringLiteral) { String temp = "t" + tempCounter++; ir.add(new Alloc(temp, "streng", false, stringLiteral.value)); @@ -95,7 +95,7 @@ public class IRGenerator { } else { throw new IRGenerationException(fnCall.position, "Ukjent funksjon: " + arg); } - }); + } ir.add(new Call(fnCall.functionName, arguments)); } -- cgit v1.2.3