On 2025-12-10 12:25 p.m., James H. H. Lampert via RPG400-L wrote:
On 12/10/25 4:06 AM, Infodorado InfoDorado via RPG400-L wrote:
The RPG compiler is a single-pass compiler

No, it can't be pure single-pass. If it were, then a program in which a variable is NOT defined in a D-spec, nor in the first C-spec in which it appears, would not compile, much less run. And it's trivially simple to construct an example of this (it took me about 2 minutes), and it compiles and runs just fine. I'd quote the source here, but it would likely be mangled beyond recognition.


It's a single pass through the source but it gathers information that it can use multiple times.

The compiler usually allows forward-referencing, so you can code LIKE(x) where x is defined later.

But for free-form definitions, the compiler requires the parameter for the data-type keywords to be defined before the keyword is seen.

dcl-s x char(con1); // bad, con1 not defined yet
dcl-c con1 5;
dcl-s y char(con1); // ok, con1 is defined

Where it becomes extra fun is when you have a data structure that LOOKS defined.

dcl-ds ds1;
subf char(10);
end-ds;
dcl-s x char(%size(ds1)); // %size(ds1) is not defined. WHAT???

RPG allows you to define the length of a data structure later, either due to being on an I spec, possible an externally-described I spec, or on a C spec.

C MOVE *blanks ds1 50

Almost certainly wrong columns, but you get what I mean. I'm defining DS1 to have a length of 50 here, not the length of 10 that it looked like it should have. Shenanigans? Yep, but upward-compatible R Us.

We have a H-spec/CTL-OPT keyword for that: DLCOPT(*NOCHGDSLEN). With that keyword, the compiler doesn't allow you to change the length of the data structure like that, so it's considered defined as soon as all the subfields are defined.


As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:
Replies:

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

This mailing list archive is Copyright 1997-2025 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.