[Pkg-ocaml-maint-commits] [yojson] 03/08: Imported Upstream version 1.2.1

Stéphane Glondu glondu at moszumanska.debian.org
Fri Sep 11 13:55:03 UTC 2015


This is an automated email from the git hooks/post-receive script.

glondu pushed a commit to branch master
in repository yojson.

commit 7bbe465a4bf88152debba55f9257eef950e6ebc1
Author: Stephane Glondu <steph at glondu.net>
Date:   Thu Sep 10 11:56:42 2015 +0200

    Imported Upstream version 1.2.1
---
 Changes  |  2 ++
 Makefile | 10 +++++-----
 read.mli | 13 ++++++++++---
 read.mll | 18 ++++++++++++------
 util.ml  |  4 ++++
 util.mli | 15 +++++++++------
 6 files changed, 42 insertions(+), 20 deletions(-)

diff --git a/Changes b/Changes
index 7419d87..83be090 100644
--- a/Changes
+++ b/Changes
@@ -9,6 +9,8 @@ bug = bug or security fix
 doc = major changes in the documentation
 pkg = changes in the structure of the package or in the installation procedure
 
+trunk:            [bug] fix off-by-2 error in column error start location
+
 2014-12-26 1.2.0: [+ui] new function Yojson.Safe.buffer_json for saving
                         a raw JSON string while parsing in order to
                         parse later
diff --git a/Makefile b/Makefile
index 681f893..7e63f83 100755
--- a/Makefile
+++ b/Makefile
@@ -1,13 +1,13 @@
-VERSION = 1.2.0
+VERSION = 1.2.1
 
-ifeq "$(shell ocamlc -config |grep os_type)" "os_type: Win32"
+ifeq "$(shell ocamlfind ocamlc -config |grep os_type)" "os_type: Win32"
 EXE=.exe
 else
 EXE=
 endif
 
 
-NATDYNLINK := $(shell if [ -f `ocamlc -where`/dynlink.cmxa ]; then echo YES; else echo NO; fi)
+NATDYNLINK := $(shell if [ -f `ocamlfind ocamlc -where`/dynlink.cmxa ]; then echo YES; else echo NO; fi)
 
 FLAGS = -dtypes -g
 CMO = yojson.cmo yojson_biniou.cmo
@@ -76,7 +76,7 @@ yojson.cmx: yojson.cmi yojson.ml
 	ocamlfind ocamlopt -c $(FLAGS) -package $(PACKS) yojson.ml
 
 yojson.cmxs: yojson.cmx
-	ocamlopt -shared -linkall -I . -o yojson.cmxs yojson.cmx
+	ocamlfind ocamlopt -shared -linkall -I . -o yojson.cmxs yojson.cmx
 
 yojson_biniou.cmi: yojson_biniou.mli
 	ocamlfind ocamlc -c $(FLAGS) -package $(PACKS) yojson_biniou.mli
@@ -88,7 +88,7 @@ yojson_biniou.cmx: yojson_biniou.cmi yojson_biniou.ml
 	ocamlfind ocamlopt -c $(FLAGS) -package $(PACKS) yojson_biniou.ml
 
 yojson_biniou.cmxs: yojson_biniou.cmx
-	ocamlopt -shared -linkall -I . -o yojson_biniou.cmxs yojson_biniou.cmx
+	ocamlfind ocamlopt -shared -linkall -I . -o yojson_biniou.cmxs yojson_biniou.cmx
 
 ydump$(EXE): yojson.cmx yojson_biniou.cmx ydump.ml
 	ocamlfind ocamlopt -o ydump$(EXE) $(FLAGS) -package $(PACKS) -linkpkg \
diff --git a/read.mli b/read.mli
index 8f9502a..182f587 100644
--- a/read.mli
+++ b/read.mli
@@ -229,10 +229,17 @@ val read_lbr : lexer_state -> Lexing.lexbuf -> unit
 val read_rbr : lexer_state -> Lexing.lexbuf -> unit
 
 val read_fields :
-  ('a -> string -> lexer_state -> Lexing.lexbuf -> 'a) ->
-  'a ->
+  ('acc -> string -> lexer_state -> Lexing.lexbuf -> 'acc) ->
+  'acc ->
   lexer_state ->
