package frama-c

  1. Overview
  2. Docs
Legend:
Library
Module
Module type
Parameter
Class
Class type

Alpha conversion.

type 'a undoAlphaElement

This is the type of the elements that are recorded by the alpha * conversion functions in order to be able to undo changes to the tables * they modify. Useful for implementing * scoping

type 'a alphaTableData

This is the type of the elements of the alpha renaming table. These * elements can carry some data associated with each occurrence of the name.

type 'a alphaTable = (string, (string, 'a alphaTableData Stdlib.ref) Stdlib.Hashtbl.t) Stdlib.Hashtbl.t

type for alpha conversion table. We split the lookup in two to avoid creating accidental collisions when converting x_0 into x_0_0 if the original code contains both.

val newAlphaName : alphaTable:'a alphaTable -> undolist:'a undoAlphaElement list Stdlib.ref option -> lookupname:string -> data:'a -> string * 'a

Create a new name based on a given name. The new name is formed from a * prefix (obtained from the given name by stripping a suffix consisting of _ * followed by only digits), followed by a special separator and then by a * positive integer suffix. The first argument is a table mapping name * prefixes to some data that specifies what suffixes have been used and how * to create the new one. This function updates the table with the new * largest suffix generated. The "undolist" argument, when present, will be * used by the function to record information that can be used by * Alpha.undoAlphaChanges to undo those changes. Note that the undo * information will be in reverse order in which the action occurred. Returns * the new name and, if different from the lookupname, the location of the * previous occurrence. This function knows about the location implicitly * from the (Cil.CurrentLoc.get ()).

val registerAlphaName : alphaTable:'a alphaTable -> lookupname:string -> data:'a -> unit

Register a name with an alpha conversion table to ensure that when later * we call newAlphaName we do not end up generating this one

val getAlphaPrefix : lookupname:string -> string * string

Split the name in preparation for newAlphaName. Returns a pair (prefix, infix) where prefix is the index in the outer table, while infix is the index in the inner table.

val undoAlphaChanges : alphaTable:'a alphaTable -> undolist:'a undoAlphaElement list -> unit

Undo the changes to a table