как я могу создать ссылку на переменную в specman?
Вопрос
У меня есть следующий код в 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;
};
Теперь кажется расточительным писать задание на x
дважды;один раз во время инициализации и один раз во время цикла.
Что я действительно хочу использовать, так это ссылку на длинное имя переменной, чтобы я мог сделать:
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
};
Можно ли это сделать в specman?
Решение
specman / e обычно использует ссылки для структур и списков, поэтому, если ваш тип переменной является одним из них, ваш второй пример должен сработать.Для integer
или boolean
Я не знаю способа использовать ссылку на переменную.В любом случае, две идеи, которые могли бы вам помочь:
Добавьте указатель на другую структуру и привяжите его к конфигурационному файлу:
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; };
Обновить: Вы можете найти более подробную информацию об этой технике в этот пост Команды Specman.
Оберните свой цикл while в функцию, там вы можете передавать параметры по ссылке (см.
help pass reference
):some_func(x : *uint) is { while (x == some_value) { // stuff ... }; };
Надеюсь, это поможет!
Дэниел