×
The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.
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.