From aec1ed25f438c3f96a9034089de9dd08e7a1eee9 Mon Sep 17 00:00:00 2001 From: lanarimarco Date: Wed, 25 Mar 2026 17:34:39 +0100 Subject: [PATCH 1/4] =?UTF-8?q?=F0=9F=90=9B=20fix:=20support=20Italian=20d?= =?UTF-8?q?ecimal=20separator=20(comma)=20in=20%DEC=20BIF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Handle comma as decimal separator in asBigDecimal() so that %DEC correctly parses strings like '1,30' as 1.30. Also normalize line endings to \n in RpgParserFacade to ensure cross-platform consistency. Add BIFDEC01 test to cover both dot and comma decimal separators. --- .../parsing/facade/RpgParserFacade.kt | 2 +- .../kotlin/com/smeup/rpgparser/utils/misc.kt | 2 +- .../rpgparser/evaluation/InterpreterTest.kt | 5 ++++ .../src/test/resources/BIFDEC01.rpgle | 25 +++++++++++++++++++ 4 files changed, 32 insertions(+), 2 deletions(-) create mode 100644 rpgJavaInterpreter-core/src/test/resources/BIFDEC01.rpgle diff --git a/rpgJavaInterpreter-core/src/main/kotlin/com/smeup/rpgparser/parsing/facade/RpgParserFacade.kt b/rpgJavaInterpreter-core/src/main/kotlin/com/smeup/rpgparser/parsing/facade/RpgParserFacade.kt index 3e741d5a4..08efbb1f1 100644 --- a/rpgJavaInterpreter-core/src/main/kotlin/com/smeup/rpgparser/parsing/facade/RpgParserFacade.kt +++ b/rpgJavaInterpreter-core/src/main/kotlin/com/smeup/rpgparser/parsing/facade/RpgParserFacade.kt @@ -162,7 +162,7 @@ class RpgParserFacade { val code = inputStreamToString(inputStream) val lines = code.lines() val longLines = lines.map { it.padEnd(threshold) } - val paddedCode = longLines.joinToString(System.lineSeparator()) + val paddedCode = longLines.joinToString("\n") return CharStreams.fromStream(paddedCode.byteInputStream(StandardCharsets.UTF_8)) } diff --git a/rpgJavaInterpreter-core/src/main/kotlin/com/smeup/rpgparser/utils/misc.kt b/rpgJavaInterpreter-core/src/main/kotlin/com/smeup/rpgparser/utils/misc.kt index e41c9718e..3b1685eb0 100644 --- a/rpgJavaInterpreter-core/src/main/kotlin/com/smeup/rpgparser/utils/misc.kt +++ b/rpgJavaInterpreter-core/src/main/kotlin/com/smeup/rpgparser/utils/misc.kt @@ -122,7 +122,7 @@ fun String?.asDouble(): Double { fun String.asBigDecimal(): BigDecimal? = try { - BigDecimal(this.trim()) + BigDecimal(this.trim().replace(',', '.')) } catch (e: Exception) { null } 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 b8a313aec..8418aaf2b 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 @@ -1063,6 +1063,11 @@ Test 6 ) } + @Test + fun executeBIFDEC01() { + assertEquals(listOf("1.30", "1.30"), outputOf("BIFDEC01")) + } + @Test fun executeBIFEDITC() { // I don't know exactly what expected result should be diff --git a/rpgJavaInterpreter-core/src/test/resources/BIFDEC01.rpgle b/rpgJavaInterpreter-core/src/test/resources/BIFDEC01.rpgle new file mode 100644 index 000000000..c16856a3b --- /dev/null +++ b/rpgJavaInterpreter-core/src/test/resources/BIFDEC01.rpgle @@ -0,0 +1,25 @@ + V* ============================================================== + D* Purpose of this program is to fix %DEC when the string + D* contains italian decimal separator (comma instead of dot) + V* ============================================================== + + D DECIMAL S 9 2 + D STR S 10A + + * %DEC with dot decimal separator ************************************ + C EVAL STR='1.30' + C EVAL DECIMAL=%DEC(STR:9:2) + * Expected: + * DECIMAL = 1.30 + C DECIMAL DSPLY + *********************************************************************** + + * %DEC with italian decimal separator (comma) ************************ + C EVAL STR='1,30' + C EVAL DECIMAL=%DEC(STR:9:2) + * Expected: + * DECIMAL = 1.30 + C DECIMAL DSPLY + *********************************************************************** + + C SETON LR \ No newline at end of file From 63f2884a79587c618fc902762f1b7894dfb61af9 Mon Sep 17 00:00:00 2001 From: lanarimarco Date: Wed, 25 Mar 2026 17:35:59 +0100 Subject: [PATCH 2/4] =?UTF-8?q?=F0=9F=99=88=20gitignore:=20untrack=20.clau?= =?UTF-8?q?de/settings.local.json?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .claude/settings.local.json | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 .claude/settings.local.json diff --git a/.claude/settings.local.json b/.claude/settings.local.json deleted file mode 100644 index f56ef3355..000000000 --- a/.claude/settings.local.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "permissions": { - "allow": [ - "Read(/C:\\dev\\java\\smeup\\jariko/**)", - "Bash(git add:*)" - ], - "deny": [], - "ask": [] - } -} \ No newline at end of file From bbdbbc86e6fcdd11f6f11fa85410d7ce5683a128 Mon Sep 17 00:00:00 2001 From: lanarimarco Date: Wed, 25 Mar 2026 22:53:51 +0100 Subject: [PATCH 3/4] =?UTF-8?q?=F0=9F=92=84=20style:=20fix=20function=20na?= =?UTF-8?q?me=20to=20follow=20camelCase=20convention?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kotlin/com/smeup/rpgparser/evaluation/InterpreterTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 8418aaf2b..19f2f9065 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 @@ -1311,7 +1311,7 @@ Test 6 } @Test - fun EVALwithTypeError() { + fun evalWithTypeError() { val systemInterface = JavaSystemInterface() val source = From 713a874ca658769b1e01d7ad40263820fafe73ce Mon Sep 17 00:00:00 2001 From: Marco Lanari Date: Thu, 26 Mar 2026 12:21:00 +0100 Subject: [PATCH 4/4] =?UTF-8?q?=F0=9F=A5=85=20errors:=20throw=20error=20on?= =?UTF-8?q?=20unparseable=20BigDecimal=20string?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- .../src/main/kotlin/com/smeup/rpgparser/utils/misc.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpgJavaInterpreter-core/src/main/kotlin/com/smeup/rpgparser/utils/misc.kt b/rpgJavaInterpreter-core/src/main/kotlin/com/smeup/rpgparser/utils/misc.kt index 3b1685eb0..6f93675fa 100644 --- a/rpgJavaInterpreter-core/src/main/kotlin/com/smeup/rpgparser/utils/misc.kt +++ b/rpgJavaInterpreter-core/src/main/kotlin/com/smeup/rpgparser/utils/misc.kt @@ -124,7 +124,7 @@ fun String.asBigDecimal(): BigDecimal? = try { BigDecimal(this.trim().replace(',', '.')) } catch (e: Exception) { - null + error("Unable to parse $this as BigDecimal") } fun Int.ceilDiv(divisor: Int): Int = this / divisor + if (this % divisor > 0) 1 else 0