Skip to content

Commit 7ed8b78

Browse files
committed
Thread a source location though for type error reporting instead of the awful "List.hd scopes" hack
1 parent af39e22 commit 7ed8b78

File tree

1 file changed

+11
-10
lines changed

1 file changed

+11
-10
lines changed

src/boot/me/resolve.ml

+11-10
Original file line numberDiff line numberDiff line change
@@ -261,6 +261,7 @@ let push_node r n =
261261

262262

263263
let rec lookup_type_by_name
264+
?loc:loc
264265
(cx:ctxt)
265266
(scopes:scope list)
266267
(recur:recur_info)
@@ -302,7 +303,7 @@ let rec lookup_type_by_name
302303
begin
303304
fun i t ->
304305
let t =
305-
resolve_type cx scopes recur t
306+
resolve_type ?loc:loc cx scopes recur t
306307
in
307308
iflog cx (fun _ -> log cx
308309
"lookup_type_by_name resolved arg %d to %a" i
@@ -325,16 +326,15 @@ let rec lookup_type_by_name
325326
(Fmt.fmt_to_str Ast.fmt_app_args args);
326327
end;
327328
let ty =
328-
rebuild_ty_under_params
329-
~node_id:(id_of_scope (List.hd scopes))
330-
cx None ty params args true
329+
rebuild_ty_under_params ?node_id:loc cx None ty params args true
331330
in
332331
iflog cx (fun _ -> log cx "--- lookup_type_by_name %a ==> %a"
333332
Ast.sprintf_name name
334333
Ast.sprintf_ty ty);
335334
(scopes', id, ty)
336335

337336
and resolve_type
337+
?loc:loc
338338
(cx:ctxt)
339339
(scopes:(scope list))
340340
(recur:recur_info)
@@ -344,7 +344,7 @@ and resolve_type
344344
let base = ty_fold_rebuild (fun t -> t) in
345345
let ty_fold_named name =
346346
let (scopes, node, t) =
347-
lookup_type_by_name cx scopes recur name
347+
lookup_type_by_name ?loc:loc cx scopes recur name
348348
in
349349
iflog cx (fun _ ->
350350
log cx "resolved type name '%a' to item %d with ty %a"
@@ -356,7 +356,7 @@ and resolve_type
356356
let recur = push_node recur node in
357357
iflog cx (fun _ -> log cx "recursively resolving type %a"
358358
Ast.sprintf_ty t);
359-
resolve_type cx scopes recur t
359+
resolve_type ?loc:loc cx scopes recur t
360360
in
361361
let fold =
362362
{ base with
@@ -379,7 +379,8 @@ let type_resolving_visitor
379379
let tinfos = Hashtbl.create 0 in
380380

381381
let resolve_ty (t:Ast.ty) : Ast.ty =
382-
resolve_type cx (!scopes) empty_recur_info t
382+
resolve_type ~loc:(id_of_scope (List.hd (!scopes)))
383+
cx (!scopes) empty_recur_info t
383384
in
384385

385386
let resolve_slot (s:Ast.slot) : Ast.slot =
@@ -412,7 +413,7 @@ let type_resolving_visitor
412413
let resolve_and_store_type _ =
413414
let t = ty_of_mod_item item in
414415
let ty =
415-
resolve_type cx (!scopes) empty_recur_info t
416+
resolve_type ~loc:item.id cx (!scopes) empty_recur_info t
416417
in
417418
log cx "resolved item %s, type as %a" id Ast.sprintf_ty ty;
418419
htab_put cx.ctxt_all_item_types item.id ty;
@@ -422,7 +423,7 @@ let type_resolving_visitor
422423
match item.node.Ast.decl_item with
423424
Ast.MOD_ITEM_type (_, ty) ->
424425
let ty =
425-
resolve_type cx (!scopes) empty_recur_info ty
426+
resolve_type ~loc:item.id cx (!scopes) empty_recur_info ty
426427
in
427428
log cx "resolved item %s, defining type %a"
428429
id Ast.sprintf_ty ty;
@@ -468,7 +469,7 @@ let type_resolving_visitor
468469

469470
let visit_obj_fn_pre obj ident fn =
470471
let fty =
471-
resolve_type cx (!scopes)
472+
resolve_type ~loc:fn.id cx (!scopes)
472473
empty_recur_info (Ast.TY_fn (ty_fn_of_fn fn.node))
473474
in
474475
log cx "resolved obj fn %s as %a" ident Ast.sprintf_ty fty;

0 commit comments

Comments
 (0)