Generate labelled updaters and propagate callback exceptions
This commit is contained in:
2 files changed
+17
-3
No files matched your search
+7
-3
@@ -31,13 +31,17 @@ let generate declaration =
|
||||
let name = field.pld_name.txt in
|
||||
let getter = lambda ~loc Nolabel source_pattern
|
||||
(Exp.field ~loc source (ident ~loc name)) in
|
||||
let replacement = Exp.record ~loc [ident ~loc name, value ~loc "__fg_value"]
|
||||
let replace expression = Exp.record ~loc [ident ~loc name, expression]
|
||||
(if List.length fields = 1 then None else Some source) in
|
||||
let setter = lambda ~loc Nolabel (variable ~loc "__fg_value")
|
||||
(lambda ~loc Nolabel source_pattern replacement) in
|
||||
(lambda ~loc Nolabel source_pattern (replace (value ~loc "__fg_value"))) in
|
||||
let updater = lambda ~loc (Labelled "f") (variable ~loc "__fg_function")
|
||||
(lambda ~loc Nolabel source_pattern
|
||||
(replace (Exp.apply ~loc (value ~loc "__fg_function")
|
||||
[Nolabel, Exp.field ~loc source (ident ~loc name)]))) in
|
||||
List.map (fun (name, body) ->
|
||||
Str.value ~loc Nonrecursive [Vb.mk ~loc (variable ~loc name) body])
|
||||
[name, getter; "set_" ^ name, setter]) fields)
|
||||
[name, getter; "set_" ^ name, setter; "update_" ^ name, updater]) fields)
|
||||
|
||||
let structure mapper items =
|
||||
List.concat (List.map (fun item ->
|
||||
|
||||
Reference in new issue
Block a user