summaryrefslogtreecommitdiff
path: root/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration
diff options
context:
space:
mode:
authorElias Haugsbakk <[email protected]>2026-09-21 14:36:59 +0200
committerElias Haugsbakk <[email protected]>2026-09-21 14:36:59 +0200
commite7720e2d9e1319712f85cb0527e17f1251bd7d2c (patch)
tree19cb8b0f49a0fe234fc0c0bfb41dc5c520b1630b /src/main/java/no/eliashaugsbakk/kompilator/IRGeneration
parent84215a9b8f79035ebec83fe38bc696b5ae78de5d (diff)
add position info to semantic and IRgen exceptions
Diffstat (limited to 'src/main/java/no/eliashaugsbakk/kompilator/IRGeneration')
-rw-r--r--src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGenerationException.java12
-rw-r--r--src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGenerator.java8
2 files changed, 14 insertions, 6 deletions
diff --git a/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGenerationException.java b/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGenerationException.java
index ab881a0..b6a7062 100644
--- a/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGenerationException.java
+++ b/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGenerationException.java
@@ -1,7 +1,15 @@
package no.eliashaugsbakk.kompilator.IRGeneration;
+import no.eliashaugsbakk.kompilator.tokenization.Position;
+
public class IRGenerationException extends RuntimeException {
- public IRGenerationException(String message) {
- super(message);
+ public IRGenerationException(Position position, String message) {
+ String pos;
+ if (position == null) {
+ pos = "unknown position";
+ } else {
+ pos = position.line() + ":" + position.column();
+ }
+ super(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 657a817..c72db95 100644
--- a/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGenerator.java
+++ b/src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGenerator.java
@@ -57,7 +57,7 @@ public class IRGenerator {
if (assignment.expression instanceof StringLiteral stringLiteral) {
value = stringLiteral.value;
} else {
- throw new IRGenerationException("Only strings are implemented");
+ throw new IRGenerationException(assignment.position, "Only strings are implemented");
}
ir.add(new Assign(assignment.identifier, value));
}
@@ -67,7 +67,7 @@ public class IRGenerator {
if (identifierDecl.initializer instanceof StringLiteral stringLiteral) {
value = stringLiteral.value;
} else {
- throw new IRGenerationException("Unknown function: " + identifierDecl.initializer);
+ throw new IRGenerationException(identifierDecl.position, "Unknown function: " + identifierDecl.initializer);
}
ir.add(new Alloc(identifierDecl.identifier, identifierDecl.type.name(), identifierDecl.mutable,
value));
@@ -77,7 +77,7 @@ public class IRGenerator {
if (expr instanceof FunctionCall call) {
generateFunctionCall(call);
} else {
- throw new IRGenerationException("Only expression which can stand alone are functions");
+ throw new IRGenerationException(expr.position, "Only expression which can stand alone are functions");
}
}
@@ -93,7 +93,7 @@ public class IRGenerator {
} else if (arg instanceof Identifier identifier) {
arguments.add(identifier.name);
} else {
- throw new IRGenerationException("Unknown function: " + arg);
+ throw new IRGenerationException(fnCall.position, "Unknown function: " + arg);
}
});