Release coccinelle-0.1.5
[bpt/coccinelle.git] / parsing_cocci / visitor_ast0.ml
index 8a5bd6e..16ae0a1 100644 (file)
@@ -290,30 +290,33 @@ let combiner bind option_default
   and initialiser i =
     let k i =
       match Ast0.unwrap i with
-       Ast0.InitExpr(exp) -> expression exp
+       Ast0.MetaInit(name,_) -> meta_mcode name
+      |        Ast0.InitExpr(exp) -> expression exp
       | Ast0.InitList(lb,initlist,rb) ->
          multibind
            [string_mcode lb; initialiser_dots initlist; string_mcode rb]
-      | Ast0.InitGccDotName(dot,name,eq,ini) ->
+      | Ast0.InitGccExt(designators,eq,ini) ->
          multibind
-           [string_mcode dot; ident name; string_mcode eq; initialiser ini]
+           ((List.map designator designators) @
+            [string_mcode eq; initialiser ini])
       | Ast0.InitGccName(name,eq,ini) ->
          multibind [ident name; string_mcode eq; initialiser ini]
-      | Ast0.InitGccIndex(lb,exp,rb,eq,ini) ->
-         multibind
-           [string_mcode lb; expression exp; string_mcode rb;
-             string_mcode eq; initialiser ini]
-      | Ast0.InitGccRange(lb,exp1,dots,exp2,rb,eq,ini) ->
-         multibind
-           [string_mcode lb; expression exp1; string_mcode dots;
-             expression exp2; string_mcode rb; string_mcode eq;
-             initialiser ini]
       | Ast0.IComma(cm) -> string_mcode cm
       | Ast0.Idots(dots,whencode) ->
          bind (string_mcode dots) (get_option initialiser whencode)
       | Ast0.OptIni(i) -> initialiser i
       | Ast0.UniqueIni(i) -> initialiser i in
     initfn all_functions k i
+
+  and designator = function
+      Ast0.DesignatorField(dot,id) -> bind (string_mcode dot) (ident id)
+    | Ast0.DesignatorIndex(lb,exp,rb) ->
+       bind (string_mcode lb) (bind (expression exp) (string_mcode rb))
+    | Ast0.DesignatorRange(lb,min,dots,max,rb) ->
+       multibind
+         [string_mcode lb; expression min; string_mcode dots;
+           expression max; string_mcode rb]
+
   and parameterTypeDef p =
     let k p =
       match Ast0.unwrap p with
@@ -778,30 +781,34 @@ let rebuilder = fun
     let k i =
       Ast0.rewrap i
        (match Ast0.unwrap i with
-         Ast0.InitExpr(exp) -> Ast0.InitExpr(expression exp)
+         Ast0.MetaInit(name,pure) ->
+           Ast0.MetaInit(meta_mcode name,pure)
+       | Ast0.InitExpr(exp) -> Ast0.InitExpr(expression exp)
        | Ast0.InitList(lb,initlist,rb) ->
            Ast0.InitList(string_mcode lb, initialiser_list initlist,
                          string_mcode rb)
-       | Ast0.InitGccDotName(dot,name,eq,ini) ->
-           Ast0.InitGccDotName
-             (string_mcode dot, ident name, string_mcode eq, initialiser ini)
+       | Ast0.InitGccExt(designators,eq,ini) ->
+           Ast0.InitGccExt
+             (List.map designator designators, string_mcode eq,
+              initialiser ini)
        | Ast0.InitGccName(name,eq,ini) ->
            Ast0.InitGccName(ident name, string_mcode eq, initialiser ini)
-       | Ast0.InitGccIndex(lb,exp,rb,eq,ini) ->
-           Ast0.InitGccIndex
-             (string_mcode lb, expression exp, string_mcode rb,
-              string_mcode eq, initialiser ini)
-       | Ast0.InitGccRange(lb,exp1,dots,exp2,rb,eq,ini) ->
-           Ast0.InitGccRange
-             (string_mcode lb, expression exp1, string_mcode dots,
-              expression exp2, string_mcode rb, string_mcode eq,
-              initialiser ini)
        | Ast0.IComma(cm) -> Ast0.IComma(string_mcode cm)
        | Ast0.Idots(d,whencode) ->
            Ast0.Idots(string_mcode d, get_option initialiser whencode)
        | Ast0.OptIni(i) -> Ast0.OptIni(initialiser i)
        | Ast0.UniqueIni(i) -> Ast0.UniqueIni(initialiser i)) in
     initfn all_functions k i
+
+  and designator = function
+      Ast0.DesignatorField(dot,id) ->
+       Ast0.DesignatorField(string_mcode dot,ident id)
+    | Ast0.DesignatorIndex(lb,exp,rb) ->
+       Ast0.DesignatorIndex(string_mcode lb,expression exp,string_mcode rb)
+    | Ast0.DesignatorRange(lb,min,dots,max,rb) ->
+       Ast0.DesignatorRange(string_mcode lb,expression min,string_mcode dots,
+                            expression max,string_mcode rb)
+
   and parameterTypeDef p =
     let k p =
       Ast0.rewrap p