You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

31 lines
907 B

(*
* Copyright (c) 2019-present, Facebook, Inc.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*)
open! IStd
module L = Logging
let initialized = ref false
let properties = ref []
let parse topl_file =
let f ch =
let lexbuf = Lexing.from_channel ch in
try ToplParser.properties (ToplLexer.token ()) lexbuf with ToplParser.Error ->
let Lexing.({pos_lnum; pos_bol; pos_cnum; _}) = Lexing.lexeme_start_p lexbuf in
let col = pos_cnum - pos_bol + 1 in
L.(die UserError) "@[%s:%d:%d: topl parse error@]@\n@?" topl_file pos_lnum col
in
try In_channel.with_file topl_file ~f with Sys_error msg ->
L.(die UserError) "@[topl:%s: %s@]@\n@?" topl_file msg
let init () =
if not !initialized then (
properties := List.concat_map ~f:parse Config.topl_properties ;
initialized := true )