sig
  type nameKind = NVar | NFun | NField | NType
  class type cabsVisitor =
    object
      method vEnterScope : unit -> unit
      method vExitScope : unit -> unit
      method vattr : Cabs.attribute -> Cabs.attribute list Cil.visitAction
      method vblock : Cabs.block -> Cabs.block Cil.visitAction
      method vdecltype : Cabs.decl_type -> Cabs.decl_type Cil.visitAction
      method vdef : Cabs.definition -> Cabs.definition list Cil.visitAction
      method vexpr : Cabs.expression -> Cabs.expression Cil.visitAction
      method vinitexpr :
        Cabs.init_expression -> Cabs.init_expression Cil.visitAction
      method vname :
        Cabsvisit.nameKind ->
        Cabs.specifier -> Cabs.name -> Cabs.name Cil.visitAction
      method vspec : Cabs.specifier -> Cabs.specifier Cil.visitAction
      method vstmt : Cabs.statement -> Cabs.statement list Cil.visitAction
      method vtypespec :
        Cabs.typeSpecifier -> Cabs.typeSpecifier Cil.visitAction
      method vvar : string -> string
    end
  class nopCabsVisitor : cabsVisitor
  val visitCabsTypeSpecifier :
    Cabsvisit.cabsVisitor -> Cabs.typeSpecifier -> Cabs.typeSpecifier
  val visitCabsSpecifier :
    Cabsvisit.cabsVisitor -> Cabs.specifier -> Cabs.specifier
  val visitCabsDeclType :
    Cabsvisit.cabsVisitor -> bool -> Cabs.decl_type -> Cabs.decl_type
  val visitCabsDefinition :
    Cabsvisit.cabsVisitor -> Cabs.definition -> Cabs.definition list
  val visitCabsBlock : Cabsvisit.cabsVisitor -> Cabs.block -> Cabs.block
  val visitCabsStatement :
    Cabsvisit.cabsVisitor -> Cabs.statement -> Cabs.statement list
  val visitCabsExpression :
    Cabsvisit.cabsVisitor -> Cabs.expression -> Cabs.expression
  val visitCabsAttributes :
    Cabsvisit.cabsVisitor -> Cabs.attribute list -> Cabs.attribute list
  val visitCabsName :
    Cabsvisit.cabsVisitor ->
    Cabsvisit.nameKind -> Cabs.specifier -> Cabs.name -> Cabs.name
  val visitCabsFile : Cabsvisit.cabsVisitor -> Cabs.file -> Cabs.file
end