From 7c69b5e34f2ed72c9d3e85f6f61566e9b3c532d8 Mon Sep 17 00:00:00 2001 From: Davide Palladino Date: Wed, 31 Jan 2024 12:50:28 +0100 Subject: [PATCH] Fixed `Z-ADD` for T10_A20_P19. --- .../com/smeup/rpgparser/parsing/parsetreetoast/misc.kt | 5 +++-- .../smeup/rpgparser/evaluation/SmeupInterpreterTest.kt | 3 +++ .../src/test/resources/smeup/T10_A20_P19F.rpgle | 10 ++++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) create mode 100644 rpgJavaInterpreter-core/src/test/resources/smeup/T10_A20_P19F.rpgle diff --git a/rpgJavaInterpreter-core/src/main/kotlin/com/smeup/rpgparser/parsing/parsetreetoast/misc.kt b/rpgJavaInterpreter-core/src/main/kotlin/com/smeup/rpgparser/parsing/parsetreetoast/misc.kt index a38efaee4..5a8f8ebba 100644 --- a/rpgJavaInterpreter-core/src/main/kotlin/com/smeup/rpgparser/parsing/parsetreetoast/misc.kt +++ b/rpgJavaInterpreter-core/src/main/kotlin/com/smeup/rpgparser/parsing/parsetreetoast/misc.kt @@ -1378,10 +1378,11 @@ internal fun CsMOVELContext.toAst(conf: ToAstConfiguration = ToAstConfiguration( internal fun CsZ_ADDContext.toAst(conf: ToAstConfiguration = ToAstConfiguration()): ZAddStmt { val position = toPosition(conf.considerPosition) - val expression = this.cspec_fixed_standard_parts().factor2Expression(conf) ?: throw UnsupportedOperationException("Z-ADD operation requires factor 2: ${this.text} - ${position.atLine()}") val name = this.cspec_fixed_standard_parts().result.text + val expression = this.cspec_fixed_standard_parts().factor2Expression(conf) ?: throw UnsupportedOperationException("Z-ADD operation requires factor 2: ${this.text} - ${position.atLine()}") + val resultExpression = annidatedReferenceExpression(name, position) val dataDefinition = this.cspec_fixed_standard_parts().toDataDefinition(name, position, conf) - return ZAddStmt(DataRefExpr(ReferenceByName(name), position), dataDefinition, expression, position) + return ZAddStmt(resultExpression, dataDefinition, expression, position) } internal fun CsMULTContext.toAst(conf: ToAstConfiguration = ToAstConfiguration()): MultStmt { diff --git a/rpgJavaInterpreter-core/src/test/kotlin/com/smeup/rpgparser/evaluation/SmeupInterpreterTest.kt b/rpgJavaInterpreter-core/src/test/kotlin/com/smeup/rpgparser/evaluation/SmeupInterpreterTest.kt index 3ece39f49..e5deaeea6 100644 --- a/rpgJavaInterpreter-core/src/test/kotlin/com/smeup/rpgparser/evaluation/SmeupInterpreterTest.kt +++ b/rpgJavaInterpreter-core/src/test/kotlin/com/smeup/rpgparser/evaluation/SmeupInterpreterTest.kt @@ -224,5 +224,8 @@ open class SmeupInterpreterTest : AbstractTest() { fun executeT10_A20_P19() { val expected = listOf("1020") assertEquals(expected, "smeup/T10_A20_P19".outputOf()) + assertFailsWith { + "smeup/T10_A20_P19F".outputOf() + } } } \ No newline at end of file diff --git a/rpgJavaInterpreter-core/src/test/resources/smeup/T10_A20_P19F.rpgle b/rpgJavaInterpreter-core/src/test/resources/smeup/T10_A20_P19F.rpgle new file mode 100644 index 000000000..c649bebe6 --- /dev/null +++ b/rpgJavaInterpreter-core/src/test/resources/smeup/T10_A20_P19F.rpgle @@ -0,0 +1,10 @@ + D £DBG_Str S 50 VARYING + D A20_AR1 S 2 0 DIM(2) + *************************************************************************** + C Z-ADD 10 A20_AR1(1 + C Z-ADD 20 A20_AR12) + C EVAL £DBG_Str=%CHAR(A20_AR1(1)) + C +%CHAR(A20_AR1(2)) + * EXPECTED: 1020 + C £DBG_Str DSPLY + C SETON LR \ No newline at end of file