A set of changes to be made to a module.
This is a product type introduced by defprod.
An vl-delta-p is mostly just a bunch of accumulators of different types, which may be useful when writing a transform that makes updates to a module. It also has a vl-namefactory-p which can be used to generate fresh names.
What is this all about?
Many simple transforms just walk through a module's elements and rewrite them in some "local" way. For instance, to size expressions or resolve arguments, we're just walking over the existing module elements and annotating or changing them. These sorts of transforms usually have no need for a delta.
Deltas become useful when a transform needs to rewrite the module elements in some way that depends on other stuff being added to the module and/or to the module list. For example:
VL_4_BIT_PLUS _adder_123 (tmp, a, b)to the module and adding
We found that writing these kinds of transforms meant passing around several different accumulators for the different types of elements we wanted to add. It is quite painful to write a whole set of functions that take, say, five accumulators, and to prove even the simple type theorems about them. A delta is mainly just a bundle of these accumulators, which greatly simplifies the code for transforms like split.
We found it useful to add a vl-namefactory-p to the delta, since that way any transform that wants to generate fresh names can do so easily.