-  Lexing.lexbuf -> 'a
+  Lexing.lexbuf -> 'acc
+
+val read_abstract_fields :
+  (lexer_state -> Lexing.lexbuf -> 'key) ->
+  ('acc -> 'key -> lexer_state -> Lexing.lexbuf -> 'acc) ->
+  'acc ->
+  lexer_state ->
+  Lexing.lexbuf -> 'acc
 
 val read_lcurl : lexer_state -> Lexing.lexbuf -> unit
 val read_object_end : Lexing.lexbuf -> unit
diff --git a/read.mll b/read.mll
index 09c0ed1..6a7f129 100644
--- a/read.mll
+++ b/read.mll
@@ -44,10 +44,10 @@
       | _ -> assert false
 
   let custom_error descr v lexbuf =
-    let offs = lexbuf.lex_abs_pos in
+    let offs = lexbuf.lex_abs_pos - 1 in
     let bol = v.bol in
-    let pos1 = offs + lexbuf.lex_start_pos - bol in
-    let pos2 = max pos1 (offs + lexbuf.lex_curr_pos - bol - 1) in
+    let pos1 = offs + lexbuf.lex_start_pos - bol - 1 in
+    let pos2 = max pos1 (offs + lexbuf.lex_curr_pos - bol) in
     let file_line =
       match v.fname with
 	  None -> "Line"
@@ -670,12 +670,13 @@ and read_tuple_sep2 v std = parse
   | _        { long_error "Expected ',' or ')' but found" v lexbuf }
   | eof      { custom_error "Unexpected end of input" v lexbuf }
 
-and read_fields read_field init_acc v = parse
+(* Read a JSON object, reading the keys using a custom parser *)
+and read_abstract_fields read_key read_field init_acc v = parse
     '{'      { let acc = ref init_acc in
 	       try
 		 read_space v lexbuf;
 		 read_object_end lexbuf;
-		 let field_name = read_ident v lexbuf in
+		 let field_name = read_key v lexbuf in
 		 read_space v lexbuf;
 		 read_colon v lexbuf;
 		 read_space v lexbuf;
@@ -684,7 +685,7 @@ and read_fields read_field init_acc v = parse
 		   read_space v lexbuf;
 		   read_object_sep v lexbuf;
 		   read_space v lexbuf;
-		   let field_name = read_ident v lexbuf in
+		   let field_name = read_key v lexbuf in
 		   read_space v lexbuf;
 		   read_colon v lexbuf;
 		   read_space v lexbuf;
@@ -1084,6 +1085,11 @@ and junk = parse
     let l = read_list_rev read_cell v lexbuf in
     array_of_rev_list l
 
+  (* Read a JSON object, reading the keys into OCaml strings
+     (provided for backward compatibility) *)
+  let read_fields read_field init_acc v =
+    read_abstract_fields read_ident read_field init_acc v
+
   let finish v lexbuf =
     read_space v lexbuf;
     if not (read_eof lexbuf) then
diff --git a/util.ml b/util.ml
index 958b999..943ba69 100644
--- a/util.ml
+++ b/util.ml
@@ -190,3 +190,7 @@ let filter_string l =
         `String x -> Some x
       | _ -> None
   ) l
+
+let keys o =
+  let names = to_assoc o in
+  List.map (fun (key, _) -> key) names
diff --git a/util.mli b/util.mli
index dfcec47..aa777aa 100644
--- a/util.mli
+++ b/util.mli
@@ -1,7 +1,7 @@
 (**
    This module provides combinators for extracting fields from JSON
    values. This approach is recommended for reading a few fields
-   from data returned by public APIs. However for more complex applications 
+   from data returned by public APIs. However for more complex applications
    we recommend {{:https://github.com/MyLifeLabs/atdgen}Atdgen}.
 
    Here is some sample JSON data:
@@ -72,6 +72,9 @@ val ( |> ) : 'a -> ('a -> 'b) -> 'b
   (** Forward pipe operator; useful for composing JSON access functions
       without too many parentheses *)
 
+val keys: json -> string list
+  (** Returns all the key names in the given JSON object *)
+
 val member : string -> json -> json
   (** [member k obj] returns the value associated with the key [k] in the JSON
       object [obj], or [`Null] if [k] is not present in [obj]. *)
@@ -96,7 +99,7 @@ val to_bool : json -> bool
   (** Extract a boolean value or raise [Type_error]. *)
 
 val to_bool_option : json -> bool option
-  (** Extract [Some] boolean value, 
+  (** Extract [Some] boolean value,
       return [None] if the value is null,
       or raise [Type_error] otherwise. *)
 
@@ -104,7 +107,7 @@ val to_number : json -> float
   (** Extract a number or raise [Type_error]. *)
 
 val to_number_option : json -> float option
-  (** Extract [Some] number, 
+  (** Extract [Some] number,
       return [None] if the value is null,
       or raise [Type_error] otherwise. *)
 
@@ -113,7 +116,7 @@ val to_float : json -> float
       [to_number] is generally preferred as it also works with int literals. *)
 
 val to_float_option : json -> float option
-  (** Extract [Some] float value, 
+  (** Extract [Some] float value,
       return [None] if the value is null,
       or raise [Type_error] otherwise.
       [to_number_option] is generally preferred as it also works
@@ -123,7 +126,7 @@ val to_int : json -> int
   (** Extract an int from a JSON int or raise [Type_error]. *)
 
 val to_int_option : json -> int option
-  (** Extract [Some] int from a JSON int, 
+  (** Extract [Some] int from a JSON int,
       return [None] if the value is null,
       or raise [Type_error] otherwise. *)
 
@@ -134,7 +137,7 @@ val to_string : json -> string
   (** Extract a string from a JSON string or raise [Type_error]. *)
 
 val to_string_option : json -> string option
-  (** Extract [Some] string from a JSON string, 
+  (** Extract [Some] string from a JSON string,
       return [None] if the value is null,
       or raise [Type_error] otherwise. *)
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-ocaml-maint/packages/yojson.git



More information about the Pkg-ocaml-maint-commits mailing list