Since Assembler H the macro language runs during the first pass, so it has 
access to information from that pass so far, including for example assembler 
definitions generated by previous macros.  

SETA processing only calculates arithmetic values and has no way to track 
relocation; a SETA expression is not an assembler expression, so any assembler 
symbols included in a SETA expression must resolve to numeric values at the 
time they are encountered.  I think that evaluation of an EQU symbol may be 
retried at that point if not previously resolved, but I don't remember whether 
it tries lookahead.

Lookahead is in any case quite limited.  It can only see information which is 
in open code (ignoring any conditional assembly logic), and some information 
cannot be resolved until after the first pass, when sections and LOCTRs are 
known to be complete and their relative addresses can be resolved.

The assembler carries a lot of historical baggage, but the world relies heavily 
on compatibility.  When the PL/X or metal C compilers ran into problems 
generating the most negative decimal number, we thought it should be completely 
safe to enhance HLASM to allow negative decimal self-defining terms, because 
such terms could already be coded in hex or binary, but some customers ran into 
problems caused by macros which relied on negative decimal self-defining terms 
not being valid self-defining terms and hence not having type attribute "N".  
That was easy to work around, but it made us even more aware of the potential 
impact of the slightest change.

Jonathan Scott

-----Original Message-----
From: IBM Mainframe Assembler List <[email protected]> On Behalf 
Of Paul Gilmartin
Sent: 17 February 2026 20:42
To: [email protected]
Subject: Re: Calculating a SET symbol from a label

On 2/17/26 11:49, Jonathan Scott wrote:
>     ...
> EQU is not necessarily evaluated when encountered, but can be deferred and 
> retried later if anything isn't yet resolved.  SETA must be evaluated when 
> encountered.
>     ...
This is redolent of classic two-pass assemblers (IFOX00) which required 
definition before use in defining further symbols (EQU) or storage (ORG).  SETA 
could have done better and required only an absolute expression after lookahead.

--
gil

Reply via email to