Previous Topic: Model XDE ModuleNext Topic: Processing Program Modules


XDEs and VXDEs

XDEs (expression description elements) and VXDEs (variable expression description elements) form the compiled representation of a process at runtime. During compilation, each process statement is converted into a series of XDEs that represent the operands and operations within each statement. The XDEs of the statements are strung together to form the compiled representation of the process. At runtime, the runtime system builds a VXDE for each XDE. VXDEs contain variable runtime information; the information in XDEs does not change.

The compiled representation of a function consists of one operand XDE/VXDE for each parameter and one function XDE/VXDE for the function. These XDE/VXDE pairs contain the following information:

The DSECTs for the XDE and VXDE are shown below.

The runtime use of the XDEs and VXDEs is described under "Runtime Processing" later in this appendix.

DSECT of the XDE (Expression Description Element)

         SPACE 1
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*          #AXDEDS - EXPRESSION DESCRIPTION ELEMENT                   *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*   THIS COPY MEMBER IS INCLUDED IN #XDEDS.  IF ANY CHANGES ARE       *
*  MADE HERE, PLEASE INSURE THAT ALL MODULES CONTAINING #XDEDS ARE    *
*  REASSEMBLED.                                                       *
*                                                                     *
*  THIS MACRO ALLOWS THE ADS MODULES TO MORE EASILY REFERENCE XDE     *
*  FIELDS WHEN AN XDE IS BEING BUILT WITHOUT THE XDENEXT FIELD.       *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
         SPACE
XDEDATAD DS    0F            (REAL) DATA ADDRESS (OPERAND OR RESULT)
XDEBRNXT DS    0F            ** BRANCH OPERATOR XDES ONLY
*                            IF RELOCATABLE XDE MODE TO BE USED IN
*                            EVAL/ADSOXDES THE OFFSET
*                            OF BRANCH TARGET XDE
*                            FROM 1ST XDE ELSE REAL ADDRESS OF TARGET
XDEDTABO DS    H             (LOGICAL)DATA ADDRESS - ADCON TABLE OFFSET
XDEDDSPL DS    H             (LOGICAL) DATA ADDRESS - DISPLACEMENT
*   NOTE THAT REAL ADDRESSES ARE DISTINGUISHED FROM LOGICAL ADDRESSES
*   (TABLE OFFSET/DISPLACEMENT PAIRS) BY THE X'80' BIT OF THE HIGH
*   ORDER ADDRESS BYTE - ON => REAL, OFF => LOGICAL.
         SPACE
XDETGT   EQU   X'80'      High order bit of DYN used as temporary
*                           flag during executable code generation
*                           with following meaning :
*                            ON  -> This XDE is a target of a BRC2 XDE
*                            OFF -> This XDE is a NOT a BRC2 target
*                         This bit will ALWAYS be OFF in ALL XDEs
*                           in a final FDB.
XDEDYN   DS    H             OFFSET INTO DYNAMIC AREA OF VXDE
XDEDATLN DS    0H            OPERAND LENGTH (IN BYTES)
XDEBROFF DS    0H            ** BRANCH OPERATOR XDES ONLY
*                            OFFSET IN XDES OF BRANCH TARGET FROM
*                            BRANCH OPERATOR.  ONLY USED WHEN CONTIG.
*                            XDE MODE USED IN EVAL.
*                            ALWAYS USED IN ADSOXDES.
XDEBITDP DS    C             BIT DISPLACEMENT (FOR MB-BIN)
XDEBITLN DS    C             LEN (NBR OF BITS)(FOR MB-BIN)
         ORG   XDEDATLN
XDEEPWR  DS    C             POWER 10-1       (FOR EDIT)
XDEEPLN  DS   0C             PICTURE LENGTH   (FOR EDIT)
XDEESGN  DS    C             SIGN CHARACTER   (FOR EDIT)
XDENODEC DS    C             NUMBER OF DECIMAL PLACES
XDEDATYP DS    C             OPERAND DATA TYPE
         SPACE
