method class_str_item =
                  fun f cst ->
                    let () = o#node f cst Ast.loc_of_class_str_item
                    in
                      match cst with
                      | Ast.CrNil _ -> ()
                      | Ast.CrSem (_, cst, (Ast.CrNil _)) |
                          Ast.CrSem (_, (Ast.CrNil _), cst) ->
                          o#class_str_item f cst
                      | Ast.CrSem (_, cst1, cst2) ->
                          (o#class_str_item f cst1;
                           cut f;
                           o#class_str_item f cst2)
                      | Ast.CrCtr (_, t1, t2) ->
                          pp f "@[<2>constraint %a =@ %a%(%)@]" o#ctyp t1
                            o#ctyp t2 semisep
                      | Ast.CrInh (_, ov, ce, ""->
                          pp f "@[<2>inherit%a@ %a%(%)@]" o#override_flag ov
                            o#class_expr ce semisep
                      | Ast.CrInh (_, ov, ce, s) ->
                          pp f "@[<2>inherit%a@ %a as@ %a%(%)@]"
                            o#override_flag ov o#class_expr ce o#var s
                            semisep
                      | Ast.CrIni (_, e) ->
                          pp f "@[<2>initializer@ %a%(%)@]" o#expr e semisep
                      | Ast.CrMth (_, s, ov, pr, e, (Ast.TyNil _)) ->
                          pp f "@[<2>method%a %a%a =@ %a%(%)@]"
                            o#override_flag ov o#private_flag pr o#var s
                            o#expr e semisep
                      | Ast.CrMth (_, s, ov, pr, e, t) ->
                          pp f "@[<2>method%a %a%a :@ %a =@ %a%(%)@]"
                            o#override_flag ov o#private_flag pr o#var s
                            o#ctyp t o#expr e semisep
                      | Ast.CrVir (_, s, pr, t) ->
                          pp f "@[<2>method virtual@ %a%a :@ %a%(%)@]"
                            o#private_flag pr o#var s o#ctyp t semisep
                      | Ast.CrVvr (_, s, mu, t) ->
                          pp f "@[<2>%s virtual %a%a :@ %a%(%)@]" o#value_val
                            o#mutable_flag mu o#var s o#ctyp t semisep
                      | Ast.CrVal (_, s, ov, mu, e) ->
                          pp f "@[<2>%s%a %a%a =@ %a%(%)@]" o#value_val
                            o#override_flag ov o#mutable_flag mu o#var s
                            o#expr e semisep
                      | Ast.CrAnt (_, s) -> pp f "%a%(%)" o#anti s semisep