diff options
Diffstat (limited to 'src/main/java/no/eliashaugsbakk/kompilator/IRGeneration')
| -rw-r--r-- | src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGenerationException.java | 12 | ||||
| -rw-r--r-- | src/main/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGenerator.java | 8 |
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); } }); |
