From e7720e2d9e1319712f85cb0527e17f1251bd7d2c Mon Sep 17 00:00:00 2001 From: Elias Haugsbakk Date: Mon, 21 Sep 2026 14:36:59 +0200 Subject: add position info to semantic and IRgen exceptions --- .../kompilator/IRGeneration/IRGeneratorTest.java | 9 ++++---- .../kompilator/parsing/ParserTest.java | 27 +++++++++++----------- .../kompilator/semanticAnalysis/AnalyzerTest.java | 12 +++++----- .../kompilator/tokenization/LexerTest.java | 4 ++-- 4 files changed, 27 insertions(+), 25 deletions(-) (limited to 'src/test/java/no') diff --git a/src/test/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGeneratorTest.java b/src/test/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGeneratorTest.java index 844782f..87b219e 100644 --- a/src/test/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGeneratorTest.java +++ b/src/test/java/no/eliashaugsbakk/kompilator/IRGeneration/IRGeneratorTest.java @@ -11,6 +11,7 @@ import no.eliashaugsbakk.kompilator.parsing.node.Program; import no.eliashaugsbakk.kompilator.parsing.node.expression.FunctionCall; import no.eliashaugsbakk.kompilator.parsing.node.expression.literal.StringLiteral; import no.eliashaugsbakk.kompilator.parsing.node.statement.ExpressionStatement; +import no.eliashaugsbakk.kompilator.tokenization.Position; import org.junit.jupiter.api.Test; class IRGeneratorTest { @@ -27,7 +28,7 @@ class IRGeneratorTest { @Test void multiplePrintStatementsGenerateSequentialTempVars() { - Program program = new Program(); + Program program = new Program(null); program.addStatement(buildStatement("skriv", "hello")); program.addStatement(buildStatement("skriv", "world")); @@ -45,13 +46,13 @@ class IRGeneratorTest { } private Program buildProgram(String functionName, String argument) { - Program program = new Program(); + Program program = new Program(null); program.addStatement(buildStatement(functionName, argument)); return program; } private ExpressionStatement buildStatement(String functionName, String argument) { - FunctionCall call = new FunctionCall(functionName, List.of(new StringLiteral(argument))); - return new ExpressionStatement(call); + FunctionCall call = new FunctionCall(null, functionName, List.of(new StringLiteral(null, argument))); + return new ExpressionStatement(null, call); } } diff --git a/src/test/java/no/eliashaugsbakk/kompilator/parsing/ParserTest.java b/src/test/java/no/eliashaugsbakk/kompilator/parsing/ParserTest.java index 0de2b5f..e4d48ec 100644 --- a/src/test/java/no/eliashaugsbakk/kompilator/parsing/ParserTest.java +++ b/src/test/java/no/eliashaugsbakk/kompilator/parsing/ParserTest.java @@ -12,6 +12,7 @@ import no.eliashaugsbakk.kompilator.parsing.node.Program; import no.eliashaugsbakk.kompilator.parsing.node.expression.FunctionCall; import no.eliashaugsbakk.kompilator.parsing.node.expression.literal.StringLiteral; import no.eliashaugsbakk.kompilator.parsing.node.statement.ExpressionStatement; +import no.eliashaugsbakk.kompilator.tokenization.Position; import no.eliashaugsbakk.kompilator.tokenization.Token; import org.junit.jupiter.api.Test; @@ -20,11 +21,11 @@ class ParserTest { @Test void validSyntaxBuildsCorrectTree() throws ParserException { List tokens = List.of( - new Token(KEYWORD, "skriv", 1, 0), - new Token(LPAREN, "(", 1, 5), - new Token(STRING_LITERAL, "Hello", 1, 6), - new Token(RPAREN, ")", 1, 13), - new Token(SEMICOLON, ";", 1, 14) + new Token(KEYWORD, "skriv", new Position(1, 0)), + new Token(LPAREN, "(", new Position(1, 5)), + new Token(STRING_LITERAL, "Hello", new Position(1, 6)), + new Token(RPAREN, ")", new Position(1, 13)), + new Token(SEMICOLON, ";", new Position(1, 14)) ); AST ast = new Parser(tokens).parse(); @@ -47,10 +48,10 @@ class ParserTest { @Test void missingSemicolonThrows() { List tokens = List.of( - new Token(KEYWORD, "print", 1, 0), - new Token(LPAREN, "(", 1, 5), - new Token(STRING_LITERAL, "Hello", 1, 6), - new Token(RPAREN, ")", 1, 13) + new Token(KEYWORD, "print", new Position(1, 0)), + new Token(LPAREN, "(", new Position(1, 5)), + new Token(STRING_LITERAL, "Hello", new Position(1, 6)), + new Token(RPAREN, ")", new Position(1, 13)) ); assertThrows(ParserException.class, () -> new Parser(tokens).parse()); @@ -59,10 +60,10 @@ class ParserTest { @Test void missingParenthesisThrows() { List tokens = List.of( - new Token(KEYWORD, "print", 1, 0), - new Token(STRING_LITERAL, "Hello", 1, 5), - new Token(RPAREN, ")", 1, 12), - new Token(SEMICOLON, ";", 1, 13) + new Token(KEYWORD, "print", new Position(1, 0)), + new Token(STRING_LITERAL, "Hello", new Position(1, 5)), + new Token(RPAREN, ")", new Position(1, 12)), + new Token(SEMICOLON, ";", new Position(1, 13)) ); assertThrows(ParserException.class, () -> new Parser(tokens).parse()); diff --git a/src/test/java/no/eliashaugsbakk/kompilator/semanticAnalysis/AnalyzerTest.java b/src/test/java/no/eliashaugsbakk/kompilator/semanticAnalysis/AnalyzerTest.java index 13827e4..7d26017 100644 --- a/src/test/java/no/eliashaugsbakk/kompilator/semanticAnalysis/AnalyzerTest.java +++ b/src/test/java/no/eliashaugsbakk/kompilator/semanticAnalysis/AnalyzerTest.java @@ -31,17 +31,17 @@ class AnalyzerTest { } private AST buildAST(String functionName, String argument) { - FunctionCall call = new FunctionCall(functionName, List.of(new StringLiteral(argument))); - ExpressionStatement stmt = new ExpressionStatement(call); - Program program = new Program(); + FunctionCall call = new FunctionCall(null, functionName, List.of(new StringLiteral(null, argument))); + ExpressionStatement stmt = new ExpressionStatement(null, call); + Program program = new Program(null); program.addStatement(stmt); return new AST(program); } private AST buildASTNoArgs(String functionName) { - FunctionCall call = new FunctionCall(functionName, List.of()); - ExpressionStatement stmt = new ExpressionStatement(call); - Program program = new Program(); + FunctionCall call = new FunctionCall(null, functionName, List.of()); + ExpressionStatement stmt = new ExpressionStatement(null, call); + Program program = new Program(null); program.addStatement(stmt); return new AST(program); } diff --git a/src/test/java/no/eliashaugsbakk/kompilator/tokenization/LexerTest.java b/src/test/java/no/eliashaugsbakk/kompilator/tokenization/LexerTest.java index 85241ef..5ec47d8 100644 --- a/src/test/java/no/eliashaugsbakk/kompilator/tokenization/LexerTest.java +++ b/src/test/java/no/eliashaugsbakk/kompilator/tokenization/LexerTest.java @@ -23,8 +23,8 @@ class LexerTest { List tokens = lexer.tokenize(); assertSame(KEYWORD, tokens.getFirst().type()); - assertEquals(1, tokens.get(0).line()); - assertEquals(1, tokens.get(0).column()); + assertEquals(1, tokens.get(0).position().line()); + assertEquals(1, tokens.get(0).position().column()); assertSame(LPAREN, tokens.get(1).type()); -- cgit v1.2.3