This commit is contained in:
parent
aa2ff7b2f0
commit
2f3113f55d
11742 changed files with 1223940 additions and 0 deletions
108
unikernel/duniverse/dune_/vendor/opam-file-format/opamParser.ml
vendored
Normal file
108
unikernel/duniverse/dune_/vendor/opam-file-format/opamParser.ml
vendored
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
(**************************************************************************)
|
||||
(* *)
|
||||
(* Copyright 2016-2018 OCamlPro *)
|
||||
(* *)
|
||||
(* 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. *)
|
||||
(* *)
|
||||
(**************************************************************************)
|
||||
|
||||
(** Generic glue functions *)
|
||||
let parse_from_string parse_fun str filename =
|
||||
let lexbuf = Lexing.from_string str in
|
||||
lexbuf.Lexing.lex_curr_p <-
|
||||
{ lexbuf.Lexing.lex_curr_p with Lexing.pos_fname = filename };
|
||||
parse_fun OpamLexer.token lexbuf
|
||||
|
||||
let parse_from_channel parse_fun ic filename =
|
||||
let lexbuf = Lexing.from_channel ic in
|
||||
lexbuf.Lexing.lex_curr_p <-
|
||||
{ lexbuf.Lexing.lex_curr_p with Lexing.pos_fname = filename };
|
||||
parse_fun OpamLexer.token lexbuf
|
||||
|
||||
let parse_from_file parse_fun filename =
|
||||
let ic = open_in_bin filename in
|
||||
try
|
||||
let r = parse_from_channel parse_fun ic filename in
|
||||
close_in ic;
|
||||
r
|
||||
with e -> close_in ic; raise e
|
||||
|
||||
(** file parsers *)
|
||||
let main' main filename lexer lexbuf = main lexer lexbuf filename
|
||||
let string main str filename = parse_from_string (main' main filename) str filename
|
||||
let channel main ic filename = parse_from_channel (main' main filename) ic filename
|
||||
let file main filename = parse_from_file (main' main filename) filename
|
||||
|
||||
module FullPos = struct
|
||||
|
||||
open OpamParserTypes.FullPos
|
||||
|
||||
(** raw parser entry points *)
|
||||
let main = OpamBaseParser.main
|
||||
let value = OpamBaseParser.value
|
||||
|
||||
(** file parsers *)
|
||||
let string = string main
|
||||
let channel = channel main
|
||||
let file = file main
|
||||
|
||||
(** value parsers *)
|
||||
let value_from_string = parse_from_string value
|
||||
let value_from_channel = parse_from_channel value
|
||||
let value_from_file = parse_from_file value
|
||||
|
||||
(* Functions to transform simple pos to full pos *)
|
||||
module S = OpamParserTypes
|
||||
|
||||
let to_pos e = (e.pos.filename, fst e.pos.start, snd e.pos.start)
|
||||
|
||||
let rec to_value v =
|
||||
match v.pelem with
|
||||
| Bool b -> S.Bool (to_pos v, b)
|
||||
| Int i -> S.Int (to_pos v, i)
|
||||
| String s -> S.String (to_pos v, s)
|
||||
| Relop (r,v,v') -> S.Relop (to_pos r, r.pelem, to_value v, to_value v')
|
||||
| Prefix_relop (r,v) -> S.Prefix_relop (to_pos r, r.pelem, to_value v)
|
||||
| Logop (l,v,v') -> S.Logop (to_pos l, l.pelem, to_value v, to_value v')
|
||||
| Pfxop (p,v) -> S.Pfxop (to_pos p, p.pelem, to_value v)
|
||||
| Ident s -> S.Ident (to_pos v, s)
|
||||
| List l -> S.List (to_pos l, List.map to_value l.pelem)
|
||||
| Group g -> S.Group (to_pos g, List.map to_value g.pelem)
|
||||
| Option (v,vl) -> S.Option (to_pos vl, to_value v, List.map to_value vl.pelem)
|
||||
| Env_binding (v,o,v') -> S.Env_binding (to_pos o, to_value v, o.pelem, to_value v')
|
||||
|
||||
let rec to_section s =
|
||||
{ S.section_kind = s.section_kind.pelem;
|
||||
S.section_name =
|
||||
(match s.section_name with
|
||||
| Some n -> Some n.pelem
|
||||
| None -> None);
|
||||
S.section_items = List.map to_item s.section_items.pelem
|
||||
}
|
||||
and to_item i =
|
||||
match i.pelem with
|
||||
| Section s -> S.Section (to_pos s.section_kind, to_section s)
|
||||
| Variable (s, v) -> S.Variable (to_pos s, s.pelem, to_value v)
|
||||
|
||||
let to_opamfile o =
|
||||
{ S.file_contents = List.map to_item o.file_contents;
|
||||
S.file_name = o.file_name
|
||||
}
|
||||
|
||||
end
|
||||
|
||||
(** raw parser entry points *)
|
||||
let main f l fd = FullPos.to_opamfile (OpamBaseParser.main f l fd)
|
||||
let value f l = FullPos.to_value (OpamBaseParser.value f l)
|
||||
|
||||
(** file parsers *)
|
||||
let string = string main
|
||||
let channel = channel main
|
||||
let file = file main
|
||||
|
||||
(** value parsers *)
|
||||
let value_from_string = parse_from_string value
|
||||
let value_from_channel = parse_from_channel value
|
||||
let value_from_file = parse_from_file value
|
||||
Loading…
Add table
Add a link
Reference in a new issue