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.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

Spec-Zone.ru

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