|
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.
--
Barbara
--
This is the RPG programming on IBM i (RPG400-L) mailing list
To post a message email: RPG400-L@xxxxxxxxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxxxxxxxx
Before posting, please take a moment to review the archives
at https://archive.midrange.com/rpg400-l.
Please contact support@xxxxxxxxxxxxxxxxxxxx for any subscription related
questions.
As an Amazon Associate we earn from qualifying purchases.
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.