OxL Справочник OxL
РусскийEnglish

15.4 Пользовательские атрибуты и генерация кода

oxl
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