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
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