Spec-Zone.ru › OCaml

Модуль расположения

module Location: sig .. end

Расположения исходного кода (диапазоны позиций), используемые в дереве разбора.

Предупреждение: этот модуль нестабилен и является частью compiler-libs.

type t = Warnings.loc = {
loc_start : Lexing.position;
loc_end : Lexing.position;
loc_ghost : bool;
}

Примечание об использовании Lexing.position в этом модуле. Если pos_fname = "", то используйте !input_name вместо этого. Если pos_lnum = -1, то pos_bol = 0. Используйте pos_cnum и повторно проанализируйте файл, чтобы получить номера строки и символа. В противном случае все поля корректны.

val none : t

Произвольное значение типа t; описывает пустой призрачный диапазон.

val is_none : t -> bool

Истина для Location.none, ложь для любого другого расположения

val in_file : string -> t

Возвращает пустой призрачный диапазон, расположенный в заданном файле.

val init : Lexing.lexbuf -> string -> unit

Устанавливает имя файла и номер строки lexbuf для начала именованного файла.

val curr : Lexing.lexbuf -> t

Получает расположение текущего токена из lexbuf.

val symbol_rloc : unit -> t
val symbol_gloc : unit -> t
val rhs_loc : int -> t

rhs_loc n возвращает расположение символа в позиции n, начиная с 1, в текущем правиле парсера.

val rhs_interval : int -> int -> t
val get_pos_info : Lexing.position -> string * int * int

файл, строка, символ

type 'a loc = {
txt : 'a;
loc : t;
}
val mknoloc : 'a -> 'a loc
val mkloc : 'a -> t -> 'a loc

Информация об вводе

val input_name : string ref
val input_lexbuf : Lexing.lexbuf option ref
val input_phrase_buffer : Buffer.t option ref

Функции, специфичные для верхнего уровня

val echo_eof : unit -> unit
val separate_new_message : Format.formatter -> unit
val reset : unit -> unit

Путь переписывания

val rewrite_absolute_path : string -> string

rewrite_absolute_path path переписывает path для соблюдения переменной BUILD_PATH_PREFIX_MAP, если она установлена. Она не проверяет, является ли path абсолютным или нет. Результат следующий:

  • Если BUILD_PATH_PREFIX_MAP не установлена, просто возвращается path.
  • в противном случае, переписывается с использованием отображения (и если нет совпадающих префиксов, то просто возвращается path).

См. спецификацию BUILD_PATH_PREFIX_MAP

val rewrite_find_first_existing : string -> string option

rewrite_find_first_existing path использует отображение BUILD_PATH_PREFIX_MAP и пытается найти исходный элемент в отображении, который сопоставляется с результатом, существующим в файловой системе. Возможные значения возврата:

  • None, означает либо
    • BUILD_PATH_PREFIX_MAP не установлена и path не существует, или
    • не было найдено ни одного префикса источника path в отображении,
  • Some target, означает, что target существует и либо
    • BUILD_PATH_PREFIX_MAP не установлена и target = path, или
    • target — это первый файл (в порядке приоритета), которому path сопоставил существующий в файловой системе.
  • Not_found вызвана, означает, что некоторые префиксы источника в отображении были найдены, которые соответствовали path, но ни один из них не существовал в файловой системе. Вызывающий код должен перехватить это и вывести соответствующее сообщение об ошибке.

См. спецификацию BUILD_PATH_PREFIX_MAP

val rewrite_find_all_existing_dirs : string -> string list

rewrite_find_all_existing_dirs dir накапливает список существующих каталогов, dirs, которые являются результатом отображения потенциально абстрактного каталога, dir, по всем парам отображения в переменной среды BUILD_PATH_PREFIX_MAP, если таковые имеются. Список dirs будет в порядке приоритета (начало — наивысший приоритет).

Возможные результаты:

  • [], означает либо
    • BUILD_PATH_PREFIX_MAP не установлена и dir не является существующим каталогом, или
    • если установлена, то не было совпадений префиксов dir.
  • Some dirs, означает, что dirs — это найденные каталоги. Либо
    • BUILD_PATH_PREFIX_MAP не установлена и dirs = [dir], или
    • она была установлена и dirs — это сопоставленные существующие каталоги.
  • Not_found вызвана, означает, что некоторые префиксы источника в отображении были найдены, которые соответствовали dir, но ни один из результатов отображения не являлся существующим каталогом (возможно, из-за неправильной настройки). Вызывающий код должен перехватить это и вывести соответствующее сообщение об ошибке.

См. спецификацию BUILD_PATH_PREFIX_MAP

val absolute_path : string -> string

absolute_path path сначала создает абсолютный путь, s из path, добавляя текущую рабочую директорию, если path был относительным. Затем s переписывается с использованием rewrite_absolute_path. Наконец, результат нормализуется путем устранения экземпляров '.' или '..'.

Вывод расположений

val show_filename : string -> string

В режиме -absname возвращает абсолютный путь для данного имени файла. В противном случае возвращает имя файла без изменений.

val print_filename : Format.formatter -> string -> unit
val print_loc : Format.formatter -> t -> unit
val print_locs : Format.formatter -> t list -> unit

Выделение расположения, специфичного для верхнего уровня

val highlight_terminfo : Lexing.lexbuf -> Format.formatter -> t list -> unit

Сообщения об ошибках и предупреждениях

Типы отчетов и принтеров отчетов

