15.4 Пользовательские атрибуты и генерация кода
attr Audit { level: Level = Level.Info }
comptime fn Audit.apply(d: Decl, a: Audit) -> Decl | CompileError {
d.wrapBody(body => quote { log.at($a.level, "call {$d.name}"); $body })
}attr Имя { поля }объявляет атрибут;comptime fn Имя.apply(d: Decl, a: Имя)— обработчик, вызываемый для каждого объявления с этим атрибутом.std.comptimeдаёт AST (Decl,Expr,Type),quote { … }с подстановками$xи диагностикуCompileError.@derive(I)реализован так же. Сгенерированный код проверяется как обычный.
Определяется реализацией. Генерация кода по атрибутам (D-8052; D-7530).
attr Имя { поля }в этой реализации объявляет тип данных, а@Имя(…)работает какMiddleware(§10.2); обработчикcomptime fn Имя.apply(d: Decl, a: Имя), переписывающий объявления, зарезервирован и не реализован (необязательная возможность).
См. также
Исходник: docs/spec/oxl-standard.md