- List.fold_left typedecs ~init:env ~f:(
- fun env (A.TypeDec {name; ty; pos=_}) ->
- let ty = transTy ~env ty in
- Env.set_typ env name ty
- )
+ let env =
+ List.fold_left typedecs ~init:env ~f:(
+ fun env (A.TypeDec {name; ty=_; pos=_}) ->
+ Env.set_typ env name (Type.Name (name, ref None))
+ )
+ in
+ List.iter typedecs ~f:(fun (A.TypeDec {name; ty=ty_exp; pos}) ->
+ let ty = transTy ~env ty_exp in
+ (match env_get_typ ~sym:name ~env ~pos with
+ | Type.Name (name, ty_opt_ref) ->
+ ty_opt_ref := Some ty
+ | Type.Unit
+ | Type.Nil
+ | Type.Int
+ | Type.String
+ | Type.Record _
+ | Type.Array _ ->
+ ()
+ )
+ );
+ env