# Class type Cil.cilPrinter

    class type cilPrinter = object .. end

A printer interface for CIL trees. Create instantiations of this type by specializing the class `Cil.defaultCilPrinterClass`.

    method setCurrentFormals : varinfo list -> unit

    method setPrintInstrTerminator : string -> unit

    method getPrintInstrTerminator : unit -> string

    method pVDecl : unit -> varinfo -> Pretty.doc

Invoked for each variable declaration. Note that variable declarations are all the `GVar`, `GVarDecl`, `GFun`, all the `varinfo` in formals of function types, and the formals and locals for function definitions.

    method pVar : varinfo -> Pretty.doc

Invoked on each variable use.

    method pLval : unit -> lval -> Pretty.doc

Invoked on each lvalue occurrence

    method pOffset : Pretty.doc -> offset -> Pretty.doc

Invoked on each offset occurrence. The second argument is the base.

    method pInstr : unit -> instr -> Pretty.doc

Invoked on each instruction occurrence.

    method pLabel : unit -> label -> Pretty.doc

Print a label.

    method pStmt : unit -> stmt -> Pretty.doc

Control-flow statement. This is used by `Cil.printGlobal` and by `Cil.dumpGlobal`.

    method dStmt : out_channel -> int -> stmt -> unit

Dump a control-flow statement to a file with a given indentation. This is used by `Cil.dumpGlobal`.

    method dBlock : out_channel -> int -> block -> unit

Dump a control-flow block to a file with a given indentation. This is used by `Cil.dumpGlobal`.

    method pBlock : unit -> block -> Pretty.doc

Print a block.

    method pGlobal : unit -> global -> Pretty.doc

Global (vars, types, etc.). This can be slow and is used only by `Cil.printGlobal` but not by `Cil.dumpGlobal`.

    method dGlobal : out_channel -> global -> unit

Dump a global to a file with a given indentation. This is used by `Cil.dumpGlobal`

    method pFieldDecl : unit -> fieldinfo -> Pretty.doc

A field declaration

    method pType : Pretty.doc option -> unit -> typ -> Pretty.doc

Use of some type in some declaration. The first argument is used to print the declared element, or is None if we are just printing a type with no name being declared. Note that for structure/union and enumeration types the definition of the composite type is not visited. Use `vglob` to visit it.

    method pAttr : attribute -> Pretty.doc * bool

Attribute. Also return an indication whether this attribute must be printed inside the __attribute__ list or not.

    method pAttrParam : unit -> attrparam -> Pretty.doc

Attribute parameter

    method pAttrs : unit -> attributes -> Pretty.doc

Attribute lists

    method pLineDirective : ?forcefile:bool -> location -> Pretty.doc

Print a line-number. This is assumed to come always on an empty line. If the forcefile argument is present and is true then the file name will be printed always. Otherwise the file name is printed only if it is different from the last time time this function is called. The last file name is stored in a private field inside the cilPrinter object.

    method pStmtKind : stmt -> unit -> stmtkind -> Pretty.doc

Print a statement kind. The code to be printed is given in the `Cil.stmtkind` argument. The initial `Cil.stmt` argument records the statement which follows the one being printed; `Cil.defaultCilPrinterClass` uses this information to prettify statement printing in certain special cases.

    method pExp : unit -> exp -> Pretty.doc

Print expressions

    method pInit : unit -> init -> Pretty.doc

Print initializers. This can be slow and is used by `Cil.printGlobal` but not by `Cil.dumpGlobal`.

    method dInit : out_channel -> int -> init -> unit

Dump a global to a file with a given indentation. This is used by `Cil.dumpGlobal`