-
Notifications
You must be signed in to change notification settings - Fork 63
[Feature] Module Tweaks
Cameron Low edited this page Jan 24, 2025
·
9 revisions
Module tweaks is a feature that allows one to make small changes to previously defined modules.
The general syntax for module tweaks is as follows:
module N = M with {
(* add module variables *)
var x, y, z : t
var a, b : s
(* update procedures *)
proc f [
(* introduce new local variables *)
var h, i : v
var j : w
(* updates *)
_stmt_update_
_cond_update_
] res ~ (e) (* Change the return expression of `g` *)
}.
There are two types of procedure updates:
- Statement updates:
-
cp -: delete the statement at code-positioncp -
cp + { s }: add the statementsafter code-positioncp -
cp - { s }: add the statementsbefore code-positioncp -
cp ~ { s }: change the statementsat code-positioncp
-
- Condition updates:
-
cp - .: collapse a conditional at code-positioncpto it's true branch -
cp - ?: collapse a conditional at code-positioncpto it's false branch -
cp - #C.: collapse a match at code-positioncpto the C constructor branch -
cp ~ (e): change the condition of the conditional at code-positioncptoe -
cp + (e): introduce an if statement with conditioneafter code-positioncpwith the true branch containing the rest of the block.
-
Note: Updates are applied one after the other, from bottom to top. Listing changes in chronological order is simplest way to apply updates safely.
For more detail on the structure of code positions, see here
For more examples see: tests/fine-grained-module-defs.ec