Re: Why you shouldn't be afraid to use VARCHAR in RPGLE
Infodorado InfoDorado via RPG400-L <[email protected]>
| Newsgroups | gmane.comp.lang.as400.rpg |
|---|---|
| Message-ID | <[email protected]> |
I (we?) appreciate those addendums you generously provide. --Alan Cassidy > On 12/10/2025 11:04 PM EST Barbara Morris <[email protected]> wrote: > > > 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: [email protected] > To subscribe, unsubscribe, or change list options, > visit: https://lists.midrange.com/mailman/listinfo/rpg400-l > or email: RPG400-L-request-+hD5IHI5Xscn3HwCXmMcX9BPR1lH4CV8@public.gmane.org > Before posting, please take a moment to review the archives > at https://archive.midrange.com/rpg400-l. > > Please contact support-FMtJrHiV//lnDLsaKlm4mFaTQe2KTcn/@public.gmane.org for any subscription related questions. -- This is the RPG programming on IBM i (RPG400-L) mailing list To post a message email: [email protected] To subscribe, unsubscribe, or change list options, visit: https://lists.midrange.com/mailman/listinfo/rpg400-l or email: RPG400-L-request-+hD5IHI5Xscn3HwCXmMcX9BPR1lH4CV8@public.gmane.org Before posting, please take a moment to review the archives at https://archive.midrange.com/rpg400-l. Please contact support-FMtJrHiV//lnDLsaKlm4mFaTQe2KTcn/@public.gmane.org for any subscription related questions.