Diff for /rpl/src/instructions_s1.c between versions 1.20 and 1.28

version 1.20, 2010/08/26 19:07:40 version 1.28, 2011/06/20 17:54:19
Line 1 Line 1
 /*  /*
 ================================================================================  ================================================================================
   RPL/2 (R) version 4.0.19    RPL/2 (R) version 4.1.0.prerelease.1
   Copyright (C) 1989-2010 Dr. BERTRAND Joël    Copyright (C) 1989-2011 Dr. BERTRAND Joël
   
   This file is part of RPL/2.    This file is part of RPL/2.
   
Line 2773  instruction_step(struct_processus *s_eta Line 2773  instruction_step(struct_processus *s_eta
             return;              return;
         }          }
   
         if (((*s_etat_processus).s_liste_variables[(*s_etat_processus)          if ((*(*s_etat_processus).pointeur_variable_courante)
                 .position_variable_courante]).variable_verrouillee == d_vrai)                  .variable_verrouillee == d_vrai)
         {          {
             liberation(s_etat_processus, s_objet);              liberation(s_etat_processus, s_objet);
   
Line 2782  instruction_step(struct_processus *s_eta Line 2782  instruction_step(struct_processus *s_eta
             return;              return;
         }          }
           
         if (((*s_etat_processus).s_liste_variables[(*s_etat_processus)          if ((*(*s_etat_processus).pointeur_variable_courante).objet == NULL)
                 .position_variable_courante]).objet == NULL)  
         {          {
             liberation(s_etat_processus, s_objet);              liberation(s_etat_processus, s_objet);
   
Line 2792  instruction_step(struct_processus *s_eta Line 2791  instruction_step(struct_processus *s_eta
         }          }
   
         (*(*s_etat_processus).l_base_pile_systeme).indice_boucle =          (*(*s_etat_processus).l_base_pile_systeme).indice_boucle =
                 ((*s_etat_processus).s_liste_variables[(*s_etat_processus)                  (*(*s_etat_processus).pointeur_variable_courante).objet;
                 .position_variable_courante]).objet;  
     }      }
   
     /*      /*
Line 2834  instruction_step(struct_processus *s_eta Line 2832  instruction_step(struct_processus *s_eta
          */           */
   
         (*(*s_etat_processus).l_base_pile_systeme).indice_boucle = NULL;          (*(*s_etat_processus).l_base_pile_systeme).indice_boucle = NULL;
         ((*s_etat_processus).s_liste_variables[(*s_etat_processus)          (*(*s_etat_processus).pointeur_variable_courante).objet = s_objet;
                 .position_variable_courante]).objet = s_objet;  
     }      }
     else      else
     {      {
Line 3210  instruction_sto(struct_processus *s_etat Line 3207  instruction_sto(struct_processus *s_etat
          * La variable est accessible.           * La variable est accessible.
          */           */
   
         if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)          if ((*(*s_etat_processus).pointeur_variable_courante)
                 .position_variable_courante].variable_verrouillee == d_vrai)                  .variable_verrouillee == d_vrai)
         {          {
             liberation(s_etat_processus, s_objet_1);              liberation(s_etat_processus, s_objet_1);
             liberation(s_etat_processus, s_objet_2);              liberation(s_etat_processus, s_objet_2);
Line 3220  instruction_sto(struct_processus *s_etat Line 3217  instruction_sto(struct_processus *s_etat
             return;              return;
         }          }
   
         if ((*s_etat_processus).s_liste_variables[(*s_etat_processus)          if ((*(*s_etat_processus).pointeur_variable_courante).objet == NULL)
                 .position_variable_courante].objet == NULL)  
         {          {
             if (pthread_mutex_lock(&((*(*s_etat_processus)              if (pthread_mutex_lock(&((*(*s_etat_processus)
                     .s_liste_variables_partagees).mutex)) != 0)                      .s_liste_variables_partagees).mutex)) != 0)
Line 3231  instruction_sto(struct_processus *s_etat Line 3227  instruction_sto(struct_processus *s_etat
             }              }
   
             if (recherche_variable_partagee(s_etat_processus,              if (recherche_variable_partagee(s_etat_processus,
                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)                      (*(*s_etat_processus).pointeur_variable_courante).nom,
                     .position_variable_courante].nom,                      (*(*s_etat_processus).pointeur_variable_courante)
                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)                      .variable_partagee, (*(*s_etat_processus)
                     .position_variable_courante].variable_partagee,                      .pointeur_variable_courante).origine) == d_faux)
                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)  
                     .position_variable_courante].origine) == d_faux)  
             {              {
                 if (pthread_mutex_unlock(&((*(*s_etat_processus)                  if (pthread_mutex_unlock(&((*(*s_etat_processus)
                         .s_liste_variables_partagees).mutex)) != 0)                          .s_liste_variables_partagees).mutex)) != 0)
Line 3245  instruction_sto(struct_processus *s_etat Line 3239  instruction_sto(struct_processus *s_etat
                     return;                      return;
                 }                  }
   
                   if ((*s_etat_processus).autorisation_nom_implicite == 'N')
                   {
                       liberation(s_etat_processus, s_objet_1);
                       liberation(s_etat_processus, s_objet_2);
   
                       (*s_etat_processus).erreur_systeme = d_es;
                       (*s_etat_processus).erreur_execution =
                               d_ex_creation_variable_globale;
                       return;
                   }
   
                 if ((s_variable.nom = malloc((strlen((*((struct_nom *)                  if ((s_variable.nom = malloc((strlen((*((struct_nom *)
                         (*s_objet_1).objet)).nom) + 1) *                          (*s_objet_1).objet)).nom) + 1) *
                         sizeof(unsigned char))) == NULL)                          sizeof(unsigned char))) == NULL)
Line 3295  instruction_sto(struct_processus *s_etat Line 3300  instruction_sto(struct_processus *s_etat
         }          }
         else          else
         {          {
             liberation(s_etat_processus,              if ((*s_etat_processus).autorisation_nom_implicite == 'N')
                     (*s_etat_processus).s_liste_variables[(*s_etat_processus)              {
                     .position_variable_courante].objet);                  if ((*(*s_etat_processus).pointeur_variable_courante)
                           .niveau == 1)
                   {
                       liberation(s_etat_processus, s_objet_1);
                       liberation(s_etat_processus, s_objet_2);
   
             (*s_etat_processus).s_liste_variables[(*s_etat_processus)                      (*s_etat_processus).erreur_execution =
                     .position_variable_courante].objet = s_objet_2;                              d_ex_creation_variable_globale;
                       return;
                   }
               }
   
               liberation(s_etat_processus,
                       (*(*s_etat_processus).pointeur_variable_courante).objet);
               (*(*s_etat_processus).pointeur_variable_courante).objet =
                       s_objet_2;
         }          }
     }      }
     else      else
Line 3310  instruction_sto(struct_processus *s_etat Line 3327  instruction_sto(struct_processus *s_etat
          * une variable globale.           * une variable globale.
          */           */
   
           if ((*s_etat_processus).autorisation_nom_implicite == 'N')
           {
               liberation(s_etat_processus, s_objet_1);
               liberation(s_etat_processus, s_objet_2);
   
               (*s_etat_processus).erreur_systeme = d_es;
               (*s_etat_processus).erreur_execution =
                       d_ex_creation_variable_globale;
               return;
           }
   
         if ((s_variable.nom = malloc((strlen((*((struct_nom *)          if ((s_variable.nom = malloc((strlen((*((struct_nom *)
                 (*s_objet_1).objet)).nom) + 1) * sizeof(unsigned char)))                  (*s_objet_1).objet)).nom) + 1) * sizeof(unsigned char)))
                 == NULL)                  == NULL)

Removed from v.1.20  
changed lines
  Added in v.1.28


CVSweb interface <joel.bertrand@systella.fr>