]> xenbits.xensource.com Git - xenclient/toolstack.git/commitdiff
fix tuple parsing, and a formatting bug
authorPrashanth Mundkur <prashanth.mundkur@citrix.com>
Wed, 8 Apr 2009 18:32:48 +0000 (11:32 -0700)
committerPrashanth Mundkur <prashanth.mundkur@citrix.com>
Wed, 8 Apr 2009 18:32:48 +0000 (11:32 -0700)
libs/json/codegen.ml
libs/json/parser.mly

index a2d542ff2a7042322bb5bf67ff4e7d65daec5be0..77dec510c403c6b255c16d35dea48c60ea85b13e 100644 (file)
@@ -223,7 +223,7 @@ module From = struct
                        let optv, venv = Var_env.new_ident_from_type venv optt in
                        fprintf ff "(match %s with@," v;
                        fprintf ff "| Json_null -> None@,";
-                       fprintf ff "@<v 8>| %s ->@," (name_of_var optv);
+                       fprintf ff "@[<v 8>| %s ->@," (name_of_var optv);
                        of_json ff venv optv optt tname;
                        fprintf ff "@]@,)"
                | C_list elemt ->
index 8231918981705c20fb2c6391e477d563a6311ed0..f0612344e542403a0284480256b5a0b6f5332f67 100644 (file)
@@ -79,20 +79,29 @@ semi:
        {}
 
 repn:
-| expr
+| expr_or_tuple
        { $1 }
-| expr STAR tuple
-       { C_tuple ($1 :: (List.rev $3)) }
 | record
        { C_record (List.rev $1) }
 | variant
        { C_variant (List.rev $1) }
 
+expr_or_tuple:
+| expr
+       { $1 }
+| expr STAR tuple
+       { C_tuple ($1 :: (List.rev $3)) }
+
+tuple:
+| tuple STAR expr
+       { $3 :: $1 }
+| expr
+       { [ $1 ] }
+
 expr:
-| LPAREN expr RPAREN
+| LPAREN expr_or_tuple RPAREN
        { $2 }
-| LPAREN expr STAR tuple RPAREN
-       { C_tuple ($2 :: (List.rev $4)) }
+
 | expr LIDENT
        { match $2 with
          | "option" -> C_option $1
@@ -105,12 +114,6 @@ expr:
 | base
        { C_base $1 }
 
-tuple:
-| tuple STAR expr
-       { $3 :: $1 }
-| expr
-       { [ $1 ] }
-
 base:
 | LIDENT       { match $1 with
                  | "string" -> B_string
@@ -124,7 +127,7 @@ base:
 */
 
 record:
-| LBRACE field_decls RBRACE
+| LBRACE field_decls opt_semi RBRACE
        { $2 }
 
 field_decls:
@@ -133,10 +136,16 @@ field_decls:
 | field_decl
        { [ $1 ] }
 
+opt_semi:
+| SEMI
+       {}
+| /* epsilon */
+       {}
+
 field_decl:
-| LIDENT COLON expr
+| LIDENT COLON expr_or_tuple
        { ($1, $3) }
-| MUTABLE LIDENT COLON expr
+| MUTABLE LIDENT COLON expr_or_tuple
        { ($2, $4) }
 
 variant: