não Specman ter variáveis ??estáticas?
Pergunta
Eu tenho o seguinte código no Specman que herdei:
some_method() is {
var a: bool;
if (!a) {
a = some_other_method();
};
};
O meu entendimento é que cada some_method()
tempo é chamado, a
é gerado de novo, e não há nenhum sentido em verificar o valor da a
antes de ser atribuído. No entanto, pode ser que eu estou faltando alguma coisa aqui. Por exemplo, se a
é estático, então este código faz sentido, o que me leva à minha pergunta:
Existe alguma maneira para uma variável a ser estática em Specman?
Solução
não existem variáveis ??estáticas como em C. A variável em um método tem seu valor padrão (False
neste caso) se não for inicializado, então você deve ser if (!a)
direito deve ser sempre True
.
As coisas seriam diferentes se a
era um membro struct, então, como em outras linguagens OO que manteria lá o valor ao longo de várias chamadas de método ea verificação faria mais sentido:
struct some_struct_s {
a : bool;
some_method() is {
if (!a) {
a = some_other_method();
};
};
};
Você pode verificar coisas como esta também na interativo prompt:
Specman> var a : bool;
Specman> print a
a = FALSE
Há a ajuda interativa também é bom, por exemplo tentativa:
Specman> help variable
e selecione a entrada (por número) sn_eref: variables : declaring
. Lá você vai encontrar todas as informações relevantes para a sua pergunta.
Cheers, Daniel
Outras dicas
membros estáticos struct (eventos, campos, métodos) foram adicionados à linguagem em Specman v15.2. Um campo estático não pode ser gerado, física (%) ou utilizado em quando subtipos.
struct some_struct_s {
a : bool;
some_method() is {
if (!a) {
a = some_other_method();
};
};
};
-- Change field 'a' for all instances
on xxx { some_struct_s::a = TRUE; };
Eis alguns comentários do teamspecman blog: membros estáticos em e