I vaguely remember that with Assembler H I could use
LEN EQU LABEL2-LABEL1 even when LABEL1 and LABEL2 were below the line where LEN 
was used
as in
EYECATCH DC YL1(LEN),=C'MYPROG...'

I can't remember whether the EQU itself was higher up or lower down the source 
code, but it was enough to get the job done.

Roops

On 9 August 2026 19:34:39 BST, Michael Stein <[email protected]> wrote:
>>>*  Case 1, symbol A is checked before definition:
>>>         AIF   (T'A EQ 'F').SKIP
>>>A        DC    F'42'
>>>.SKIP    ANOP
>>>
>>>*  Case 2, same as Case 1, but X is undefined:
>>>         AIF   (T'X EQ 'F').SKIP2
>>>A        DC    F'42'
>>>.SKIP2   ANOP
>
>>>Results:
>>>Case 1, nothing was created and no (error) messages;
>>>Case 2, symbol A was assembled as a fullword without error even though
>>>X is undefined.
>
>This is working correctly.  Keep in mind that each different version of
>the assembler has redesigned / changed the assembly language, especially
>assembler H and after which have lookahead.
>
>Looking at the High Level Assembler for z/OS & z/VM & z/VSE Language
>Reference Version 1 Release 6 (SC26-4940-08) on Lookahead in Chapter 9
>How to write conditional assembly instructions.
>
>  Lookahead mode is entered:
>
>  * When the assembler processes a conditional assembly instruction
>    and encounters an attribute reference (other than D' and O') to an
>    ordinary symbol that is not yet defined.
>
>  * When the assembler encounters a forward AGO or AIF branch in open
>    code to a sequence symbol that is not yet defined.
>
>  Lookahead is a sequential, statement-by-statement, forward scan over
>  the source text.
>
>  If the attribute reference is made in a macro, forward scan begins
>  with the first source statement following the outermost macro
>  instruction. During lookahead the assembler:
>
>  * Bypasses macro definition and generation
>  * Does not generate object text
>  * Does not perform open-code variable substitution
>  * Ignores AIF and AGO branch instructions
>  * Ignores the record following a REPRO statement
>  * Establishes interim data attributes for undefined symbols it
>    encounters in operand fields of instructions. The data attributes
>    are replaced when a symbol is encountered in definition mode.
>
>  Lookahead mode ends when the desired symbol or sequence symbol is found,
>  or when the END statement or end of file is reached. All statements
>  read by lookahead are saved on an internal file, and are fully processed
>  when the lookahead scan ends.
>
>Case 1:
>  The attribute reference to A isn't known so lookahead is entered.
>Lookahead finds the next statement which provides the attribute reference
>of A so the AIF can evaluate to true.  Now the .skip is unknown and
>Lookahead is again entered (starting with the .skip line since the
>prevous line was already scanned by lookahead).  Now that the AIF target
>has been found the AIF can happen (and the DC F doesn't get assembled).
>
>Case 2:
>  The attribute reference to X isn't known so lookahead is entered.
>Lookahead processes all the statements to the end of input looking for
>X and doesn't find any definition so T'X evaluates to 'U'.  This doesn't
>match 'F' and the AIF to evaluate to false.  Assembly proceeds, assembling
>the F'42", no errors.
>
>----------------------------------------------------------------------
>For IBM-MAIN subscribe / signoff / archive access instructions,
>send email to [email protected] with the message: INFO IBM-MAIN

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN

Reply via email to