42 lines
1.9 KiB
OCaml
42 lines
1.9 KiB
OCaml
(**************************************************************************)
|
|
(* *)
|
|
(* OCaml *)
|
|
(* *)
|
|
(* Sebastien Hinderer, projet Gallium, INRIA Paris *)
|
|
(* *)
|
|
(* Copyright 2019 Institut National de Recherche en Informatique et *)
|
|
(* en Automatique. *)
|
|
(* *)
|
|
(* All rights reserved. This file is distributed under the terms of *)
|
|
(* the GNU Lesser General Public License version 2.1, with the *)
|
|
(* special exception on linking described in the file LICENSE. *)
|
|
(* *)
|
|
(**************************************************************************)
|
|
|
|
(* Parsing of modifier (response) files created by hooks and scripts *)
|
|
|
|
open Ocamltest_stdlib
|
|
|
|
let modifier_of_string str =
|
|
let lexbuf = Lexing.from_string str in
|
|
let variable_name, result = Tsl_lexer.modifier lexbuf in
|
|
let variable =
|
|
match Variables.find_variable variable_name with
|
|
| None -> raise (Variables.No_such_variable variable_name)
|
|
| Some variable -> variable
|
|
in
|
|
match result with
|
|
| `Remove -> Environments.Remove variable
|
|
| `Add value -> Environments.Add (variable, value)
|
|
| `Append value -> Environments.Append (variable, value)
|
|
|
|
let modifiers_of_file filename =
|
|
let ic = open_in filename in
|
|
let rec modifiers_of_lines acc = match input_line_opt ic with
|
|
| None -> acc
|
|
| Some line ->
|
|
modifiers_of_lines ((modifier_of_string (String.trim line)) :: acc) in
|
|
let modifiers = modifiers_of_lines [] in
|
|
close_in ic;
|
|
List.rev modifiers
|