Skip to content

Commit 88aae6f

Browse files
committed
kernelF: Fix exception in generated code when modulo is used with floatingpoint
Bug: When the modulo expression is used with a FloatingPoint, which is rounded, the generated code runs into an cast exception, trying to cast `BigDecimal` to `BigInteger` Solution: Change result of rounding to `BigInteger`, if it looses its decimal places.
1 parent ab92b09 commit 88aae6f

File tree

2 files changed

+97
-20
lines changed

2 files changed

+97
-20
lines changed

code/languages/org.iets3.opensource/solutions/org.iets3.core.expr.simpleTypes.runtime/models/org.iets3.core.expr.simpleTypes.runtime.mps

Lines changed: 50 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2587,29 +2587,63 @@
25872587
</node>
25882588
</node>
25892589
</node>
2590-
<node concept="3clFbH" id="5MvHQBSOkDZ" role="3cqZAp" />
2591-
<node concept="3cpWs6" id="5MvHQBSOkHt" role="3cqZAp">
2592-
<node concept="2OqwBi" id="5MvHQBSOkKL" role="3cqZAk">
2593-
<node concept="1eOMI4" id="5MvHQBSOkKM" role="2Oq$k0">
2594-
<node concept="10QFUN" id="5MvHQBSOkKN" role="1eOMHV">
2595-
<node concept="3uibUv" id="5MvHQBSOkKO" role="10QFUM">
2596-
<ref role="3uigEE" to="xlxw:~BigDecimal" resolve="BigDecimal" />
2590+
<node concept="3cpWs8" id="4LpmNQZFQBr" role="3cqZAp">
2591+
<node concept="3cpWsn" id="4LpmNQZFQBs" role="3cpWs9">
2592+
<property role="TrG5h" value="rounded" />
2593+
<node concept="3uibUv" id="4LpmNQZFAC7" role="1tU5fm">
2594+
<ref role="3uigEE" to="xlxw:~BigDecimal" resolve="BigDecimal" />
2595+
</node>
2596+
<node concept="2OqwBi" id="4LpmNQZFQBt" role="33vP2m">
2597+
<node concept="1eOMI4" id="4LpmNQZFQBu" role="2Oq$k0">
2598+
<node concept="10QFUN" id="4LpmNQZFQBv" role="1eOMHV">
2599+
<node concept="3uibUv" id="4LpmNQZFQBw" role="10QFUM">
2600+
<ref role="3uigEE" to="xlxw:~BigDecimal" resolve="BigDecimal" />
2601+
</node>
2602+
<node concept="37vLTw" id="4LpmNQZFQBx" role="10QFUP">
2603+
<ref role="3cqZAo" node="5MvHQBSOjd6" resolve="value" />
2604+
</node>
25972605
</node>
2598-
<node concept="37vLTw" id="5MvHQBSOkKP" role="10QFUP">
2599-
<ref role="3cqZAo" node="5MvHQBSOjd6" resolve="value" />
2606+
</node>
2607+
<node concept="liA8E" id="4LpmNQZFQBy" role="2OqNvi">
2608+
<ref role="37wK5l" to="xlxw:~BigDecimal.setScale(int,java.math.RoundingMode)" resolve="setScale" />
2609+
<node concept="37vLTw" id="4LpmNQZFQBz" role="37wK5m">
2610+
<ref role="3cqZAo" node="5MvHQBSOjda" resolve="precision" />
2611+
</node>
2612+
<node concept="37vLTw" id="4LpmNQZFQB$" role="37wK5m">
2613+
<ref role="3cqZAo" node="5MvHQBSOjK6" resolve="mode" />
26002614
</node>
26012615
</node>
26022616
</node>
2603-
<node concept="liA8E" id="5MvHQBSOkKQ" role="2OqNvi">
2604-
<ref role="37wK5l" to="xlxw:~BigDecimal.setScale(int,java.math.RoundingMode)" resolve="setScale" />
2605-
<node concept="37vLTw" id="5MvHQBSOlfv" role="37wK5m">
2606-
<ref role="3cqZAo" node="5MvHQBSOjda" resolve="precision" />
2607-
</node>
2608-
<node concept="37vLTw" id="5MvHQBSOlzC" role="37wK5m">
2609-
<ref role="3cqZAo" node="5MvHQBSOjK6" resolve="mode" />
2617+
</node>
2618+
</node>
2619+
<node concept="3clFbH" id="3mcUMm3MmmK" role="3cqZAp" />
2620+
<node concept="3clFbJ" id="3mcUMm3MnnA" role="3cqZAp">
2621+
<node concept="3clFbS" id="3mcUMm3MnnC" role="3clFbx">
2622+
<node concept="3cpWs6" id="3mcUMm3MoGW" role="3cqZAp">
2623+
<node concept="2OqwBi" id="4LpmNQZFXXL" role="3cqZAk">
2624+
<node concept="37vLTw" id="4LpmNQZFXtM" role="2Oq$k0">
2625+
<ref role="3cqZAo" node="4LpmNQZFQBs" resolve="rounded" />
2626+
</node>
2627+
<node concept="liA8E" id="4LpmNQZFYxE" role="2OqNvi">
2628+
<ref role="37wK5l" to="xlxw:~BigDecimal.toBigInteger()" resolve="toBigInteger" />
2629+
</node>
26102630
</node>
26112631
</node>
26122632
</node>
2633+
<node concept="3clFbC" id="3mcUMm3Mos0" role="3clFbw">
2634+
<node concept="3cmrfG" id="3mcUMm3MoCX" role="3uHU7w">
2635+
<property role="3cmrfH" value="0" />
2636+
</node>
2637+
<node concept="37vLTw" id="3mcUMm3MnJF" role="3uHU7B">
2638+
<ref role="3cqZAo" node="5MvHQBSOjda" resolve="precision" />
2639+
</node>
2640+
</node>
2641+
</node>
2642+
<node concept="3clFbH" id="5MvHQBSOkDZ" role="3cqZAp" />
2643+
<node concept="3cpWs6" id="5MvHQBSOkHt" role="3cqZAp">
2644+
<node concept="37vLTw" id="4LpmNQZFQB_" role="3cqZAk">
2645+
<ref role="3cqZAo" node="4LpmNQZFQBs" resolve="rounded" />
2646+
</node>
26132647
</node>
26142648
</node>
26152649
<node concept="3Tm1VV" id="5MvHQBSOhX$" role="1B3o_S" />

