From 78e3836d2f3e373da214d64b6993b45be6bb626b Mon Sep 17 00:00:00 2001 From: domenico Date: Mon, 11 Nov 2024 15:51:02 +0100 Subject: [PATCH 1/2] Fix error throw logic --- .../parsing/parsetreetoast/resolution.kt | 4 +--- .../smeup/rpgparser/evaluation/InterpreterTest.kt | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/rpgJavaInterpreter-core/src/main/kotlin/com/smeup/rpgparser/parsing/parsetreetoast/resolution.kt b/rpgJavaInterpreter-core/src/main/kotlin/com/smeup/rpgparser/parsing/parsetreetoast/resolution.kt index ad6e66ec3..cc018af29 100644 --- a/rpgJavaInterpreter-core/src/main/kotlin/com/smeup/rpgparser/parsing/parsetreetoast/resolution.kt +++ b/rpgJavaInterpreter-core/src/main/kotlin/com/smeup/rpgparser/parsing/parsetreetoast/resolution.kt @@ -272,7 +272,5 @@ private fun ReferenceByName.tryToResolveRecursively(posi resolved = this.tryToResolve(currentCu.allDataDefinitions, caseInsensitive = true) currentCu = currentCu.parent?.let { it as CompilationUnit } } - require(resolved) { - "Data reference not resolved: ${this.name} at $position" - } + if (!resolved) cu.error("Data reference not resolved: ${this.name} at $position") } diff --git a/rpgJavaInterpreter-core/src/test/kotlin/com/smeup/rpgparser/evaluation/InterpreterTest.kt b/rpgJavaInterpreter-core/src/test/kotlin/com/smeup/rpgparser/evaluation/InterpreterTest.kt index af580349c..f8fb025f2 100644 --- a/rpgJavaInterpreter-core/src/test/kotlin/com/smeup/rpgparser/evaluation/InterpreterTest.kt +++ b/rpgJavaInterpreter-core/src/test/kotlin/com/smeup/rpgparser/evaluation/InterpreterTest.kt @@ -2549,4 +2549,19 @@ Test 6 val expected = listOf("0", "0", "0", "1") assertEquals(expected, "PRSLTCALLERDUPLICATE".outputOf()) } + + @Test + fun missingDefinitionOnPListShouldThrowResolutionError() { + val systemInterface = JavaSystemInterface() + + val source = """ +| C CALL 'PGM' +| C PARM MISSING + """.trimMargin() + + val program = getProgram(source, systemInterface) + assertFailsWith(AstResolutionError::class) { + program.singleCall(listOf()) + } + } } From ecdb956440263d49ba09d01e89229cea497e5d2b Mon Sep 17 00:00:00 2001 From: domenico Date: Thu, 14 Nov 2024 08:10:48 +0100 Subject: [PATCH 2/2] Fix relative position --- .../com/smeup/rpgparser/parsing/parsetreetoast/resolution.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/rpgJavaInterpreter-core/src/main/kotlin/com/smeup/rpgparser/parsing/parsetreetoast/resolution.kt b/rpgJavaInterpreter-core/src/main/kotlin/com/smeup/rpgparser/parsing/parsetreetoast/resolution.kt index cc018af29..bf4c12378 100644 --- a/rpgJavaInterpreter-core/src/main/kotlin/com/smeup/rpgparser/parsing/parsetreetoast/resolution.kt +++ b/rpgJavaInterpreter-core/src/main/kotlin/com/smeup/rpgparser/parsing/parsetreetoast/resolution.kt @@ -24,6 +24,7 @@ import com.smeup.rpgparser.interpreter.InStatementDataDefinition import com.smeup.rpgparser.interpreter.type import com.smeup.rpgparser.parsing.ast.* import com.smeup.rpgparser.parsing.facade.AstCreatingException +import com.smeup.rpgparser.parsing.facade.adaptInFunctionOf import com.smeup.rpgparser.parsing.facade.getExecutionProgramNameWithNoExtension import com.smeup.rpgparser.parsing.facade.getLastPoppedParsingProgram import com.smeup.rpgparser.utils.popIfPresent @@ -272,5 +273,6 @@ private fun ReferenceByName.tryToResolveRecursively(posi resolved = this.tryToResolve(currentCu.allDataDefinitions, caseInsensitive = true) currentCu = currentCu.parent?.let { it as CompilationUnit } } - if (!resolved) cu.error("Data reference not resolved: ${this.name} at $position") + val relativePosition = position?.adaptInFunctionOf(getProgramNameToCopyBlocks().second) + if (!resolved) cu.error("Data reference not resolved: ${this.name} at $relativePosition") }