Модуль расположения
module Location: sig .. end
Расположения исходного кода (диапазоны позиций), используемые в дереве разбора.
Предупреждение: этот модуль нестабилен и является частью compiler-libs.
type t = Warnings.loc = {
loc_start :
| |
loc_end :
| |
loc_ghost :
|
} Примечание об использовании 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 :
| |
loc :
|
} 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).
val rewrite_find_first_existing : string -> string option
rewrite_find_first_existing path использует отображение BUILD_PATH_PREFIX_MAP и пытается найти исходный элемент в отображении, который сопоставляется с результатом, существующим в файловой системе. Возможные значения возврата:
-
None, означает либо- BUILD_PATH_PREFIX_MAP не установлена и
pathне существует, или - не было найдено ни одного префикса источника
pathв отображении,
- BUILD_PATH_PREFIX_MAP не установлена и
-
Some target, означает, чтоtargetсуществует и либо- BUILD_PATH_PREFIX_MAP не установлена и
target=path, или -
target— это первый файл (в порядке приоритета), которомуpathсопоставил существующий в файловой системе.
- BUILD_PATH_PREFIX_MAP не установлена и
-
Not_foundвызвана, означает, что некоторые префиксы источника в отображении были найдены, которые соответствовалиpath, но ни один из них не существовал в файловой системе. Вызывающий код должен перехватить это и вывести соответствующее сообщение об ошибке.
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.
- BUILD_PATH_PREFIX_MAP не установлена и
-
Some dirs, означает, что dirs — это найденные каталоги. Либо- BUILD_PATH_PREFIX_MAP не установлена и
dirs = [dir], или - она была установлена и
dirs— это сопоставленные существующие каталоги.
- BUILD_PATH_PREFIX_MAP не установлена и
- Not_found вызвана, означает, что некоторые префиксы источника в отображении были найдены, которые соответствовали
dir, но ни один из результатов отображения не являлся существующим каталогом (возможно, из-за неправильной настройки). Вызывающий код должен перехватить это и вывести соответствующее сообщение об ошибке.
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
|
|
| Report_warning_as_error of
|
|
| Report_alert of
|
|
| Report_alert_as_error of
|
type report = {
kind :
| |
main :
| |
sub :
|
} type report_printer = {
pp :
| |
pp_report_kind :
| |
pp_main_loc :
| |
pp_main_txt :
| |
pp_submsgs :
| |
pp_submsg :
| |
pp_submsg_loc :
| |
pp_submsg_txt :
|
} Принтер для 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