type msg = (Format.formatter -> unit) loc 
val msg : ?loc:t ->       ('a, Format.formatter, unit, msg) format4 -> 'a
type report_kind = 
| Report_error
| Report_warning of string
| Report_warning_as_error of string
| Report_alert of string
| Report_alert_as_error of string
type report = {
kind : report_kind;
main : msg;
sub : msg list;
}
type report_printer = {
pp : report_printer -> Format.formatter -> report -> unit;
pp_report_kind : report_printer ->
report -> Format.formatter -> report_kind -> unit
;
pp_main_loc : report_printer ->
report -> Format.formatter -> t -> unit
;
pp_main_txt : report_printer ->
report ->
Format.formatter -> (Format.formatter -> unit) -> unit
;
pp_submsgs : report_printer ->
report -> Format.formatter -> msg list -> unit
;
pp_submsg : report_printer ->
report -> Format.formatter -> msg -> unit
;
pp_submsg_loc : report_printer ->
report -> Format.formatter -> t -> unit
;
pp_submsg_txt : report_printer ->
report ->
Format.formatter -> (Format.formatter -> unit) -> unit
;
}

Принтер для reports, определенный с использованием открытой рекурсии. Цель состоит в том, чтобы сделать определение новых принтеров простым за счет повторного использования кода из существующих.

Принтеры отчетов, используемые в компиляторе

val batch_mode_printer : report_printer
val terminfo_toplevel_printer : Lexing.lexbuf -> report_printer
val best_toplevel_printer : unit -> report_printer

Обнаруживает возможности терминала и выбирает подходящий принтер

Вывод report

val print_report : Format.formatter -> report -> unit

Отображает отчет об ошибке или предупреждении.

val report_printer : (unit -> report_printer) ref

Обработчик для переопределения принтера отчетов.

Этот обработчик — unit -> report_printer а не просто report_printer: это полезно, чтобы он мог определить тип вывода (файл, терминал и т. д.) и выбрать принтер соответственно.

val default_report_printer : unit -> report_printer

Оригинальный принтер отчетов для использования в обработчиках.

Сообщения о предупреждениях

Преобразование предупреждения в отчет

val report_warning : t -> Warnings.t -> report option

report_warning loc w генерирует отчет для данного предупреждения w, или None если предупреждение не должно выводиться.

val warning_reporter : (t -> Warnings.t -> report option) ref

Обработчик для перехвата предупреждений.

val default_warning_reporter : t -> Warnings.t -> report option

Оригинальный обработчик предупреждений для использования в обработчиках.

Вывод предупреждений

val formatter_for_warnings : Format.formatter ref
val print_warning : t -> Format.formatter -> Warnings.t -> unit

Выводит предупреждение. Это просто композиция report_warning и print_report.

val prerr_warning : t -> Warnings.t -> unit

То же, что и print_warning, но использует !formatter_for_warnings в качестве форматера вывода.

Сообщения об ошибках

Преобразование Alert.t в report

val report_alert : t -> Warnings.alert -> report option

report_alert loc w генерирует отчёт для указанного предупреждения w, или None в случае, если предупреждение не нужно печатать.

val alert_reporter : (t -> Warnings.alert -> report option) ref

Обработка предупреждений.

val default_alert_reporter : t -> Warnings.alert -> report option

Оригинальный репортер предупреждений для использования в хуках.

Вывод предупреждений

val print_alert : t -> Format.formatter -> Warnings.alert -> unit

Выводит предупреждение. Это просто композиция report_alert и print_report.

val prerr_alert : t -> Warnings.alert -> unit

То же, что и print_alert, но использует !formatter_for_warnings в качестве форматера вывода.

val deprecated : ?def:t -> ?use:t -> t -> string -> unit

Выводит предупреждение о устаревании.

val alert : ?def:t ->       ?use:t -> kind:string -> t -> string -> unit

Выводит произвольное предупреждение.

val auto_include_alert : string -> unit

Выводит предупреждение о том, что -I +lib был автоматически добавлен в путь загрузки.

val deprecated_script_alert : string -> unit

deprecated_script_alert command выводит предупреждение о том, что command foo устарело в пользу command ./foo

Сообщения об ошибках

type error = report 

Ошибка — это error, которая report_kind должна быть Report_error.

val error : ?loc:t -> ?sub:msg list -> string -> error
val errorf : ?loc:t ->       ?sub:msg list ->       ('a, Format.formatter, unit, error) format4 -> 'a
val error_of_printer : ?loc:t ->       ?sub:msg list ->       (Format.formatter -> 'a -> unit) -> 'a -> error
val error_of_printer_file : (Format.formatter -> 'a -> unit) -> 'a -> error

Автоматическое сообщение об ошибках при возникновении исключений

val register_error_of_exn : (exn -> error option) -> unit

Каждый модуль компилятора, который определяет пользовательский тип исключения, который может отображаться как ошибка, должен зарегистрировать "печать" для этого исключения с помощью register_error_of_exn. Результатом печати является значение error, содержащее расположение, сообщение и необязательные дополнительные сообщения (каждое из которых также расположено).

val error_of_exn : exn -> [ `Already_displayed | `Ok of error ] option
exception Error of error

Возникновение Error e сигнализирует об ошибке e; исключение будет перехвачено, и ошибка будет выведена.

exception Already_displayed_error

Возникновение Already_displayed_error сигнализирует об ошибке, которая уже была выведена. Исключение будет перехвачено, но ничего не будет выведено.

val raise_errorf : ?loc:t ->       ?sub:msg list ->       ('a, Format.formatter, unit, 'b) format4 -> 'a
val report_exception : Format.formatter -> exn -> unit

Перевызвать исключение, если оно неизвестно.

© 1995-2024 INRIA.
https://ocaml.org/manual/5.2/api/compilerlibref/Location.html

Spec-Zone.ru

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