2009-06-29 10 views
0

Je le code suivant dans specman:comment puis-je créer une référence à une variable dans specman?

var x := some.very.long.path.to.a.variable.in.another.struct; 

while (x == some_value) { 
    //do something that uses x; 
    //wait for something 

    //get a new value for x 
    x = some.very.long.path.to.a.variable.in.another.struct; 
}; 

Maintenant, il semble inutile d'écrire l'affectation à x deux fois; une fois pendant l'initialisation et une fois pendant la boucle.

Ce que je veux vraiment utiliser est une référence à long nom de variable, de sorte que je pouvais faire:

var x := reference to some.very.long.path.to.a.variable.in.another.struct; 

while (x == some_value) { 
    //do something that uses x; 
    //wait for something 
    //no need to update x now since it's a reference 
}; 

cela peut-il être fait en specman?

Répondre

1

specman/e utilise généralement des références et des listes pour les structures, donc si votre type de variable est soit de celui-ci votre deuxième exemple devrait fonctionner. Pour integer ou boolean Je ne sais pas un moyen d'utiliser une référence à une variable. Quoi qu'il en soit, deux idées qui pourraient vous aider:

  1. Ajouter un pointeur à l'autre struct et le lier dans un fichier de configuration:

    struct a { other_variable : uint; }; 
    struct b { 
        other_struct : a; 
        some_func() is { 
         var x : uint = other_struct.other_variable; 
         while (x == some_value) { 
          x = other_struct.other_variable; 
         }; 
        }; 
    }; 
    extend cfg { 
        struct_a : a; 
        struct_b : b; 
        keep struct_b.other_struct == struct_a; 
    }; 
    

    MISE À JOUR: Vous pouvez trouver plus d'informations sur cette technique au this Team Specman Post.

  2. Enveloppez votre boucle while dans une fonction, il vous pouvez transmettre des paramètres par référence (voir help pass reference):

    some_func(x : *uint) is { 
         while (x == some_value) { 
          // stuff ... 
         }; 
        }; 
    

Hope this helps!

Daniel

Questions connexes