summaryrefslogtreecommitdiffstats
path: root/otherlibs/labltk/browser
diff options
context:
space:
mode:
Diffstat (limited to 'otherlibs/labltk/browser')
-rw-r--r--otherlibs/labltk/browser/searchpos.ml36
1 files changed, 21 insertions, 15 deletions
diff --git a/otherlibs/labltk/browser/searchpos.ml b/otherlibs/labltk/browser/searchpos.ml
index 78316c77e..430d52040 100644
--- a/otherlibs/labltk/browser/searchpos.ml
+++ b/otherlibs/labltk/browser/searchpos.ml
@@ -674,6 +674,23 @@ let rec search_pos_structure ~pos str =
| Tstr_include (m, _) -> search_pos_module_expr m ~pos
end
+and search_pos_class_structure ~pos cls =
+ List.iter cls.cl_field ~f:
+ begin function
+ Cf_inher (cl, _, _) ->
+ search_pos_class_expr cl ~pos
+ | Cf_val (_, _, exp) -> search_pos_expr exp ~pos
+ | Cf_meth (_, exp) -> search_pos_expr exp ~pos
+ | Cf_let (_, pel, iel) ->
+ List.iter pel ~f:
+ begin fun (pat, exp) ->
+ search_pos_pat pat ~pos ~env:exp.exp_env;
+ search_pos_expr exp ~pos
+ end;
+ List.iter iel ~f:(fun (_,exp) -> search_pos_expr exp ~pos)
+ | Cf_init exp -> search_pos_expr exp ~pos
+ end
+
and search_pos_class_expr ~pos cl =
if in_loc cl.cl_loc ~pos then begin
begin match cl.cl_desc with
@@ -681,21 +698,7 @@ and search_pos_class_expr ~pos cl =
add_found_str (`Class (path, cl.cl_type))
~env:!start_env ~loc:cl.cl_loc
| Tclass_structure cls ->
- List.iter cls.cl_field ~f:
- begin function
- Cf_inher (cl, _, _) ->
- search_pos_class_expr cl ~pos
- | Cf_val (_, _, exp) -> search_pos_expr exp ~pos
- | Cf_meth (_, exp) -> search_pos_expr exp ~pos
- | Cf_let (_, pel, iel) ->
- List.iter pel ~f:
- begin fun (pat, exp) ->
- search_pos_pat pat ~pos ~env:exp.exp_env;
- search_pos_expr exp ~pos
- end;
- List.iter iel ~f:(fun (_,exp) -> search_pos_expr exp ~pos)
- | Cf_init exp -> search_pos_expr exp ~pos
- end
+ search_pos_class_structure ~pos cls
| Tclass_fun (pat, iel, cl, _) ->
search_pos_pat pat ~pos ~env:pat.pat_env;
List.iter iel ~f:(fun (_,exp) -> search_pos_expr exp ~pos);
@@ -802,6 +805,9 @@ and search_pos_expr ~pos exp =
search_pos_expr exp ~pos
| Texp_lazy exp ->
search_pos_expr exp ~pos
+ | Texp_object (cls, _, _) ->
+ search_pos_class_structure ~pos cls
+
end;
add_found_str (`Exp(`Expr, exp.exp_type)) ~env:exp.exp_env ~loc:exp.exp_loc
end