summaryrefslogtreecommitdiff
path: root/checklink/Lens.ml
diff options
context:
space:
mode:
authorGravatar xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2012-03-28 13:32:21 +0000
committerGravatar xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2012-03-28 13:32:21 +0000
commitbefbc76f89f3d8abc8da17caf91ea4a87ec96eeb (patch)
treed84d76258ca9b2505713552bb62be8c40714787b /checklink/Lens.ml
parent26c166e279ec05837b6b3b5db80a7ef3c520db32 (diff)
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.ml32
1 files changed, 32 insertions, 0 deletions
diff --git a/checklink/Lens.ml b/checklink/Lens.ml
new file mode 100644
index 0000000..4335933
--- /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