Модуль 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.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, но еще не помеченных как используемые.
Вспомогательные функции для предупреждения 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 : Parsetree.signature -> Misc.alerts
val alerts_of_str : 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 истинно, если атрибут с именем name или "ocaml." ^ name присутствует в attrs. Он помечает этот атрибут как используемый для целей предупреждений о неправильно размещенных атрибутах.
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 истинно, если имя атрибута 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
© 1995-2024 INRIA.
https://ocaml.org/manual/5.2/api/compilerlibref/Builtin_attributes.html