*   XDE DATA TYPE EQUATES :
XDEDGRP  EQU   0             GROUP
XDEDEBCD EQU   1             EBCDIC
XDEDHBIN EQU   2             BINARY HALFWORD
XDEDFBIN EQU   3             BINARY FULLWORD
XDEDSPAK EQU   4             PACKED DECIMAL (SIGNED)
XDEDUPAK EQU   5             PACKED DECIMAL (UNSIGNED)
XDEDSZON EQU   6             ZONED DECIMAL (SIGNED)
XDEDUZON EQU   7             ZONED DECIMAL (UNSIGNED)
XDEDFLTD EQU   8             DISPLAY FLOATING POINT
XDEDSFLT EQU   9             INTERNAL FLOAT (SHORT)
XDEDLFLT EQU   10            INTERNAL FLOAT (LONG)
XDEDBIT  EQU   11            BIT
XDEDDBIN EQU   12            BINARY DOUBLEWORD
XDEDFC   EQU   13            FIGURATIVE CONSTANT
XDEDMBIN EQU   14            MULTI-BIT BINARY (PL1 STYLE)
XDEDVCHR EQU   15            VARYING CHARACTER
XDEDEDIT EQU   16            EDIT INFO
XDEDEDP  EQU   17            EDIT PICTURE
XDEDGEXT EQU   18            EXTERNAL GRAPHICS SO......SI
XDEDGINT EQU   19            INTERNAL GRAPHICS
* FOLLOWING EQU SHOULD ALWAYS REFLECT THE HIGHEST DATA TYPE
* !!!!!!!!!!!!!!!!   PLEASE  NOTE : !!!!!!!!!!!!!!!!!!!!!!!
* !!!! ANY CHANGE TO THE FOLLOWING EQUATE REQUIRES CHGS !!!
* !!!! TO RHDCEVAL AND ADSOXDES.
* !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
XDEDMXTP EQU   XDEDGINT      MAX DATA TYPE VALUE
*   NOTE THAT RHDCEVAL CURRENTLY ONLY SUPPORTS BIT FIELDS IN LOGICAL
*  OPERATIONS.
         SPACE
XDEOPTYP DS   0C             OPERATION/OPERAND CODE
XDEEPAD  DS    C             PAD CHARACTER       (FOR EDIT)
         SPACE
*   XDE OPERATOR TYPE EQUATES :
XDEOOPND EQU   0             OPERAND (NOT OPERATOR)
XDEOPNOT EQU   5             LOGICAL "NOT"
XDEOPOR  EQU   6             LOGICAL "OR"
XDEOPAND EQU   7             LOGICAL "AND"
XDEOPCNJ EQU   9             CLASS OF LOGICAL CONJUNCTIONS
XDEOPEQ  EQU   10            "EQ" (RELATIONAL OPERATION)
XDEOPNE  EQU   11            "NE"
XDEOPLT  EQU   12            "LT"
XDEOPLE  EQU   13            "LE"
XDEOPGT  EQU   14            "GT"
XDEOPGE  EQU   15            "GE"
XDEOMTCH EQU   16            "MATCHES"
XDEOPCON EQU   17            "CONTAINS"
XDEOPCMP EQU   18            "COMPARE"; 8:EQUAL, 4:<, 2:>

