Numéros de ligne dans les Macros migrées fusionnées

Lorsque plusieurs Macros insèrent des lignes dans la même fonction ou sous-fonction de l'instance appelante, elles doivent être fusionnées. Leurs lignes s'intercalent. Pour que la fusion des Macros gère correctement l'organisation des lignes, les lignes de condition sont distinguées des lignes de traitement. Pour éviter les lignes de traitement orphelines, les lignes de la PROCEDURE DIVISION sont parfois automatiquement repositionnées dans le code généré et les étiquettes sont parfois automatiquement recalculées dans la vue Structure du Code Généré.

Toutes les lignes de traitement doivent être rattachées à des lignes de condition, si elles existent. Une condition peut être indiquée sur plusieurs lignes. Ainsi, par exemple, la première ligne d'une condition peut être IF, suivie d'une ligne AND, elle-même suivie d'une ligne OR. Dans l'éditeur de COBOL et la vue Structure du Code Généré de l'instance appelante, les lignes de condition apparaissent toujours dans l'ordre croissant de leurs numéros de ligne, même si ces lignes appartiennent à des Macros différentes. Les lignes de traitement dépendant de ces lignes de condition doivent aussi être affichées dans l'ordre, après la dernière ligne de la condition de laquelle elles dépendent. Le numéro de ligne de la dernière ligne de condition constitue les 3 premiers chiffres du numéro de ligne des lignes de traitement rattachées à la condition. Dans certains cas, le placement des lignes de traitement provenant de différentes Macros est effectué sans repositionnement de ces lignes dans le code généré ni recalcul de leurs étiquettes dans la vue Structure du Code Généré. En revanche, dans d'autres cas, certaines lignes de traitement sont automatiquement repositionnées et leurs étiquettes recalculées pour éviter l'apparition de lignes de traitement orphelines.

Fusion sans repositionnement des lignes de traitement ni recalcul de leurs numéros de ligne

Si la fusion ne crée pas de lignes de traitement orphelines, c'est à dire non rattachées à la condition de la sous-fonction, alors les lignes de traitement s'intercalent lors de la génération de l'instance appelante sans repositionnement ni recalcul. Elles sont classées selon l'ordre croissant de leurs numéros de ligne.

La vue Structure du Code Généré affiche d'abord l'étiquette de la ligne de titre de la fonction ou sous-fonction, si elle a été spécifiée. Cette étiquette est constituée de N, du code de la fonction ou sous-fonction et des 3 caractères du numéro de ligne (N5632000 par exemple). La vue affiche ensuite l'étiquette de la ligne de déclaration du niveau de la fonction ou sous-fonction, constituée de F, du code de la fonction ou sous-fonction et des 3 caractères du numéro de ligne (F5632000 par exemple). Les autres étiquettes, correspondant aux lignes de traitement, débutent aussi par F et par le code de la fonction ou sous-fonction. Les numéros de ligne, en revanche, sont sur 6 caractères (F5632120200 par exemple).
Exemple : L'exemple suivant montre deux Macros qui insèrent des lignes dans la sous-fonction F56BB. La Macro AAASQ8 contient une ligne 210210. La Macro AAASQ7 contient une ligne de traitement 100100 et une ligne de traitement 200200. Les deux Macros sont appelées dans le même Programme. Après génération de ce Programme, les lignes de traitement des deux Macros s'intercalent en fonction de l'ordre croissant de leurs numéros de ligne. La vue Structure du Code Généré affiche, dans l'ordre, les lignes F56BB100100, F56BB200200, puis F56BB210210.
Figure 1. Macros fusionnées sans recalcul des étiquettes
Cet exemple montre les lignes source des 2 Macros, la sous-fonction générée dans le Programme appelant et les étiquettes affichées dans la vue Structure du Code Généré. Le contenu de chaque photo d'écran est décrit dans les explications qui précédent.

Fusion avec repositionnement des lignes de traitement et recalcul de leurs numéros de ligne

Si la fusion crée des lignes de traitement orphelines, c'est à dire non rattachées à la condition de la sous-fonction, alors ces lignes sont repositionnées dans le code généré de l'instance appelante et les étiquettes correspondantes sont recalculées.

Dans le code généré, elles s'intercalent entre la dernière ligne de condition et la première ligne de traitement qui lui est rattachée. Dans la vue Structure du Code Généré, les 3 premiers caractères du numéro de ligne des lignes de traitement repositionnées sont modifiés et correspondent alors au numéro de ligne de la dernière condition. Les 3 derniers chiffres de leurs numéros de ligne restent inchangées.
Exemple : L'exemple suivant montre deux Macros qui insèrent des lignes dans la sous-fonction F56BB. La Macro AAASQ2 contient une ligne 000 avec une condition IT, une ligne 010 avec la suite de la condition commençant par AND, puis des lignes de traitement 100100 et 200200. La Macro AAASQ3 complète la condition avec une ligne de condition 075 commençant par AND, une ligne de condition 150 commençant par AND, une ligne de condition 210 commençant par OR, puis une ligne de traitement 210210. Les deux Macros sont appelées dans le même Programme. Après génération de ce Programme, les lignes de condition des deux Macros s'intercalent. La vue Structure du Code Généré affiche, dans l'ordre croissant, les étiquettes des conditions F56BB000, F56BB010, jusqu'à F56BB210. Elle affiche ensuite les étiquettes des lignes de traitement recalculées en fonction de la dernière ligne de condition, dont le numéro est 210. La ligne 100100 de la Macro AAASQ2 est donc recalculée en F56BB210100 et la ligne 200200 est recalculée en F56BB210200.
Figure 2. Macros fusionnées avec recalcul des étiquettes
Cet exemple montre les lignes source des 2 Macros, la sous-fonction générée dans le Programme appelant et les étiquettes affichées dans la vue Structure du Code Généré. Le contenu de chaque photo d'écran est décrit dans les explications qui précédent.

Vos commentaires