File tree Expand file tree Collapse file tree 3 files changed +17
-4
lines changed Expand file tree Collapse file tree 3 files changed +17
-4
lines changed Original file line number Diff line number Diff line change @@ -98,13 +98,17 @@ and translateSignatureItem ~config ~outputFileRelative ~resolver ~typeEnv
9898 signatureItem : Translation.t =
9999 match signatureItem with
100100 | {Typedtree. sig_desc = Typedtree. Tsig_type (recFlag , typeDeclarations )} ->
101+ let recursive = recFlag = Recursive in
102+ if recursive then
103+ typeDeclarations
104+ |> TranslateTypeDeclarations. addRecursiveTypesToTypEnv ~type Env;
101105 {
102106 importTypes = [] ;
103107 codeItems = [] ;
104108 typeDeclarations =
105109 typeDeclarations
106110 |> TranslateTypeDeclarations. translateTypeDeclarations ~config
107- ~output FileRelative ~recursive: (recFlag = Recursive ) ~resolver
111+ ~output FileRelative ~recursive ~resolver
108112 ~type Env;
109113 }
110114 | {Typedtree. sig_desc = Tsig_value valueDescription } ->
Original file line number Diff line number Diff line change @@ -260,14 +260,17 @@ and translateStructureItem ~config ~outputFileRelative ~resolver ~typeEnv
260260 (structItem : Typedtree.structure_item ) : Translation.t =
261261 match structItem with
262262 | {str_desc = Tstr_type (recFlag , typeDeclarations )} ->
263+ let recursive = recFlag = Recursive in
264+ if recursive then
265+ typeDeclarations
266+ |> TranslateTypeDeclarations. addRecursiveTypesToTypEnv ~type Env;
263267 {
264268 importTypes = [] ;
265269 codeItems = [] ;
266270 typeDeclarations =
267271 typeDeclarations
268272 |> TranslateTypeDeclarations. translateTypeDeclarations ~config
269- ~output FileRelative ~recursive: (recFlag = Recursive ) ~resolver
270- ~type Env;
273+ ~output FileRelative ~recursive ~resolver ~type Env;
271274 }
272275 | {str_desc = Tstr_value (_loc , valueBindings )} ->
273276 valueBindings
Original file line number Diff line number Diff line change @@ -313,13 +313,19 @@ let hasSomeGADTLeaf constructorDeclarations =
313313 (fun declaration -> declaration.Types. cd_res != None )
314314 constructorDeclarations
315315
316+ let addRecursiveTypesToTypEnv ~typeEnv typeDeclarations =
317+ typeDeclarations
318+ |> List. map (fun ({typ_id} : Typedtree.type_declaration ) -> typ_id)
319+ |> List. iter (fun type_id ->
320+ typeEnv |> TypeEnv. newType ~name: (type_id |> Ident. name))
321+
316322let translateTypeDeclaration ~config ~outputFileRelative ~recursive ~resolver
317323 ~typeEnv
318324 ({typ_attributes; typ_id; typ_loc; typ_manifest; typ_params; typ_type} :
319325 Typedtree.type_declaration ) : CodeItem.typeDeclaration list =
320326 if ! Debug. translation then
321327 Log_. item " Translate Type Declaration %s\n " (typ_id |> Ident. name);
322- if recursive then typeEnv |> TypeEnv. newType ~name: (typ_id |> Ident. name);
328+
323329 let typeName = Ident. name typ_id in
324330 let typeVars =
325331 typ_params
You can’t perform that action at this time.
0 commit comments