XDEOPREL EQU   19            CLASS OF RELATIONAL OPERATORS
XDEOUNMN EQU   20            UNARY "-"
XDEOADDN EQU   21            "+"
XDEOBNMN EQU   22            BINARY "-"
XDEOMULT EQU   23            "*"
XDEOPDIV EQU   24            "/"
XDEOPDVR EQU   25            "/" WITH REMAINDER
XDEOPART EQU   29            CLASS OF ARITHMETIC OPERATORS
*   NOTE : Test Under Mask used as pseudo-operator to
*          process "boolean variables", e.g. Map Status tests.
*          This operator will never appear directly
*          in an XDE list.
XDEOPTM  EQU   35            "TEST UNDER MASK"
XDEOASGN EQU   40            "ASSIGNMENT"
*   NOTE : MULTIPLE ASSIGNMENT NO LONGER SUPPORTED
*          Operator code available for reuse.
*DEOASGM EQU   41            "ASSIGNMENT",MULTIPLE TARGETS
XDEOASGR EQU   42            REVERSE ASSIGNMENT
XDEOINDX EQU   45            ARRAY "INDEX"
*
*   NOTE : DATE CONVERSIONS NO LONGER SUPPORTED.
*          THESE CODES ARE AVAILABLE FOR REUSE.
*
*DEODTJA EQU   50            JULIAN DATE TO GREGORIAN (AMER.
*DEODTJG EQU   51            JULIAN DATE TO GREGORIAN (WORLD
*DEODTAJ EQU   52            GREGORIAN DATE (AMER. - MMDDYY)
*DEODTGJ EQU   53            GREGORIAN DATE (WORLD - DDMMYY)
*DEODTES EQU   55            CLASS OF DATE CONVERSIONS
*   NOTE : CONCATENATE NO LONGER SUPPORTED.
*          Operator code available for reuse.
*DEOCONC EQU   60            "CONCATENATION"
*   NOTE : INDA ONLY USED BY DEBUGGER.
*          Not supported by ADSOXDES.
XDEOINDA EQU   65            INDIRECT ADDRESSING
** Following is a "pseudo-opcode" used only in generation
** of machine code for True/False DXBs.  This opcode will NEVER
** appear in an XDE list.  It is used only for convenience
** so that generating code for T/F DXBs easily fits into the
** standard methodology of code generation.
XDEODXTF EQU   78            True/False DXB
XDEOBRC2 EQU   79            BRANCH OPERATOR
XDEOBRCH EQU   80            BRANCH OPERATOR
*    NOTE : IF A NEW OPERATOR CODE IS ADDED WHICH IS
*           GREATER THAN THE CURRENT VALUE OF XDEOMXTP,
*           WE MUST CHANGE XDEOMXTP TO THIS NEW VALUE.
*           IN THIS CASE, WE MUST ALSO ADD ENTRIES TO THE
*           RHDCEVAL/ADSOXDES OPTABLE.
*           TO MINIMIZE THE SIZE OF OPTABLE,
*           IT WOULD BE BEST TO ASSIGN NEW CODES <=
*           THE CURRENT VALUE OF XDEOMXTP.
*           RHDCEVAL/ADSOXDES CURRENTLY ASSUME THAT THE ONLY
*           VALID OPTYP > XDEOMXTP IS XDEOUFUN AND THIS IS
*           HANDLED AS A SPECIAL CASE.

XDEOMXTP EQU   XDEOBRCH      MAX OPTYP VALID FOR USE WITH
*                            RHDCEVAL/ADSOXDES OPTABLE.
XDEADSLR EQU   253           "OF LR" OPERAND (USED BY ADS/ONLINE)
*                            CODE NOT USED FOR AN OPERATOR
XDEOKWD  EQU   254           KEYWORD - USED BY LRF.
*                              ALL OTHERS TREAT AS OPERAND
XDEOUFUN EQU   255           USER-DEFINED FUNCTION
XDEFLAG  DS    C             FLAG BYTE
XDEFNVL  EQU   X'80'         FIELD IS NOT VALUED
XDEFNED  EQU   X'40'         NO DATA VALIDATION NEEDED
*                            (FOR PACKED/ZONED FIELDS)
XDEFNCV  EQU   X'20'         NO CONVERSION NEEDED
XDEADDR  EQU   X'10'         XDEDATAD IS OPRND,VS OPRND ADR
*                            XDEADDR USED ONLY BY DEBUGGER
XDEFFCZ  EQU   X'08'         FIGURATIVE CONSTANT ZERO
XDEBTF   EQU   X'08'         ** BRANCH OPERATOR XDES ONLY
*                            ON  => BRANCH IF PREVIOUS RESULT TRUE
*                            OFF => BRANCH IF PREVIOUS RESULT FALSE
XDEBNEG  EQU   X'04'         ** BRANCH2 OPERATOR XDES ONLY
*                            If we branch to last XDE, final
*                            result is value at top of XDE stack.
*                            ON  => This value must be negated
*                            OFF => Value is correct as is
XDEBEND  EQU   X'02'         ** BRANCH2 OPERATOR XDES ONLY
*                            Special flag for branch on last XDE
*                            in list to say final value must be
*                            negated.
XDEFTRUN EQU   X'02'         TRUNCATE IF DST DEC < SRC DEC
XDEFRQST EQU   X'01'         USED BY LOGICAL RECORD PROCESSING
         SPACE 1
*                            FLAG CODES FOR EDIT
XDEEF99  EQU   X'01'         SIGNIFICANCE ON HI ORDER
XDEEFLT  EQU   X'04'         FLOAT THE SIGN CHARACTER
*    Blank on zero flag never utilized by any EVAL callers
*DEEFBZ  EQU   X'08'         BLANK ON ZERO
XDEEFPI  EQU   X'10'         XDEEADR POINTS TO PICTURE
XDEEFJL  EQU   X'20'         LEFT JUSTIFY OUTPUT
XDEEFNE  EQU   X'40'         PICTURE IS ALL X'S
XDEEFNS  EQU   X'80'         DO NOT SCALE SOURCE
*
XDELEN1  EQU   *-XDE         LENGTH OF STANDARD XDE
         SPACE
*   FOR USER DEFINED FUNCTIONS, SEVERAL ADDITION FLDS ARE REQUIRED
XDEUPGMN DS    CL8                 PROGRAM NAME
XDEUNOPS DS    XL1                 NBR OPERANDS
XDEUFUNC DS    XL1                 FUNCTION NUMBER
XDEUSTLN DS    H                   REQ'D STORAGE LENGTH
XDEUPGMV DS    H                   PROGRAM VERSION
XDEUFLG1 DS    XL1                 USER FUNCTION FLAG BYTE
XDEUAGFU EQU   X'80'               AGGREGATE FUNCTION
         DS    XL1                 UNUSED
XDELEN2  EQU   *-XDE         LENGTH OF "USER FUNCTION" XDE
         SPACE
*   EQUATES FOR RESULTS OF COMPARISONS
XDECMPEQ EQU   X'08'        RESULT OF COMPARE IS =
XDECMPLT EQU   X'04'        RESULT OF COMPARE IS <
XDECMPGT EQU   X'02'        RESULT OF COMPARE IS >
         SPACE

DSECT of the VXDE (Variable Expression Description Element)

* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*   THE VXDE IS THE DYNAMIC (WRITABLE) PORTION OF THE XDE             *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
VXDE     DSECT                            11:16:59 04/14/87
         SPACE
VXDEFLAG DS    0C            FLAG BIT FOR NON-VALUED RESULT
VXDEFNVL EQU   X'80'         NON-VALUED RESULT
VXDESNXT DS    F             OPERAND STACK NEXT XDE ADDR
VXDEFLG2 DS    0C            FLAG BIT FOR ALREADY VALIDATED DECIMAL
VXDEFNED EQU   X'80'         ALREADY VALIDATED DECIMAL
VXDEXDEA DS    F             CORRESPONDING XDE ADDRESS
VXDEDADR DS    F             REAL DATA FIELD ADDRESS
VXDEDLEN EQU   *-VXDE
         SPACE 1
*        FOR USER-DEFINED FUNCTIONS, THE FOLLOWING FLDS
*        ARE ALSO REQUIRED.
         SPACE 1
VXDEUPGA DS    F                   PROGRAM ADDR
VXDEUWKA DS    0F                  WORK AREA ADDR
VXDEUWTO DS    H                   LOGICAL ADDR  TBL OFFSET
VXDEUWDS DS    H                   LOGICAL ADDR  DISPL
VXDEUFLG DS    CL1                 FLAG FOR USER FUNCTIONS
VXDEUBRK EQU   X'80'               AGGREGATE FUNCTION BREAK
VXDEUINT EQU   X'40'               AGGREGATE FUNCTION INIT
VXDEUNIV EQU   X'20'               NO INITIAL VALUE FOR AGG FUN BREAK
VXDEUBAD EQU   X'10'               BAD DATA WITHIN BREAK
VXDEUOVR EQU   X'08'               OVERFLOW WITHIN BREAK
VXDELOD  #FLAG X'04'               USER PGM WAS #LOADED
         DS    XL3                 UNUSED
VXDEDLN2 EQU   *-VXDE              LNG OF EXTENSION
         SPACE
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*   THE XDEIX IS THE DOPE VECTOR USED IN "INDEX" OPERATIONS TO DEFINE *
*  THE FORMAT OF THE ARRAY DIMENSIONS BEING ADDRESSED                 *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
XDEIX    DSECT
XDEIXDOA DS    F             "DEPEND ON" CONTROL FIELD ADDR
XDEIXNDM DS    H             NUMBER OF DIMENSIONS (IN ARRAY)
XDEIXFLG DS    C             FLAG BYTE
XDEIXFDF EQU   X'80'         FULLWORD "DEPENDS ON" CONTROL FIELD
XDEIXFDH EQU   X'40'         HALFWORD "DEPENDS ON" CONTROL FIELD
         DS    C             UNUSED BYTE
XDEIXRLN EQU   *-XDEIX       LENGTH OF DDOPE VECTOR ROOT
         SPACE
*   THE FOLLOWING FIELDS ARE REPEATED ONCE FOR EACH DIMENSION IN
*   THE ARRAY - FOR MBB TABLES, OFFSET AND SIZE ARE IN BITS
         SPACE
XDEIXOFF DS    H             FIELD OFFSET WITHIN CONTAINING OCCURRENCE
XDEIXSIZ DS    H             SIZE OF A DIMENSION OCCURRENCE
XDEIXMAX DS    H             MAXIMUM SUBSCRIPT VALUE FOR DIMENSION
XDEIXDLN EQU   *-XDEIXOFF    LENGTH OF ONE DIMENSION DESCRIPTOR
XDEIXLMT EQU   15      Maximum number of dimensions supported by ADS
         EJECT