code/languages/org.iets3.opensource/tests/test.in.expr.os/models/[email protected]

Lines changed: 47 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
<model ref="r:5c3f8be4-b275-4108-be9a-6a052d5b2428(test.in.expr.os.base@tests)">
33
<persistence version="9" />
44
<languages>
5-
<use id="8585453e-6bfb-4d80-98de-b16074f1d86c" name="jetbrains.mps.lang.test" version="5" />
6-
<use id="f61473f9-130f-42f6-b98d-6c438812c2f6" name="jetbrains.mps.baseLanguage.unitTest" version="1" />
7-
<use id="d4280a54-f6df-4383-aa41-d1b2bffa7eb1" name="com.mbeddr.core.base" version="6" />
8-
<use id="92d2ea16-5a42-4fdf-a676-c7604efe3504" name="de.slisson.mps.richtext" version="0" />
5+
<use id="8585453e-6bfb-4d80-98de-b16074f1d86c" name="jetbrains.mps.lang.test" version="-1" />
6+
<use id="f61473f9-130f-42f6-b98d-6c438812c2f6" name="jetbrains.mps.baseLanguage.unitTest" version="-1" />
7+
<use id="d4280a54-f6df-4383-aa41-d1b2bffa7eb1" name="com.mbeddr.core.base" version="-1" />
8+
<use id="92d2ea16-5a42-4fdf-a676-c7604efe3504" name="de.slisson.mps.richtext" version="-1" />
99
<devkit ref="ec967770-4707-442f-baaf-a8b7bb554717(org.iets3.core.expr.genall.core.devkit)" />
1010
<devkit ref="c4e521ab-b605-4ef9-a7c3-68075da058f0(org.iets3.core.expr.core.devkit)" />
1111
</languages>
@@ -155,6 +155,13 @@
155155
<concept id="5115872837157054170" name="org.iets3.core.expr.simpleTypes.structure.NumberLiteral" flags="ng" index="30bXRB">
156156
<property id="5115872837157054173" name="value" index="30bXRw" />
157157
</concept>
158+
<concept id="8825352096210458329" name="org.iets3.core.expr.simpleTypes.structure.RoundUpRoundingMode" flags="ng" index="1M9Agw" />
159+
<concept id="8825352096210456368" name="org.iets3.core.expr.simpleTypes.structure.RoundDownRoundingMode" flags="ng" index="1M9BR9" />
160+
<concept id="8825352096209502465" name="org.iets3.core.expr.simpleTypes.structure.ConvertPrecisionNumberExpression" flags="ng" index="1MaffS">
161+
<property id="8825352096209722453" name="targetPrecision" index="1MbqUG" />
162+
<child id="8825352096209502752" name="rounding" index="1Maf3p" />
163+
<child id="8825352096209502545" name="expr" index="1MafeC" />
164+
</concept>
158165
</language>
159166
<language id="71934284-d7d1-45ee-a054-8c072591085f" name="org.iets3.core.expr.toplevel">
160167
<concept id="7089558164906249676" name="org.iets3.core.expr.toplevel.structure.Constant" flags="ng" index="2zPypq">
@@ -2104,6 +2111,42 @@
21042111
<property role="30bXRw" value="3" />
21052112
</node>
21062113
</node>
2114+
<node concept="_fkuZ" id="6xqpdoQvk1a" role="_fkp5">
2115+
<node concept="_fku$" id="6xqpdoQvk1b" role="_fkur" />
2116+
<node concept="30bXRB" id="6xqpdoQvk7E" role="_fkuS">
2117+
<property role="30bXRw" value="0" />
2118+
</node>
2119+
<node concept="3Ed6Qv" id="6xqpdoQvk1X" role="_fkuY">
2120+
<node concept="1MaffS" id="6xqpdoQvk1Z" role="30dEsF">
2121+
<property role="1MbqUG" value="0" />
2122+
<node concept="1M9BR9" id="6xqpdoQvk20" role="1Maf3p" />
2123+
<node concept="30bXRB" id="6xqpdoQvk3w" role="1MafeC">
2124+
<property role="30bXRw" value="2.2" />
2125+
</node>
2126+
</node>
2127+
<node concept="30bXRB" id="6xqpdoQKA$T" role="30dEs_">
2128+
<property role="30bXRw" value="2" />
2129+
</node>
2130+
</node>
2131+
</node>
2132+
<node concept="_fkuZ" id="6xqpdoQvk7T" role="_fkp5">
2133+
<node concept="_fku$" id="6xqpdoQvk7U" role="_fkur" />
2134+
<node concept="3Ed6Qv" id="6xqpdoQvk7W" role="_fkuY">
2135+
<node concept="30bXRB" id="6xqpdoQKABp" role="30dEsF">
2136+
<property role="30bXRw" value="3" />
2137+
</node>
2138+
<node concept="1MaffS" id="6xqpdoQJNQM" role="30dEs_">
2139+
<property role="1MbqUG" value="0" />
2140+
<node concept="1M9Agw" id="6xqpdoQJNSV" role="1Maf3p" />
2141+
<node concept="30bXRB" id="6xqpdoQJNXE" role="1MafeC">
2142+
<property role="30bXRw" value="1.8" />
2143+
</node>
2144+
</node>
2145+
</node>
2146+
<node concept="30bXRB" id="6xqpdoQvkgs" role="_fkuS">
2147+
<property role="30bXRw" value="1" />
2148+
</node>
2149+
</node>
21072150
</node>
21082151
</node>
21092152
<node concept="_iOnU" id="6HHp2WmT$Y1">

0 commit comments

Comments
 (0)