в моей среде проверки у меня есть разные типы регистров с почти одинаковым именем, которое отличается только индексом, например: timer_load_0
, timer_load_1
и т. д.. Я пытаюсь создать макрос, который получает 2 параметра: string
(«имя» регистра без его индекс) и uint
(индекс регистра) и возвращает переменную типа "конкатенированный" регистр. Например, я хотел бы, чтобы команда:
my_idx : uint = 0;
create_reg "timer_load" my_idx;
вернет переменную timer_load_0
.
Мой код макроса:
define <var_by_idx'action> "create_reg <name'any> <idx'exp>" as computed {
var idx : uint = <idx'exp>.as_a(uint);
result = appendf("%s_%d",<name'any>, idx);
};
Ошибка компиляции, которую я получаю:
Error: Looking for a number but found 'my_idx'
at line 45 in @macros
var idx : uint = <idx'exp>.as_a(uint);
during execution of a define-as-computed macro:
at line 380 in @timer_monitor
create_reg "timer_load" my_idx;
Макрос распознает my_idx
не как переменную uint
, а как string
. Спасибо за любую помощь.