Como posso criar uma referência a uma variável no Specman?
Pergunta
Eu tenho o seguinte código no 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;
};
Agora, parece um desperdício para escrever a atribuição para x
duas vezes; uma vez durante a inicialização e uma vez durante o loop.
O que eu realmente quero usar é uma referência ao nome da variável de comprimento, para que eu pudesse fazer:
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
};
Isso pode ser feito em Specman?
Solução
Specman / e geralmente usa referências para estruturas e listas, por isso, se o seu tipo de variável é qualquer um que o segundo exemplo deve funcionar. Para integer
ou boolean
Eu não sei uma maneira de usar uma referência para uma variável. De qualquer forma, duas idéias que podem ajudá-lo:
-
Adicionar um ponteiro para o outro struct e vinculá-lo em um arquivo de configuração:
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; };
UPDATE: Você pode encontrar mais algumas informações sobre esta técnica em deste Time Specman Publicar .
-
Envolva seu loop while em uma função, não pode passar parâmetros por referência (ver
help pass reference
):some_func(x : *uint) is { while (x == some_value) { // stuff ... }; };
Espero que isso ajude!
Daniel