Модуль Builtin_attributes
module Builtin_attributes: sig .. end
Поддержка встроенных атрибутов:
- ocaml.alert
- ocaml.boxed
- ocaml.deprecated
- ocaml.deprecated_mutable
- ocaml.explicit_arity
- ocaml.immediate
- ocaml.immediate64
- ocaml.inline
- ocaml.inlined
- ocaml.noalloc
- ocaml.poll
- ocaml.ppwarning
- ocaml.remove_aliases
- ocaml.specialise
- ocaml.specialised
- ocaml.tailcall
- ocaml.tail_mod_cons
- ocaml.unboxed
- ocaml.untagged
- ocaml.unrolled
- ocaml.warnerror
- ocaml.warning
- ocaml.warn_on_literal_pattern
Предупреждение: этот модуль нестабилен и входит в состав compiler-libs.
Отслеживание атрибутов для предупреждения 53
type current_phase =
|
| Parser
|
|
| Invariant_check
|
register_attr необходимо вызвать для расположений всех атрибутов, которые следует отслеживать для выявления предупреждений о неправильно размещённых атрибутах. В частности, его следует вызывать для всех атрибутов, присутствующих в исходной программе, за исключением атрибутов, содержащихся в полезной нагрузке другого атрибута (поскольку ppx может оставить их без изменений, и компилятор намеренно их игнорирует).
Аргумент current_phase указывает, когда вызывается эта функция
- либо при создании атрибута в парсере, либо при обнаружении атрибута во время проверки в модуле
Ast_invariants. Это позволяет отслеживать только атрибуты из окончательной версии дерева разбора: мы пропускаем добавление атрибутов, обнаруженных во время разбора, если видим, что позднее будет запущен ppx, поскольку проверкаAst_invariantsвсегда выполняется над результатом работы ppx.
Обратите внимание, что проверка Ast_invariants также выполняется над деревьями разбора, созданными из сериализованных файлов ast, если ppx не используется. Это гарантирует, что в таких случаях мы не пропустим атрибуты.
val register_attr : current_phase -> string Location.loc -> unit
val mark_payload_attrs_used : Parsetree.payload -> unit
Помечает атрибуты, скрытые в полезной нагрузке используемого другого атрибута, для выявления предупреждений о неправильно размещённых атрибутах (см. комментарий выше к current_phase). В парсере проще всего добавить эти атрибуты в таблицу, а затем удалить их, чем передавать состояние, указывающее, находимся ли мы в полезной нагрузке атрибута.
val warn_unused : unit -> unit
Выдаёт предупреждения о неправильно размещённых атрибутах для всех атрибутов, созданных с помощью mk_internal, но ещё не помеченных как используемые. Ничего не делает, если компиляция останавливается до этапа lambda из-за флагов командной строки.
Вспомогательные функции для предупреждения 53 и атрибутов окружения
Некоторые атрибуты, например маркеры устаревания, не влияют на компиляцию определения, к которому они относятся, а приводят к предупреждениям при последующем использовании этого определения. Это реализовано путём перемещения исходных атрибутов в окружение, где они будут обнаружены при последующих обращениях.
Чтобы предупреждения о неправильно размещённых атрибутах корректно работали для таких атрибутов, мы помечаем их как «используемые» при перемещении в окружение. Для этого используются вспомогательные функции из этого раздела.
val mark_alert_used : Parsetree.attribute -> unit
Помечает атрибут как используемый для выявления предупреждений о неправильно размещённых атрибутах, если это alert. Вызывайте эту функцию при перемещении в окружение элементов, которым разрешены атрибуты alert.
val mark_alerts_used : Parsetree.attributes -> unit
То же, что и List.iter mark_alert_used.
val mark_warn_on_literal_pattern_used : Parsetree.attributes -> unit
Помечает атрибуты "warn_on_literal_pattern" как используемые для выявления предупреждений о неправильно размещённых атрибутах. Вызывайте эту функцию при перемещении конструкторов в окружение.
val mark_deprecated_mutable_used : Parsetree.attributes -> unit
Помечает атрибуты "deprecated_mutable" как используемые для выявления предупреждений о неправильно размещённых атрибутах. Вызывайте эту функцию при перемещении меток изменяемых полей в окружение.
Вспомогательные функции для атрибутов alert и warning
val check_alerts : Location.t -> Parsetree.attributes -> string -> unit
val check_alerts_inclusion : def:Location.t -> use:Location.t -> Location.t -> Parsetree.attributes -> Parsetree.attributes -> string -> unit
val alerts_of_attrs : Parsetree.attributes -> Misc.alerts
val alerts_of_sig : mark:bool -> Parsetree.signature -> Misc.alerts
val alerts_of_str : mark:bool -> Parsetree.structure -> Misc.alerts
val check_deprecated_mutable : Location.t -> Parsetree.attributes -> string -> unit
val check_deprecated_mutable_inclusion : def:Location.t -> use:Location.t -> Location.t -> Parsetree.attributes -> Parsetree.attributes -> string -> unit
val error_of_extension : Parsetree.extension -> Location.error
val warning_attribute : ?ppwarning:bool -> Parsetree.attribute -> unit
Применяет настройки предупреждений из указанного атрибута. Обрабатывает "ocaml.warning"/"ocaml.warnerror" (и варианты без префикса) и помечает их как используемые для предупреждения 53. Остальные атрибуты игнорируются.
Также обрабатывает ocaml.ppwarning (если не передан аргумент ~ppwarning:false).
val warning_scope : ?ppwarning:bool -> Parsetree.attributes -> (unit -> 'a) -> 'a
Выполняет функцию в новой области видимости настроек предупреждений. Это означает, что действие любого вызова warning_attribute во время выполнения этой функции будет отменено после её завершения.
Функция также принимает список атрибутов, которые обрабатываются с помощью warning_attribute в новой области видимости до выполнения функции.
Вспомогательные функции для поиска определённых атрибутов
val has_attribute : string -> Parsetree.attributes -> bool
has_attribute name attrs имеет значение true, если в attrs присутствует атрибут с именем name или "ocaml." ^ name. Этот атрибут помечается как используемый для выявления предупреждений о неправильно размещённых атрибутах.
type attr_action =
|
| Mark_used_only
|
|
| Return
|
select_attributes actions attrs находит элементы attrs, присутствующие в actions, и либо возвращает их, либо только помечает как используемые — в соответствии с соответствующим attr_action.
Каждый элемент (nm, action) списка actions представляет собой атрибут вместе с attr_action, указывающим, что следует с ним делать. Действие позволяет учитывать различные конфигурации компилятора. Если атрибут используется только в некоторых конфигурациях компилятора, важно всё равно искать его и помечать как используемый при компиляции с другими конфигурациями. В противном случае мы выдадим ложные предупреждения о неправильно размещённых атрибутах.
val select_attributes : (string * attr_action) list -> Parsetree.attributes -> Parsetree.attributes
val attr_equals_builtin : Parsetree.attribute -> string -> bool
attr_equals_builtin attr s имеет значение true, если имя атрибута равно s или "ocaml." ^ s. Это удобно для ручной проверки имён атрибутов, однако учтите, что такая проверка не приводит к пометке атрибута как используемого для предупреждения 53, поэтому обычно предпочтительнее использовать has_attribute или select_attributes.
val warn_on_literal_pattern : Parsetree.attributes -> bool
val explicit_arity : Parsetree.attributes -> bool
val immediate : Parsetree.attributes -> bool
val immediate64 : Parsetree.attributes -> bool
val has_unboxed : Parsetree.attributes -> bool
val has_boxed : Parsetree.attributes -> bool
val has_remove_aliases : Parsetree.attributes -> bool
val has_atomic : Parsetree.attributes -> bool
© 1995-2026 INRIA.
https://ocaml.org/manual/5.5/api/compilerlibref/Builtin_attributes.html