comment puis-je créer une référence à une variable specman?
Question
Je le code suivant 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 à deux fois x
; une fois lors de l'initialisation et une fois au cours de 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 se faire en specman?
La solution
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 ou integer
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:
-
Ajouter un pointeur à l'autre et struct 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 dans cette équipe Specman post .
-
Enveloppez votre boucle while dans une fonction, vous pouvez y passer 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