Skip to content

Commit c7e0448

Browse files
committed
change conversion interface to allow failure
1 parent 6d13754 commit c7e0448

File tree

13 files changed

+392
-197
lines changed

13 files changed

+392
-197
lines changed

ast/cinaps/gen_versions.ml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ module Structure = struct
272272
Print.indented (fun () ->
273273
Print.println
274274
"match Node.unwrap (Unversioned.Private.transparent t) ~version with";
275-
Print.println "| { name = %S; data } -> %s data"
275+
Print.println "| Some { name = %S; data } -> %s data"
276276
node_name
277277
(ast_to_ty ~grammar ty);
278278
Print.println "| _ -> None")
@@ -281,7 +281,7 @@ module Structure = struct
281281
Print.indented (fun () ->
282282
Print.println
283283
"match Node.unwrap (Unversioned.Private.transparent t) ~version with";
284-
Print.println "| { name = %S" node_name;
284+
Print.println "| Some { name = %S" node_name;
285285
Print.indented (fun () ->
286286
Print.println "; data = Record [| %s |]"
287287
(String.concat ~sep:"; "
@@ -298,7 +298,7 @@ module Structure = struct
298298
Print.indented (fun () ->
299299
Print.println
300300
"match Node.unwrap (Unversioned.Private.transparent t) ~version with";
301-
Print.println "| { name = %S; data } ->" node_name;
301+
Print.println "| Some { name = %S; data } ->" node_name;
302302
Print.indented (fun () ->
303303
Print.println "begin";
304304
Print.indented (fun () ->

ast/node.ml

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,14 @@ let version t = t.version
44

55
let wrap ~version ast = { version; ast }
66

7-
let rec unwrap ~version:dst_version { ast; version = src_version } =
8-
Astlib.History.convert Astlib.history ast ~src_version ~dst_version ~unwrap ~wrap
7+
let rec convert ~version:dst_version { ast; version = src_version } =
8+
let version, ast =
9+
Astlib.History.convert Astlib.history ast ~src_version ~dst_version ~unwrap ~wrap
10+
in
11+
{ version; ast }
12+
13+
and unwrap ~version t =
14+
let t = convert t ~version in
15+
if Astlib.Version.equal t.version version
16+
then Some t.ast
17+
else None

ast/node.mli

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ type t
22

33
val version : t -> Astlib.Version.t
44
val wrap : version:Astlib.Version.t -> t Astlib.Ast.t -> t
5-
val unwrap : version:Astlib.Version.t -> t -> t Astlib.Ast.t
5+
val unwrap : version:Astlib.Version.t -> t -> t Astlib.Ast.t option

0 commit comments

Comments
 (0)