Spec-Zone.ru › OCaml

Модуль 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API