diff options
author | xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e> | 2012-03-28 13:32:21 +0000 |
---|---|---|
committer | xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e> | 2012-03-28 13:32:21 +0000 |
commit | befbc76f89f3d8abc8da17caf91ea4a87ec96eeb (patch) | |
tree | d84d76258ca9b2505713552bb62be8c40714787b /checklink/Lens.ml | |
parent | 26c166e279ec05837b6b3b5db80a7ef3c520db32 (diff) | |
download | compcert-befbc76f89f3d8abc8da17caf91ea4a87ec96eeb.tar.gz compcert-befbc76f89f3d8abc8da17caf91ea4a87ec96eeb.zip |
checklink: first import of Valentin Robert's validator for asm and link
cparser: renamed Errors to Cerrors; removed packing into Cparser.
git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@1856 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
Diffstat (limited to 'checklink/Lens.ml')
-rw-r--r-- | checklink/Lens.ml | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/checklink/Lens.ml b/checklink/Lens.ml new file mode 100644 index 00000000..43359334 --- /dev/null +++ b/checklink/Lens.ml @@ -0,0 +1,32 @@ +type ('a, 'b) t = { + get: 'a -> 'b; + set: 'b -> 'a -> 'a; +} + +let ( |- ) f g x = g (f x) + +let modify l f a = + let oldval = l.get a in + let newval = f oldval in + l.set newval a + +let compose l1 l2 = { + get = l2.get |- l1.get; + set = l1.set |- modify l2 +} + +let _get a l = l.get a + +let _set v a l = l.set v a + +let _modify f l = modify l f + +let (|.) = _get + +let (^=) l v = fun a -> _set v a l + +let (^%=) l f = _modify f l + +let (|--) l1 l2 = compose l2 l1 + +let (--|) = compose |