Re: Why you shouldn't be afraid to use VARCHAR in RPGLE

Barbara Morris <[email protected]>
Newsgroups gmane.comp.lang.as400.rpg
Organization IBM
Message-ID <[email protected]>
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.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.