Ошибка компиляции Specman e: нет такой переменной 'XXX'

Я определяю переменную my_reg_file в функции post_access() (эта функция является vr_ad хуком для реализации побочных эффектов):

//file1.e
extend TIMER_LOAD_0 vr_ad_reg {
    post_access(direction : vr_ad_rw_t) is first {
        var my_reg_file : TIMER vr_ad_reg_file = 
        get_parents()[0].as_a(TIMER vr_ad_reg_file);

        ....  

    };
};

Затем я расширяю эту функцию в другом электронном файле:

//file2.e
extend TIMER_LOAD_0 vr_ad_reg {
    post_access(direction : vr_ad_rw_t) is also {
        start my_reg_file.some_tcm();
    };
};

Я получаю ошибку компиляции:

*** Error: No such variable 'my_reg_file'

Почему post_access() не распознает переменную my_reg_file? Спасибо за помощь.

Примечание: файл file1.e импортируется перед файлом file2.e.


person Halona    schedule 16.09.2014    source источник
comment
Спасибо, помог мне выделить :)   -  person LordTitiKaka    schedule 17.09.2014


Ответы (2)


my_reg_file — это локальная переменная этого конкретного слоя методов, и она не используется совместно с другими слоями методов. Я думаю, что единственный способ общения между уровнями методов: используя сохраненную переменную результата, к которой можно получить доступ из любого уровня метода. б. используя элемент структуры.

person Raz    schedule 16.09.2014

Другое решение, которое кажется даже лучшим, состоит в том, чтобы добавить к этому подтипу отдельный метод, например. get_my_reg_file(), который вернет нужное значение, а затем вызовет этот метод там, где это значение необходимо, вместо использования локальной переменной.

person Yuri Tsoglin    schedule 16.09.2014