On Mon, Jan 3, 2022 at 4:42 AM Martin Neugebauer via RPG400-L
<rpg400-l@xxxxxxxxxxxxxxxxxx> wrote:

Happy new year to all !

Same to you!

Is this a compiler bug?

No. It is arguably unintuitive behavior, though.

**freedcl-s c1 char(4);dcl-s c2 char(4);dcl-s c3 char(4);dcl-s YNum packed(4);
YNum = *year;
c1 = %editc(*year - 1 : 'X'); // Error?
c2 = %editc(YNum - 1 : 'X'); // Error?
YNum = YNum - 1;c3 = %editc(YNum : 'X'); // expected result
*inlr = *on; //-------------------------------------------------------------------
Results:EVAL c1 C1 = '0202' EVAL c2 C2 = '0202' EVAL c3 C3 = '2021' //-------------------------------------------------------------------

The expressions being assigned to c1 and c2 are 5 characters long,
equal to '02021'. This is due to (in my opinion) arcane precision
rules for intermediate results within expressions.

So, the 5 characters thing is one area of probably unintuitive behavior.

The implicit truncation feature of EVAL (like using MOVEL on character
fields) is documented, so is also not a bug and perhaps not even
"unexpected". But personally, given how much safety was prioritized in
the %BIFs and freeform aspects of RPG IV, I would have personally
expected a compile-time error (if the too-long character value is
known at compile-time) or a run-time error (if the length cannot be
known at compile-time, but turns out to be too long at run-time).

To me, the simplest way to adjust the code to do what you want is to
use EVALR instead of the naked equals sign (which is shorthand for

John Y.

As an Amazon Associate we earn from qualifying purchases.

This thread ...


Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2022 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.