fixes
This commit is contained in:
parent
583b55f527
commit
24bb677ed2
|
@ -52,7 +52,7 @@ type package =
|
||||||
|
|
||||||
let db = Hashtbl.create 1024
|
let db = Hashtbl.create 1024
|
||||||
|
|
||||||
let make_rule ((_, preds, action, value) : META.var) =
|
let make_rule ((_, preds, action, value) : Meta.var) =
|
||||||
let preds_required, preds_forbidden =
|
let preds_required, preds_forbidden =
|
||||||
List.partition_map preds ~f:(function
|
List.partition_map preds ~f:(function
|
||||||
| P x -> Inl x
|
| P x -> Inl x
|
||||||
|
@ -64,14 +64,14 @@ let make_rule ((_, preds, action, value) : META.var) =
|
||||||
; value
|
; value
|
||||||
}
|
}
|
||||||
|
|
||||||
let acknowledge_meta (meta : META.t) =
|
let acknowledge_meta (meta : Meta.t) =
|
||||||
let pkgs = META.flatten meta in
|
let pkgs = Meta.flatten meta in
|
||||||
List.iter pkgs ~f:(fun (name, vars) ->
|
List.iter pkgs ~f:(fun (name, vars) ->
|
||||||
let vars =
|
let vars =
|
||||||
List.fold_left vars ~init:String_map.empty ~f:(fun acc ((vname, _, _, _) as var) ->
|
List.fold_left vars ~init:String_map.empty ~f:(fun acc ((vname, _, _, _) as var) ->
|
||||||
let rule = make_rule var in
|
let rule = make_rule var in
|
||||||
let rules =
|
let rules =
|
||||||
match String_map.find acc vname with
|
match String_map.find vname acc with
|
||||||
| exception Not_found -> []
|
| exception Not_found -> []
|
||||||
| rules -> rules
|
| rules -> rules
|
||||||
in
|
in
|
||||||
|
@ -89,12 +89,12 @@ let root_pkg s =
|
||||||
| i -> String.sub s ~pos:0 ~len:i
|
| i -> String.sub s ~pos:0 ~len:i
|
||||||
|
|
||||||
let rec get_pkg name =
|
let rec get_pkg name =
|
||||||
match Hashtbl.find db pkg with
|
match Hashtbl.find db name with
|
||||||
| exception Not_found ->
|
| exception Not_found ->
|
||||||
let root = root_pkg name in
|
let root = root_pkg name in
|
||||||
let fn = !findlib_dir ^/ root ^/ "META" in
|
let fn = !findlib_dir ^/ root ^/ "META" in
|
||||||
if Sys.file_exists fn then begin
|
if Sys.file_exists fn then begin
|
||||||
acknowledge_meta { name = root; entries = META.load fn };
|
acknowledge_meta { name = root; entries = Meta.load fn };
|
||||||
get_pkg name
|
get_pkg name
|
||||||
end else
|
end else
|
||||||
raise (Package_not_found name)
|
raise (Package_not_found name)
|
||||||
|
@ -111,12 +111,12 @@ let rec interpret_rules rules ~preds =
|
||||||
| Add ->
|
| Add ->
|
||||||
match interpret_rules rules ~preds with
|
match interpret_rules rules ~preds with
|
||||||
| None -> Some rule.value
|
| None -> Some rule.value
|
||||||
| Some v -> Some (v ^ " " rule.value)
|
| Some v -> Some (v ^ " " ^ rule.value)
|
||||||
else
|
else
|
||||||
interpret_rules rules ~preds
|
interpret_rules rules ~preds
|
||||||
|
|
||||||
let get_var pkg ~preds var =
|
let get_var pkg ~preds var =
|
||||||
match String_map.find pkg.vars var with
|
match String_map.find var pkg.vars with
|
||||||
| exception Not_found -> None
|
| exception Not_found -> None
|
||||||
| rules -> interpret_rules rules ~preds
|
| rules -> interpret_rules rules ~preds
|
||||||
|
|
||||||
|
|
|
@ -45,6 +45,6 @@ let save kind ~filename x =
|
||||||
|
|
||||||
let load kind ~filename =
|
let load kind ~filename =
|
||||||
let sexp, _locs =
|
let sexp, _locs =
|
||||||
with_lexbuf_from_file filename ~f:Sexp_lexer.single lb
|
with_lexbuf_from_file filename ~f:Sexp_lexer.single
|
||||||
in
|
in
|
||||||
of_sexp kind sexp
|
of_sexp kind sexp
|
||||||
|
|
|
@ -4,14 +4,14 @@ type t =
|
||||||
}
|
}
|
||||||
|
|
||||||
let of_lexbuf lb =
|
let of_lexbuf lb =
|
||||||
{ start = Lexing.lexeme_start lb
|
{ start = Lexing.lexeme_start_p lb
|
||||||
; stop = Lexing.lexeme_stop lb
|
; stop = Lexing.lexeme_end_p lb
|
||||||
}
|
}
|
||||||
|
|
||||||
exception Error of t * string
|
exception Error of t * string
|
||||||
|
|
||||||
let fail t fmt =
|
let fail t fmt =
|
||||||
Printf.ksprintf (fun msg -> raise (File_error (t, msg))) fmt
|
Printf.ksprintf (fun msg -> raise (Error (t, msg))) fmt
|
||||||
|
|
||||||
let fail_lex lb fmt =
|
let fail_lex lb fmt =
|
||||||
fail (of_lexbuf lb) fmt
|
fail (of_lexbuf lb) fmt
|
||||||
|
|
|
@ -7,5 +7,5 @@ val of_lexbuf : Lexing.lexbuf -> t
|
||||||
|
|
||||||
exception Error of t * string
|
exception Error of t * string
|
||||||
|
|
||||||
val fail : t -> string -> _
|
val fail : t -> ('a, unit, string, _) format4 -> 'a
|
||||||
val fail_lex : Lexing.lexbuf -> string -> _
|
val fail_lex : Lexing.lexbuf -> ('a, unit, string, _) format4 -> 'a
|
||||||
|
|
|
@ -32,7 +32,7 @@ module Parse = struct
|
||||||
| _ -> error lb "package name expected"
|
| _ -> error lb "package name expected"
|
||||||
|
|
||||||
let string lb =
|
let string lb =
|
||||||
match lb with
|
match next lb with
|
||||||
| String s -> s
|
| String s -> s
|
||||||
| _ -> error lb "string expected"
|
| _ -> error lb "string expected"
|
||||||
|
|
||||||
|
@ -76,8 +76,8 @@ module Parse = struct
|
||||||
| Name "package" ->
|
| Name "package" ->
|
||||||
let name = package_name lb in
|
let name = package_name lb in
|
||||||
lparen lb;
|
lparen lb;
|
||||||
let entries = entries lb (depth + 1) [] in
|
let sub_entries = entries lb (depth + 1) [] in
|
||||||
entries lb depth (Package { name; entries } :: acc)
|
entries lb depth (Package { name; entries = sub_entries } :: acc)
|
||||||
| Name var ->
|
| Name var ->
|
||||||
let preds, action =
|
let preds, action =
|
||||||
match next lb with
|
match next lb with
|
||||||
|
@ -87,7 +87,7 @@ module Parse = struct
|
||||||
| _ -> error lb "'=', '+=' or '(' expected"
|
| _ -> error lb "'=', '+=' or '(' expected"
|
||||||
in
|
in
|
||||||
let value = string lb in
|
let value = string lb in
|
||||||
Var (var, preds, action, value)
|
entries lb depth (Var (var, preds, action, value) :: acc)
|
||||||
| _ ->
|
| _ ->
|
||||||
error lb "'package' or variable name expected"
|
error lb "'package' or variable name expected"
|
||||||
end
|
end
|
||||||
|
|
|
@ -25,8 +25,8 @@ rule token = parse
|
||||||
Buffer.contents buf
|
Buffer.contents buf
|
||||||
else
|
else
|
||||||
match s.[i] with
|
match s.[i] with
|
||||||
| '\\' -> Buffer.add_char s.[i + 1]; loop (i + 2)
|
| '\\' -> Buffer.add_char buf s.[i + 1]; loop (i + 2)
|
||||||
| _ -> Buffer.add_char s.[i ]; loop (i + 1)
|
| _ -> Buffer.add_char buf s.[i ]; loop (i + 1)
|
||||||
in
|
in
|
||||||
String (loop 0) }
|
String (loop 0) }
|
||||||
| '-' { Minus }
|
| '-' { Minus }
|
||||||
|
|
Loading…
Reference in New Issue